

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Solucionar problemas com o widget de comunicação do Amazon Connect
<a name="ts-cw"></a>

Este tópico é para desenvolvedores que precisam investigar problemas que podem ocorrer ao configurar um widget de comunicação no site Amazon Connect administrativo. 

**Topics**
+ [“Algo deu errado”](#sww)
+ [Clientes que não estão recebendo mensagens do agente: em rede ou WebSocket desconectados](#mam)
+ [Ignorando o CORS ao abrir links de terceiros](#bcwotpl)

## “Algo deu errado”
<a name="sww"></a>

Se você vir a seguinte mensagem de erro **Algo deu errado** ao carregar seu widget de comunicação, abra as ferramentas do navegador para ver os registros de erros. 

![\[Uma mensagem de erro que diz que algo deu errado.\]](http://docs.aws.amazon.com/pt_br/connect/latest/adminguide/images/chatwidget-error-message.png)


A seguir, estão os problemas comuns que podem causar esse erro.

### 400 Solicitação inválida
<a name="400-invalid-request"></a>

Se os registros mencionarem uma solicitação inválida 400, há algumas causas possíveis:
+ Seu widget de comunicação não está sendo servido em um domínio permitido. Você deve indicar especificamente os domínios em que hospedará seu widget.
+ A solicitação para o endpoint não está formatada corretamente. Isso geralmente ocorre somente se o conteúdo do trecho de incorporação tiver sido modificado.

### 401 Não autorizado
<a name="401-unauthorized"></a>

![\[A mensagem de erro “Algo deu errado”.\]](http://docs.aws.amazon.com/pt_br/connect/latest/adminguide/images/something-went-wrong.png)


Se os registros mencionarem um 401 não autorizado, isso é um problema com a autenticação JSON Web Token (JWT). Ele exibe a página de erro acima.

Depois de ter o JWT, você precisa implementá-lo na função de retorno de chamada `authenticate`. O exemplo a seguir mostra como implementá-lo se você estiver tentando buscar seu token e depois usá-lo: 

```
amazon_connect('authenticate', function(callback) {
  window.fetch('/token').then(res => {
    res.json().then(data => {
      callback(data.data);
    });
  });
});
```

Aqui está uma versão mais básica do que precisa ser implementado:

```
amazon_connect('authenticate', function(callback) {
   callback(token);
});
```

Para obter instruções sobre como implementar o JWT, consulte [Etapa 3: confirmar e copiar o código e as chaves de segurança do widget de comunicação](add-chat-to-website.md#confirm-and-copy-chat-widget-script).

Se você já implementou o retorno de chamada, os seguintes cenários ainda podem causar um 401:
+ Resposta inválida
+ Token expirado

### 404 Não encontrado
<a name="404-not-found"></a>

Normalmente, um código de status 404 é gerado quando o recurso solicitado não existe:
+ Um widgetId inválido é especificado na solicitação da API
+ O widgetId é válido, mas o fluxo associado foi excluído ou arquivado.
+ O widget não foi publicado ou foi excluído.

Verifique se o snippet está exatamente como foi copiado do site do Amazon Connect administrador e se nenhum dos identificadores foi alterado.

Se os identificadores não tiverem sido alterados e você estiver vendo um erro 404, entre em contato com o AWS Support. 

### 500 Erro interno do servidor
<a name="500-internalservererror-chatwidget"></a>

Isso pode ser causado pelo fato de sua função vinculada ao serviço não ter as permissões necessárias para iniciar o chat. Isso acontece se sua instância do Amazon Connect foi criada antes de outubro de 2018 porque você não tem funções vinculadas a serviços configuradas.

**Solução**: adicione a política de `connect:*` sobre a função associada à sua instância do Amazon Connect. Para obter mais informações, consulte [Usar perfis vinculados ao serviço e permissões de perfil para o Amazon Connect](connect-slr.md).

Se sua função vinculada a serviços tiver as permissões corretas, entre em contato com o AWS Support.

## Clientes que não estão recebendo mensagens do agente: em rede ou WebSocket desconectados
<a name="mam"></a>

Durante uma sessão de bate-papo, um cliente que está usando um aplicativo de bate-papo perde a network/WebSocket conexão. Ele recupera rapidamente a conexão, mas as mensagens enviadas pelo atendente durante esse período não são renderizadas na interface de chat do cliente. 

A imagem a seguir mostra um exemplo da interface de bate-papo do cliente e do Painel de controle de contatos do agente side-by-side. A mensagem enviada pelo atendente não é renderizada na sessão de chat do cliente. No entanto, para o atendente, ela é exibida como recebida pelo cliente.

![\[Uma mensagem no CCP que não é enviada ao contato.\]](http://docs.aws.amazon.com/pt_br/connect/latest/adminguide/images/tw-cw-001-message-not-sent.png)


Se o aplicativo de bate-papo do cliente perder a network/WebSocket conexão, a interface do usuário do chat deverá fazer o seguinte para recuperar mensagens futuras, bem como mensagens que foram enviadas a ele enquanto estava desconectado: 
+ Restabeleça a WebSocket conexão para receber mensagens futuras novamente.
+ Faça uma solicitação [chatSession.getTranscript](https://github.com/amazon-connect/amazon-connect-chatjs?tab=readme-ov-file#chatsessiongettranscript) (API [getTranscripts](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_GetTranscript.html)) para recuperar todas as mensagens perdidas que foram enviadas enquanto o cliente estava desconectado.

Se o atendente enviar uma mensagem enquanto a interface de usuário de chat do cliente estiver desconectada, a mensagem será armazenada com sucesso no backend do Amazon Connect: o CCP está funcionando conforme o esperado e as mensagens são todas registradas na transcrição, mas o dispositivo do cliente não consegue receber mensagens. Quando o cliente se reconecta ao WebSocket, há uma lacuna nas mensagens. As futuras mensagens recebidas aparecerão novamente a partir do WebSocket, mas as mensagens de lacuna ainda estarão ausentes, a menos que o código faça uma chamada explícita para a [GetTranscript](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_GetTranscript.html)API.

### Solução
<a name="solution-network-disconnected"></a>

Use a [sessão de bate-papo. onConnectionEstablished](https://github.com/amazon-connect/amazon-connect-chatjs?tab=readme-ov-file#chatsessiononconnectionestablished)manipulador de eventos para chamar a [GetTranscript](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_GetTranscript.html)API. O manipulador de `chatSession.onConnectionEstablished` eventos é acionado quando se WebSocket reconecta. O ChatJS tem uma lógica integrada de pulsação e repetição para a conexão. WebSocket No entanto, como o ChatJS não está armazenando a transcrição, você deve adicionar um código personalizado à interface de usuário de chat para buscar manualmente a transcrição novamente.

O exemplo de código a seguir mostra como implementar `onConnectionEstablished` para chamar `GetTranscript`.

```
import "amazon-connect-chatjs";

const chatSession = connect.ChatSession.create({
  chatDetails: {
    ContactId: "the ID of the contact",
    ParticipantId: "the ID of the chat participant",
    ParticipantToken: "the participant token",
  },
  type: "CUSTOMER",
  options: { region: "us-west-2" },
});

// Triggered when the websocket reconnects
chatSession.onConnectionEstablished(() => {
  chatSession.getTranscript({
    scanDirection: "BACKWARD",
    sortOrder: "ASCENDING",
    maxResults: 15,
    // nextToken?: nextToken - OPTIONAL, for pagination
  })
    .then((response) => {
      const { initialContactId, nextToken, transcript } = response.data;
      // ...
    })
    .catch(() => {})
});
```

```
function loadLatestTranscript(args) {
    // Documentation: https://github.com/amazon-connect/amazon-connect-chatjs?tab=readme-ov-file#chatsessiongettranscript
    return chatSession.getTranscript({
        scanDirection: "BACKWARD",
        sortOrder: "ASCENDING",
        maxResults: 15,
        // nextToken?: nextToken - OPTIONAL, for pagination
      })
      .then((response) => {
        const { initialContactId, nextToken, transcript } = response.data;
        
        const exampleMessageObj = transcript[0];
        const {
          DisplayName,
          ParticipantId,
          ParticipantRole, // CUSTOMER, AGENT, SUPERVISOR, SYSTEM
          Content,
          ContentType,
          Id,
          Type,
          AbsoluteTime, // sentTime = new Date(item.AbsoluteTime).getTime() / 1000
          MessageMetadata, // { Receipts: [{ RecipientParticipantId: "asdf" }] }
          Attachments,
          RelatedContactid,
        } = exampleMessageObj;

        return transcript // TODO - store the new transcript somewhere
      })
      .catch((err) => {
        console.log("CustomerUI", "ChatSession", "transcript fetch error: ", err);
      });
}
```

Para ver outro exemplo, veja essa [implementação de código aberto em GitHub](https://github.com/amazon-connect/amazon-connect-chat-interface/blob/c88f854073fe6dd45546585c3bfa363d3659d73f/src/components/Chat/ChatSession.js#L408). 

## Ignorando o CORS ao abrir links de terceiros
<a name="bcwotpl"></a>

Para aumentar a segurança, o widget de comunicação opera em um ambiente sandbox. Como resultado, links de terceiros compartilhados no widget não podem ser abertos.

**Solução**

Há duas opções para ignorar o CORS a fim de permitir que links de terceiros sejam abertos.
+ **(Recomendado)**

  Atualize o atributo sandbox para permitir a abertura de links em uma nova guia, o que pode ser feito adicionando o seguinte atributo ao trecho de código:

  ```
  amazon_connect('updateSandboxAttributes', 'allow-scripts allow-same-origin allow-popups allow-downloads allow-top-navigation-by-user-activation allow-popups-to-escape-sandbox')
  ```
**nota**  
O valor do atributo pode ser atualizado conforme necessário para permitir ações específicas. Este é um exemplo de como permitir a abertura de links em uma nova guia.
+ Remova o atributo sandbox, o que pode ser feito adicionando o seguinte atributo ao trecho de código:

  ```
  amazon_connect('removeSandboxAttribute', true)
  ```