O WebSocket estabelece uma conexão contínua entre cliente e servidor, permitindo comunicação em tempo real. O Wootdesk utiliza essa conexão para enviar atualizações instantâneas sobre eventos da plataforma.
Observação: Este recurso é experimental e pode sofrer alterações entre versões. A compatibilidade retroativa não é garantida, então mantenha sempre sua implementação atualizada.
Por que usar conexão WebSocket?
A conexão WebSocket permite atualizações em tempo real sem necessidade de recarregar a página.
Ela é ideal para:
-
Aplicativos Android/iOS
-
Dashboards personalizados
-
Interfaces em tempo real
-
SDKs próprios
-
Sistemas omnichannel integrados ao Wootdesk
Com isso, agentes recebem mensagens, mudanças de status e notificações instantaneamente.
Como configurar uma conexão WebSocket no Wootdesk?
Para conectar ao WebSocket do Wootdesk, você precisará de um PubSub Token.
URL da conexão:
wss://<seu-dominio>/cable
Exemplo na cloud:
wss://app.wootdesk.com/cable
Tipos de PubSub Token
1. User PubSub Token
Possui permissões de agente/admin e recebe todos os eventos disponíveis.
Você pode obter esse token pela API de Perfil.
2. Contact PubSub Token
Gerado automaticamente para cada sessão de contato.
Ideal para:
-
Widgets personalizados
-
Apps mobile
-
Interfaces de clientes
Esse token recebe apenas eventos da própria sessão.
Como conectar ao WebSocket?
Exemplo de conexão:
const stringify = (payload = {}) => JSON.stringify(payload);
const pubSubToken = "<seu-pubsub-token>";
const accountId = "<account-id>";
const userId = "<user-id>";
const connection = new WebSocket(
"wss://app.wootdesk.com/cable"
);
connection.send(
stringify({
command: "subscribe",
identifier: stringify({
channel: "RoomChannel",
pubsub_token: pubSubToken,
account_id: accountId,
user_id: userId,
}),
})
);
Mantendo usuário online (Presence)
Para manter o status online, envie um evento de presença a cada 30 segundos.
Atualizar presença de agente/admin
const payload = stringify({
command: "message",
identifier: stringify({
channel: "RoomChannel",
pubsub_token: "<user-pubsub-token>",
account_id: accountId,
user_id: userId,
}),
data: stringify({ action: "update_presence" }),
});
connection.send(payload);
Atualizar presença de contato
const payload = stringify({
command: "message",
identifier: stringify({
channel: "RoomChannel",
pubsub_token: "<contact-pubsub-token>",
}),
data: stringify({ action: "update_presence" }),
});
connection.send(payload);
Objetos retornados nos eventos
Os eventos do WebSocket podem retornar os seguintes objetos:
-
Conversation
-
Contact
-
User
-
Message
-
Notification
Principais eventos disponíveis
conversation.created
Disparado quando uma nova conversa é criada.
Disponível para:
-
Agentes/Admins
-
Contatos
message.created
Disparado quando uma nova mensagem é enviada.
Disponível para:
-
Agentes/Admins
-
Contatos
message.updated
Disparado quando uma mensagem é editada/atualizada.
conversation.status_changed
Disparado quando o status da conversa muda.
Exemplos:
-
open
-
pending
-
resolved
-
snoozed
conversation.typing_on
Disparado quando alguém começa a digitar.
Inclui:
-
conversa
-
usuário
-
indicador se é nota privada
conversation.typing_off
Disparado quando alguém para de digitar.
assignee.changed
Disparado quando o responsável da conversa é alterado.
team.changed
Disparado quando o time responsável muda.
contact.created
Disparado quando um contato é criado.
contact.updated
Disparado quando um contato é atualizado.
presence.update
Atualiza status online/offline de usuários e contatos em tempo real.
notification_created
Disparado quando uma notificação é criada.
Exemplo de payload de evento
{
"message": {
"event": "message.created",
"data": {
"id": 1,
"content": "Olá!",
"message_type": 0
}
}
}
Casos de uso do WebSocket no Wootdesk
O WebSocket é extremamente útil para:
-
Atualização em tempo real do dashboard
-
Sistemas mobile
-
Widgets customizados
-
Notificações instantâneas
-
Indicador de digitação
-
Presença online/offline
-
Monitoramento omnichannel
-
Integrações próprias
Boas práticas
-
Reenviar presença a cada 30 segundos
-
Reconectar automaticamente em caso de queda
-
Sempre utilizar o token mais recente
-
Validar eventos recebidos antes de processar
-
Utilizar SSL (
wss://) em produção