Chamadas

Evento: call · Transporte: POST para o seu receptor

Acompanhe sinalização de chamadas e registros de chamadas de saída concluídas.

Duas formas de evento

typeO que representaOnde correlacionar
CallSinalização ao vivo: oferta, aceite, encerramento, rejeição ou avisoevent.CallID e, quando disponível, event.Data.Tag
CallLogRegistro de chamada de saída concluída, recebido pelo fluxo de sincronizaçãoevent.callID e event.callResult

Os subtipos incluem oferta, aceite, encerramento, rejeição, avisos de chamada e sinalização de latência, conforme os dados recebidos. Avisos de latência podem ser suprimidos quando já houve notificação para a chamada. Não espere uma sequência fixa nem um evento para cada transição interna.

Como interpretar

  • EventType é sempre call; type diferencia Call e CallLog.
  • No fluxo ao vivo, o subtipo pode estar em event.Data.Tag. O campo Reason aparece em encerramentos quando fornecido.
  • fromMe descreve a origem. wasSentByAPI aparece no fluxo ao vivo quando a API consegue classificar essa origem.
  • Identidades PN/LID podem ser acrescentadas quando resolvidas. Em chamadas de grupo, também pode haver chatid/chatlid na raiz.

Como processar

Correlacione a chamada pelo ID dentro da instância, mas não deduplique apenas pelo ID: oferta e encerramento da mesma chamada são eventos diferentes. Não interprete CallLog como uma nova chamada recebida. Estes eventos não contêm o áudio da ligação.

Os exemplos abaixo incluem sinalização ao vivo e um registro concluído. Campos remotos opcionais variam entre clientes e situações.

Resultados em CallLog

O registro usa códigos numéricos: 0 conectado, 1 rejeitado, 2 cancelado, 3 aceito em outro dispositivo, 4 perdido, 5 inválido, 6 indisponível, 8 falha e 9 abandonado. Registros ainda em andamento ou futuros não são emitidos por esse fluxo de conclusão.

Quando disponível, callState informa offered, accepted, terminated ou rejected para o evento ao vivo.

Habilitar este evento

Adicione call à lista events do webhook da instância. Preserve os outros eventos de que sua integração precisa.

{
  "enabled": true,
  "url": "https://seu-sistema.example/hooks/whatsapp",
  "events": [
    "call"
  ]
}

Envie essa configuração para POST /webhook, usando o header token. O JSON acima configura a assinatura; os exemplos de entrega abaixo são o que seu servidor recebe.

Campos do payload

O envelope comum vem na raiz. Campos condicionais podem estar ausentes ou nulos conforme o evento; não use a tabela como obrigação de presença de todos os campos.

