
O WebSocket estabelece uma conexão contínua entre o cliente e o servidor, permitindo comunicação bidirecional. O Chatwoot utiliza essa conexão para fornecer atualizações em tempo real sobre eventos da plataforma. Para se conectar ao WebSocket do Chatwoot, basta fornecer um token e seguir as instruções de configuração deste guia.
Nota: Este recurso é experimental e a documentação pode mudar a cada nova versão. Além disso, a compatibilidade com versões anteriores não é garantida, então é essencial garantir que você esteja usando a versão mais recente da implementação.
Por que usar uma conexão WebSocket?
A conexão WebSocket permite atualizações de dados em tempo real, o que é ideal para clientes como os SDKs de Android ou iOS do Chatwoot. Isso atualiza o painel sem precisar recarregar a página, melhorando a experiência do usuário e a produtividade dos agentes.
Como configurar uma conexão WebSocket com o Chatwoot?
Para configurar uma conexão WebSocket com o Chatwoot, você precisa iniciar uma conexão com o token de autenticação PubSub fornecido pelo Chatwoot. A URL para conexão é wss://<sua-url-de-instalacao>/cable, substituindo <sua-url-de-instalacao> pelo endereço da sua instância.
Um token PubSub é usado para autenticar o cliente ao se conectar ao serviço PubSub (publicação e assinatura). O cliente deve apresentar esse token para estabelecer a conexão e começar a publicar ou assinar mensagens.
Há dois tipos de token PubSub disponíveis no Chatwoot:
-
Token PubSub de Usuário: tem os privilégios de um agente/administrador e recebe todos os eventos listados neste documento. Você pode obter o token chamando a API de Perfil.
-
Token PubSub de Contato: o Chatwoot gera um token exclusivo para cada sessão de contato. Esse token é usado para conectar-se ao WebSocket e receber atualizações em tempo real daquela sessão. Quando um contato é criado por meio das APIs públicas, o
pubsub_tokené incluído na resposta. Esse token dá acesso apenas aos eventos da sessão atual, comoconversation.createdemessage.created.
Como conectar ao WebSocket do Chatwoot?
Para se conectar ao WebSocket do Chatwoot, use o comando subscribe. O identificador depende do tipo de token:
- Com um token de contato, envie somente
channelepubsub_token. - Com um token de usuário, envie também
account_ideuser_id.
No exemplo abaixo, escolha exatamente um dos dois identificadores:
const stringify = (payload = {}) => JSON.stringify(payload);
const contactIdentifier = {
channel: "RoomChannel",
pubsub_token: "<token-pubsub-de-contato>",
};
const userIdentifier = {
channel: "RoomChannel",
pubsub_token: "<token-pubsub-de-usuario>",
account_id: "<seu-account-id>",
user_id: "<seu-user-id>",
};
// Use contactIdentifier para um contato ou userIdentifier para um usuário.
const identifier = contactIdentifier;
const connection = new WebSocket("wss://<sua-url-de-instalacao>/cable");
connection.addEventListener("open", () => {
connection.send(
stringify({
command: "subscribe",
identifier: stringify(identifier),
})
);
});
Como publicar a presença no servidor WebSocket?
Para manter o status dos usuários online no Chatwoot, envie um evento de atualização de presença periodicamente ao servidor.
-
Atualizar presença de agente/administrador
Envie o seguinte payload ao servidor:
const userPayload = stringify({
command: "message",
identifier: stringify(userIdentifier),
data: stringify({ action: "update_presence" }),
});
connection.send(userPayload);
-
Atualizar presença de contato
Envie o seguinte payload:
const contactPayload = stringify({
command: "message",
identifier: stringify(contactIdentifier),
data: stringify({ action: "update_presence" }),
});
connection.send(contactPayload);
Payloads WebSocket
Os eventos no Chatwoot podem conter diversos objetos no payload, como Conversation, Contact, User e Message. Cada evento retorna dados específicos dependendo do tipo de objeto e do evento que ocorreu, como conversas criadas, mensagens enviadas ou atualizações de presença.
Agora você está pronto para configurar e utilizar o WebSocket no Chatwoot, oferecendo uma experiência em tempo real e aumentando a eficiência das suas operações de atendimento.