Skip to main content
Este guia mostra, de ponta a ponta, como integrar o IPBoX a um sistema externo — por exemplo, o CRM da sua empresa:
  • 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:
Resposta:
Chame essa API sempre do backend do CRM. Nunca coloque o token da API no código do navegador. Devolva ao navegador apenas url, ramal, pass e o domínio, e só para o agente que está logado no CRM.

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 opus ou ulaw;
pode usar as credenciais do passo anterior. Como exemplo, com o SIP.js:

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:
Se o parâmetro DESLOGA_AGENTE_PAINEL_OFF estiver ativo no IPBoX (“Deslogar agentes com painel do agente off”), o agente que fez login pela API é deslogado automaticamente. O IPBoX só considera o painel “ligado” enquanto o painel do agente do IPBoX está aberto e enviando sinais de vida; quem entra só pela API e pelo seu webphone não tem painel aberto, e passa a ser deslogado depois de cerca de 2 minutos sem esse sinal. Antes de colocar a integração em produção, peça ao suporte para desativar esse parâmetro.
Ao encerrar o expediente, use 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 exemplo https://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:
  1. Validar o header X-Webhook-Secret.
  2. Responder 200 na hora e processar depois (respostas lentas ou com erro geram reenvio).
  3. Ignorar duplicados usando o evento_id (o mesmo evento pode chegar mais de uma vez).
  4. Respeitar a ordem usando a sequencia da ligação (ligacao_id): se chegar um evento com sequência menor ou igual à última já aplicada, ele é antigo e deve ser ignorado.
Os itens 3 e 4 valem para os eventos 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 codigo vier 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 o numero para procurar o cliente.
  • Para ligar o agente.busy aos eventos ligacao.* da mesma ligação, use o usuario_id do agente e o numero do cliente (numero_origem ou numero_destino, conforme a direcao).

Como o CRM sabe quem é o agente

Os eventos trazem o usuario_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 pelo usuario_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 codigo do agente.busy. O prospect_id dos eventos ligacao.* é 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_id e ramal podem vir null em ligacao.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