Softphone WebRTC que vive dentro do ticket do helpdesk. O atendente disca, atende, transfere e grava sem sair da tela em que já está — e a própria chamada produz o registro: cliente identificado, ticket vinculado, gravação anexada, transcrição e resumo por IA.
O problema
Num atendimento por telefone o operador trabalha em duas telas: o discador de um lado, o helpdesk do outro. Ele atende, ouve o nome do cliente, procura o cadastro à mão, abre o ticket, e no fim digita de memória o que aconteceu. O registro acaba sendo a versão que o operador lembrou — não a que aconteceu.
O que o software faz
Telefonia completa no navegador. Discar com teclado e histórico clicável, atender, recusar, mudo, espera, teclado numérico durante a chamada, transferência cega e assistida, e gravação sob demanda — condicionada à permissão do ramal na central.
Qualidade medida, não sentida. Perda de pacotes e jitter em quatro barras durante a conversa, registradas junto da chamada. Quando o cliente diz que “ficou ruim”, existe número.
O ticket se escreve sozinho. Identificação do cliente pelo telefone em três formatos, criação de contato e organização, vínculo com ticket existente ou criação de um novo, nota de início e de encerramento com status e durações, gravação anexada com player nativo, transcrição e resumo por IA.
Disponível antes do primeiro clique. O registro de telefonia sobe num processo em segundo plano assim que o helpdesk abre. Há eleição de dono entre as abas — o mesmo ramal nunca registra duas vezes — e uma trava que impede o registro quando o microfone está bloqueado.
Erros em português de gente. Vinte códigos de erro do SDK de voz traduzidos para causa e ação, no lugar do código numérico.
Três abordagens para o mesmo problema
Antes da primeira linha, inventariei três implementações de telefonia dentro de helpdesk, capacidade por capacidade — duas anteriores e a que construí.
| Capacidade | Painel que observa | Softphone só no ticket | Esta abordagem |
|---|---|---|---|
| Áudio no próprio navegador | ❌ discador externo | ✅ | ✅ |
| Funciona sem ticket aberto | ✅ | ❌ | ✅ |
| Eventos da central em tempo real | ✅ | ❌ | ✅ |
| Cliente na tela antes do “alô” | ✅ | 🟡 | ✅ |
| Teclado numérico na chamada | ❌ | ❌ | ✅ |
| Transferência assistida | ❌ | ❌ | ✅ |
| Gravação por permissão do ramal | ❌ | ❌ | ✅ |
| Qualidade medida na tela | ❌ | ❌ | ✅ |
| Registro antes do primeiro clique | ❌ | ❌ | ✅ |
| Transcrição e resumo por IA | ✅ | ❌ | ✅ |
A tabela decidiu a arquitetura: não trocar uma metade pela outra. O painel que observa já fazia bem a parte de registro; faltava voz. A escolha foi costurar a voz dentro dele — e a lista de capacidades perdidas no caminho ficou vazia.
Como foi construído
Um código, três casas. O mesmo frontend roda embutido no helpdesk, direto no navegador e como aplicativo de mesa. Ele detecta o ambiente sozinho e esconde os controles que não fazem sentido em cada um.
Casca fina. O aplicativo instalado tem 44 KB e não contém a lógica: carrega a aplicação do backend em tempo de execução. Melhoria nova chega ao atendente com um F5 — sem reinstalar e sem passar pelo painel de administração.
Duas fontes de verdade, com fronteira escrita. O SDK de voz manda enquanto a chamada vive; a API da central manda depois que ela termina. Uma camada de correlação costura as duas por número e janela de tempo, com rede de segurança: sem o registro oficial em 45 segundos, a nota sai com os números do navegador — declarando a origem.


As telas do discador







🔒 Código-fonte
Projeto sob acordo de confidencialidade com o cliente. As telas desta página estão descaracterizadas: marca, cores e dados de exemplo foram substituídos. Converso sobre a arquitetura e as decisões em detalhe a convite.