- o agente atende e faz ligações pelo webphone, dentro da tela do seu CRM;
- o CRM é avisado de cada ligação (webhooks) e consulta/grava os dados do cliente atendido, identificando o prospect pelo código que a sua empresa cadastrou no IPBoX;
- o CRM também comanda o IPBoX (API), por exemplo para discar um número com um clique.
Os exemplos usam apenas requisições HTTP/JSON, então valem para qualquer linguagem. O código do receptor de webhook aparece em Node.js e PHP só como referência. Você também não precisa usar o SIP.js: qualquer cliente SIP com WebSocket seguro serve.
Visão geral
São três peças:Antes de começar
Para seguir este exemplo, confirme que você já tem os três itens abaixo:- Um token da API — veja Primeiros passos com a API.
- O recurso de WebSocket ativo no IPBoX. Ele vem habilitado por padrão; se a
API responder
Websocket desativado, solicite a ativação ao suporte. - Uma URL HTTPS pública no seu backend para receber os webhooks.
Passo 1 — Obter as credenciais do webphone
O backend do CRM pede ao IPBoX as credenciais do agente:Passo 2 — Conectar o webphone
Para o IPBoX, o webphone é um cliente SIP comum. Qualquer biblioteca ou softphone que suporte:- registro SIP sobre WebSocket seguro (WSS);
- mídia WebRTC (ICE e DTLS-SRTP);
- pelo menos um dos codecs
opusouulaw;
Passo 3 — Deixar o agente disponível
Para receber ligações de fila ou do discador, o agente precisa estar logado no IPBoX e fora de pausa. Chame, a partir do backend:logout. Para pausas (almoço etc.), pausein e
pauseout. Os parâmetros completos estão na Referência da API.
Passo 4 — Cadastrar o webhook
Em IPBoX > Integrações > Webhooks, cadastre a URL do seu backend (por exemplohttps://crm.suaempresa.com.br/webhook-ipbox), defina um Secret e
marque os eventos que o CRM vai usar:
O
agente.busy é um evento de agente (não de ligação): ele aparece no
mesmo cadastro, no grupo de eventos de agente. Seus campos estão descritos em
campos extras do agente.busy.
Detalhes do cadastro em Webhooks.
Passo 5 — Receber os eventos no CRM
O receptor precisa fazer quatro coisas:- Validar o header
X-Webhook-Secret. - Responder
200na hora e processar depois (respostas lentas ou com erro geram reenvio). - Ignorar duplicados usando o
evento_id(o mesmo evento pode chegar mais de uma vez). - Respeitar a ordem usando a
sequenciada ligação (ligacao_id): se chegar um evento com sequência menor ou igual à última já aplicada, ele é antigo e deve ser ignorado.
ligacao.*. Os eventos de agente
(como o agente.busy) não têm evento_id, ligacao_id nem sequencia e são
enviados uma única vez, sem reenvio — então trate-os separadamente, como nos
exemplos abaixo.
Como o CRM encontra o prospect: o codigo
O codigo do agente.busy é o identificador do prospect que a sua empresa
informa ao cadastrá-lo no IPBoX (por exemplo, o ID do cliente no CRM). Ele
permite encontrar o registro exato, sem depender do telefone, que pode ser
compartilhado ou estar desatualizado. Por isso, o agente.busy é o evento
mais importante para abrir a ficha: ele chega quando o agente efetivamente
entra na ligação.
- Se
codigovier vazio, a ligação não está associada a um prospect (por exemplo, uma ligação manual pelo webphone ou um número que não está cadastrado). Use onumeropara procurar o cliente. - Para ligar o
agente.busyaos eventosligacao.*da mesma ligação, use ousuario_iddo agente e onumerodo cliente (numero_origemounumero_destino, conforme adirecao).
Como o CRM sabe quem é o agente
Os eventos trazem ousuario_id do IPBoX. Para ligá-lo ao usuário do seu CRM,
guarde esse ID no cadastro do agente. Você obtém os IDs com a API
listarUsuarios (campos id e login).
Como levar a ficha até a tela do agente
O webhook chega no backend do CRM. Para abrir a ficha na tela do agente (screen pop), o backend usa o canal que o seu CRM já tem com o navegador (WebSocket, SSE, push), endereçado pelousuario_id do evento.
Passo 6 — Comandar o IPBoX a partir do CRM (opcional)
Os parâmetros completos de cada uma estão na Referência da API.
Exemplos de fluxo
Cliente liga e cai na fila
Se o cliente desligar na URA, os eventos são só
ligacao.recebida e
ligacao.encerrada (resultado: desligada, motivo: ura).
Agente liga para um cliente pelo webphone
Se o cliente não atender, vêm
ligacao.falha (com motivo, por exemplo
nao_atende ou ocupado) e ligacao.encerrada.
Cuidados
- Para identificar o prospect, use o
codigodoagente.busy. Oprospect_iddos eventosligacao.*é o ID interno do IPBoX e só existe nas ligações do discador. Para ligações feitas ou recebidas pelo webphone, o CRM identifica o cliente pelo telefone (numero_origem/numero_destino). usuario_ideramalpodem virnullemligacao.recebida(ainda não há agente) e, por alguns segundos, logo depois do login do agente. Não dependa deles nesse evento.- Reenvio e ordem: se o seu endpoint falhar, o IPBoX reenvia até 5 vezes (5s, 15s, 1min e 5min); por isso eventos podem chegar fora de ordem ou repetidos. Veja Entrega e reenvio.
- Segurança: o
X-Webhook-Secreté um segredo compartilhado, não uma assinatura do corpo. Use sempre HTTPS. - Teste antes: aponte o webhook para o webhook.site e faça algumas ligações para ver os payloads reais.
Próximos passos
- Referência técnica do Webhook — todos os campos de cada evento.
- Referência da API — todos os endpoints.
