Produto
Comunicação e softphone
Front-end dedicado ao Atendente: lista de Conversas, chat, info do contato e softphone integrado. Voz roda no navegador via WebRTC sobre a credencial automática do Atendente.
Atualizado em
O que é
A tela de Comunicação (também chamada de tela de atendimento) é a interface imersiva onde o Atendente humano executa o atendimento. Diferente do dashboard normal, ela ocupa a tela inteira (sem sidebar) e organiza tudo o que o Atendente precisa em três painéis:
┌─────────────────┬───────────────┬──────────────────────┐
│ Conversas │ Chat │ Info do Contato + │
│ ativas + Grupos│ │ Discador / softphone│
└─────────────────┴───────────────┴──────────────────────┘A tela cobre tanto texto (chat de Conversas e Grupos de WhatsApp) quanto voz (chamadas via softphone WebRTC), na mesma janela.
Painel de Conversas
O painel da esquerda lista o trabalho do Atendente em duas seções:
- Conversas ativas — atribuídas a este Atendente, ordenadas por
recência. A lista é atualizada por polling (5 s) e por WebSocket
em tempo real (
/api/v1/ws/agent) — quando uma Conversa é atribuída pela Fila, ela aparece imediatamente. - Grupos — grupos de WhatsApp dos quais o Atendente faz parte (quando aplicável). Ver Grupos de WhatsApp.
Selecionar uma Conversa ou um Grupo abre o painel central. As duas seleções são mutuamente exclusivas — escolher um Grupo limpa a Conversa selecionada e vice-versa.
Painel central — chat
Mostra a conversa selecionada com:
- Histórico de mensagens — texto, mídia, sistema. Mídia (imagem, áudio, documento) abre em lightbox para visualização.
- Composer — campo de texto para responder. Suporta:
- Picker de Mensagens pré-prontas
— busca por título ou atalho
/cpf,/saudacao. - Anexar Material — abre a biblioteca de Materiais da Operação.
- Enviar mídia — upload direto pelo composer.
- Picker de Mensagens pré-prontas
— busca por título ou atalho
- Botão de transferir — abre diálogo para passar a Conversa para outro Atendente ou outra Fila (ver Transferências adiante).
- Botão de encerrar — fecha a Conversa quando o atendimento estiver concluído.
Painel direito — info do contato + softphone
Combina três blocos:
- Cadastro do contato — nome, telefone, e-mail, dados do mailing quando a Conversa veio de Campanha Outbound.
- Discador — botão de discagem manual (quando o Atendente está
vinculado a Campanha Outbound ativa) e painel de preview dialer
(quando o modo da Campanha é
preview). - Softphone — controles WebRTC para chamadas de voz.
Softphone WebRTC
O softphone é o cliente SIP embarcado no navegador. Funciona em cima da credencial de Voz do Atendente (criada automaticamente — ver Voz no perfil do usuário) e se conecta ao Asterisk via WebSocket seguro (WSS).
Status do softphone
| Status | Significado |
|---|---|
| disconnected | Cliente não tentou ou não conseguiu se registrar. |
| connecting | Em negociação com o servidor SIP. |
| registered | Pronto para receber e fazer chamadas. |
| error | Falha de registro — credencial inválida, rede bloqueada, certificado. |
Estados de chamada
| CallState | Significado |
|---|---|
| idle | Sem chamada ativa. |
| ringing | Chamada entrante tocando, aguardando atender. |
| in_call | Chamada em andamento. |
| on_hold | Chamada em espera. |
Controles disponíveis
- Atender uma chamada entrante.
- Desligar.
- Mute / unmute do microfone.
- Hold / unhold — coloca a chamada em espera (toca música de espera para o outro lado se configurada).
- Transferir — passa a chamada para outro número/ramal. Detalhes em Transferências.
- DTMF — teclado para enviar dígitos durante a chamada (digitar opção de URA do parceiro, autenticar em sistemas externos).
- Indicador de volume do microfone.
Como o softphone obtém credenciais
A senha SIP nunca é renderizada no DOM ou em logs. O fluxo:
- Ao abrir a tela, o cliente WebRTC pede o segredo de registro a um endpoint autenticado.
- O backend devolve o segredo cifrado in-memory para o cliente, regista o uso em audit log.
- O cliente registra-se no Asterisk via WSS.
A rotação é manual — admin clica “Regenerar senha” no perfil do User; a próxima conexão pega o novo segredo.
Discagem manual
O botão de discagem manual no painel direito abre um teclado e um campo de número. Ao clicar discar, a plataforma:
- Verifica se o Atendente tem ao menos uma Campanha Outbound ativa atribuída. Sem isso, o botão não aparece.
- Cria uma Conversa do tipo discar vinculada à Campanha (vide cascata D4 para escolher a rota de saída).
- Inicia a chamada via softphone WebRTC.
Sem Campanha Outbound atribuída, o Atendente não tem caller ID nem trunk para usar — discagem manual é desabilitada por desenho.
Preview dialer
Quando a Campanha Outbound é do modo preview, o painel direito
exibe a ficha do contato antes de a chamada ser iniciada.
Atendente:
- Vê os dados do contato (nome, motivo da chamada, histórico, dados do mailing).
- Decide entre discar agora ou pular (devolve o contato para a fila de discagem).
- Confirma a discagem; a chamada acontece via softphone WebRTC.
Os modos progressive, predictive e power discam sem ficha
prévia; o Atendente recebe a chamada já conectada.
Transferências
O diálogo de transferência cobre:
- Para outro Atendente específico.
- Para outra Fila (a Conversa volta a
queued, distribuída pela estratégia da Fila destino). - Para outro número externo (chamada de voz transferida via Asterisk).
Em chamadas de voz, a transferência pode ser fria (transfere e desliga) ou assistida (Atendente fala com o destinatário antes, depois conecta as pontas).
Status do Atendente
Toggle visível no topo da tela permite ao Atendente alternar entre:
- Disponível — recebe distribuição de novas Conversas.
- Pausa — não recebe novas; precisa selecionar motivo (almoço, banheiro, treinamento). A duração da pausa é registrada para o supervisor.
- Offline — desconecta do registro de presença (e do softphone).
Requisitos técnicos
HTTPS obrigatório para WebRTC
A captura de microfone via getUserMedia() exige contexto seguro.
Em produção isso é automático (HTTPS pelo CDN/proxy). Em
desenvolvimento via LAN, lembre que npm run dev:https (ou
equivalente) é necessário — localhost:3000 funciona, mas
https://192.168.x.x:3000 é o caminho real para testar voz no
celular ou em outra máquina.
Permissão de microfone
O navegador pede permissão na primeira abertura. Bloquear é equivalente a deixar o softphone sem entrada de áudio.
Rede
WebRTC usa DTLS-SRTP para criptografar mídia e ICE para contornar NAT. Redes corporativas com bloqueio agressivo de UDP podem precisar de TURN configurado — fale com a infra.
Boas práticas
- Mantenha a Comunicação aberta durante o turno. É a tela desenhada para o trabalho do Atendente — o dashboard normal não recebe distribuição de Conversas.
- Use o picker de Mensagens em vez de digitar tudo do zero. Reduz TMA e padroniza tom.
- Atenção ao status. Sair sem mudar para “Pausa” ou “Offline” pode resultar em Conversas distribuídas para alguém que não está na cadeira.
- Refaça a permissão de microfone se o softphone ficar mudo após uma atualização do navegador.
Limites conhecidos
- WebRTC-only. Não há suporte primário para hardphone físico ou softphone de terceiro (D11). O softphone embarcado é o consumidor oficial das credenciais de Voz.
- Conferência avançada com mais de 3 partes não está exposta na UI — encaminhe para conferência fora da plataforma quando necessário.
- Sem integração nativa com headset multimídia (botões físicos de atender/desligar do headset). Use os botões da UI.
Erros comuns
- Microfone bloqueado. Sem permissão, softphone fica mudo. Cheque o ícone de cadeado do navegador.
- Status “error” após registro. Tipicamente: rede corporativa bloqueando WSS para o servidor de voz, ou credencial regenerada por admin. Reabra a tela após confirmar a credencial.
- Botão de discagem manual sumido. Falta Campanha Outbound ativa atribuída ao Atendente.
- HTTP em vez de HTTPS na LAN. Microfone não captura, softphone não registra. Sempre HTTPS para voz.