{ event, sessionId, data, timestamp, traceId? }.
Eventos de chamada são despachados apenas para o webhook D-API e para o
RabbitMQ — eles não são enviados para integrações de CRM. O evento
call.offer é entregue mesmo com a rejeição automática ligada.Direção dos eventos
As chamadas de saída são iniciadas via
POST /calls/place (chamada padrão) e
POST /calls/stream (modo com gravação). Os eventos abaixo refletem o andamento
dessas chamadas.
Quem é a outra ponta: phone
Todos os eventos call.* trazem phone: o telefone da outra ponta da
chamada — quem ligou para a sessão ou quem a sessão chamou —, só dígitos,
sem @s.whatsapp.net. Nunca é o número da própria sessão, em nenhuma direção.
Use este campo para identificar o contato.
string | null
required
Telefone da outra ponta, só dígitos (ex.:
5511999999999). Vem null quando
o WhatsApp só informou um LID sem telefone conhecido; nesse caso o LID vem em
lid. Não aparece nos chunks ao vivo de call.audio.string
LID da outra ponta (
...@lid). Presente apenas quando phone é null.
Um LID não é um telefone: não use os dígitos dele como número.call.offer — chamada recebida
Disparado quando o número da sessão recebe uma chamada.
string
required
Identificador da chamada.
string
required
Quem iniciou a chamada, resolvido para telefone quando possível (ou
...@lid). Mantido por compatibilidade — prefira phone.string
Quem iniciou a chamada, como informado pelo WhatsApp. Pode vir como
@lid.
Mantido por compatibilidade — prefira phone.boolean
required
true quando a chamada é de grupo.string
JID do grupo. Presente apenas quando
isGroup é true.number
required
Momento da chamada em milissegundos (epoch).
Chamadas de saída — payload base
Os eventos de saída (call.ringing, call.connected, call.ended,
call.not_answered) compartilham o mesmo payload base (CallEvent):
string
Identificador da chamada.
string
Estado da chamada. Varia por evento (ver abaixo).
string
Motivo do encerramento. Presente apenas em
call.ended.string
JID do interlocutor em formato
@lid. Opcional.string
JID do interlocutor em formato de telefone. Opcional.
call.ringing
Estado "ringing" — a chamada está tocando. É o primeiro evento de uma
chamada de saída, emitido assim que a chamada é iniciada (discada) — antes de
call.connected.
call.connected
Estado "active" — a chamada foi atendida e está em andamento.
call.ended
Estado "idle" — a chamada foi encerrada. O campo reason é preenchido.
Uma chamada gera exatamente um
call.ended (eventos duplicados do bridge
são deduplicados por callId). Para chamadas de saída, o call.ended cobre
apenas as que foram atendidas — uma que tocou e não foi atendida gera
call.not_answered no lugar.call.not_answered
Estado "idle" — uma chamada de saída que tocou mas nunca foi atendida
(encerrou antes de conectar, incluindo o timeout de não-atendimento). Substitui o
call.ended nesse caso, para você distinguir “não atendida” de “atendida e
encerrada” sem inspecionar o reason. Vale apenas para chamadas de saída.
Chamadas não atendidas não geram gravação: não há upload de áudio nem
evento
call.audio. (A chamada ainda fica registrada na trilha de auditoria
interna, marcada como não atendida.)call.audio
O evento call.audio tem duas variantes, dependendo de como a chamada de
saída foi iniciada.
Variante A — chunks de áudio ao vivo
Áudio transmitido em pedaços de ~1s cada, ordenados porseq, com
final: true no último chunk.
string
Identificador da chamada.
number
Número de sequência do chunk. Use para ordenar os pedaços.
number
Taxa de amostragem (tipicamente
16000).number
Número de canais (tipicamente
1).string
Codificação do áudio (
pcm_s16le).string
Pedaço de áudio PCM em base64.
boolean
true no último chunk da chamada.Variante B — gravação pronta (modo stream)
Um único evento ao final da chamada, com as URLs da gravação. Ocorre no modo stream (POST /calls/stream) apenas para chamadas atendidas — chamadas que
não foram atendidas não geram gravação nem este evento.
string
Identificador da chamada.
object
Faixas de áudio mono 16kHz:
string
deprecated
Depreciado — alias de
files.full.number
Duração da gravação em milissegundos.
number | null
Tamanho do arquivo em bytes.
string
Tipo do arquivo (
audio/wav).string | null
Telefone da outra ponta, só dígitos.
call.accepted / call.rejected
call.accepted: chamada recebida atendida em outro dispositivo.
call.rejected: chamada recusada — uma recebida que a sessão recusou, ou uma
feita pela sessão que o contato recusou. Nos dois casos, phone é o contato.
O payload destes eventos é repassado tal como vem do bridge (relayed
as-is). Os campos garantidos são
callId e phone (o contato). O from é
quem iniciou a chamada — no exemplo acima, a própria sessão, que ligou e foi
recusada. Os demais campos espelham os dados de chamada do bridge e não são
documentados aqui para evitar suposições.