CampoTipoSignificado
EventTypestringObrigatório. Tipo de evento, por exemplo connection ou messages.
ownerstringObrigatório. Consulte o objeto ou exemplo correspondente.
tokenstringObrigatório. Token da instância; dado sensível.
BaseUrlstringObrigatório. Consulte o objeto ou exemplo correspondente.
instanceNamestringConsulte o objeto ou exemplo correspondente.
typestringCall para sinalização ao vivo; CallLog para registro de chamada de saída concluída.
fromMebooleanChamada originada pela conta conectada.
wasSentByAPIbooleanIndica início pela API quando informado no fluxo ao vivo.
isGroupbooleanPresente em CallLog; no fluxo ao vivo também consulte event.GroupJID.
chatidstringJID da conversa, quando resolvido.
chatlidstring / nullLID da conversa; pode ser ausente ou null.
sender_pnstring / nullJID por telefone, quando conhecido.
sender_lidstring / nullIdentificador LID, quando conhecido.
eventobjectDados da sinalização ou do registro. O formato depende de type.
event.CallIDstringIdentificador da chamada ao vivo. Use com o subtipo; uma chamada gera várias notificações.
event.FromstringJID de quem enviou a sinalização.
event.CallCreatorstringJID de quem criou a chamada.
event.CallCreatorAltstringIdentidade alternativa, quando disponível.
event.GroupJIDstringJID do grupo quando aplicável; pode estar vazio.
event.TimestampstringData/hora da sinalização ao vivo em formato textual.
event.RemotePlatformstringPlataforma remota, quando disponível.
event.RemoteVersionstringVersão do cliente remoto, quando disponível.
event.ReasonstringMotivo informado no encerramento, quando presente.
event.Dataobject / nullNó de sinalização; pode não estar presente em todas as variantes.
event.Data.TagstringSubtipo recebido, como offer, accept, terminate ou reject.
event.Data.AttrsvariávelAtributos do nó; formato variável.
event.Data.ContentvariávelConteúdo adicional do nó; formato variável.
event.callIDstringID no registro CallLog (grafia diferente de CallID).
event.callResultintegerResultado numérico do registro CallLog. Não confundir com um status HTTP.
event.MediastringÁudio ou vídeo em avisos de chamada, quando informado.
event.TypestringPode indicar group em avisos de chamada de grupo; é diferente do type da raiz.
event.isIncomingbooleanDireção no registro CallLog; o fluxo documentado emite registros de saída.
event.isVideobooleanIndica vídeo no registro CallLog, quando presente.
event.callCreatorJIDstringCriador no registro CallLog.
event.groupJIDstringGrupo no registro CallLog, quando aplicável.
callStatestringEstado da chamada em um evento ao vivo, quando disponível.

Exemplos de entrega

Exemplos ilustrativos com identificadores fictícios. O conteúdo específico e os campos opcionais variam.

Oferta de chamada recebida

{
  "EventType": "call",
  "owner": "5511999999999",
  "token": "INSTANCE_TOKEN",
  "BaseUrl": "https://seu-servidor.example",
  "instanceName": "Atendimento",
  "type": "Call",
  "fromMe": false,
  "wasSentByAPI": false,
  "sender_pn": "5511888888888@s.whatsapp.net",
  "event": {
    "From": "5511888888888@s.whatsapp.net",
    "Timestamp": "2026-09-08T12:00:00Z",
    "CallCreator": "5511888888888@s.whatsapp.net",
    "CallID": "CALL_EXEMPLO",
    "GroupJID": "",
    "RemotePlatform": "android",
    "RemoteVersion": "versão-do-cliente",
    "Data": {
      "Tag": "offer"
    }
  },
  "callState": "offered"
}

Encerramento da mesma chamada

{
  "EventType": "call",
  "owner": "5511999999999",
  "token": "INSTANCE_TOKEN",
  "BaseUrl": "https://seu-servidor.example",
  "instanceName": "Atendimento",
  "type": "Call",
  "fromMe": false,
  "wasSentByAPI": false,
  "event": {
    "From": "5511888888888@s.whatsapp.net",
    "Timestamp": "2026-09-08T12:01:00Z",
    "CallCreator": "5511888888888@s.whatsapp.net",
    "CallID": "CALL_EXEMPLO",
    "GroupJID": "",
    "Data": {
      "Tag": "terminate"
    }
  },
  "callState": "terminated"
}

Registro de chamada de saída concluída

{
  "EventType": "call",
  "owner": "5511999999999",
  "token": "INSTANCE_TOKEN",
  "BaseUrl": "https://seu-servidor.example",
  "instanceName": "Atendimento",
  "type": "CallLog",
  "fromMe": true,
  "isGroup": false,
  "event": {
    "callID": "CALL_EXEMPLO",
    "callResult": 0,
    "isIncoming": false
  }
}

Responder ao webhook

Seu receptor deve aceitar o POST JSON e devolver uma resposta 2xx rapidamente, após validar e registrar o recebimento. O corpo da resposta não é um comando para a API. Processe trabalho demorado separadamente.

O worker não repete automaticamente uma entrega HTTP malsucedida. Consulte diagnóstico de webhooks e implemente a reconciliação necessária. Eventos repetidos ou fora de ordem ainda precisam ser tolerados pelo receptor.

Referências