{ 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.
call.offer — chamada recebida
Disparado quando o número da sessão recebe uma chamada.
Identificador da chamada.
JID de quem está ligando, resolvido quando possível para o número de
telefone. Quando não é possível resolver, vem como
...@lid. A ordem de
resolução é: from do bridge → contatos (@lid → telefone) → fallback @lid.JID original informado pelo bridge. Pode vir como
@lid.true quando a chamada é de grupo.JID do grupo. Presente apenas quando
isGroup é true.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):
Identificador da chamada.
Estado da chamada. Varia por evento (ver abaixo).
Motivo do encerramento. Presente apenas em
call.ended.JID do interlocutor em formato
@lid. Opcional.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.
Identificador da chamada.
Número de sequência do chunk. Use para ordenar os pedaços.
Taxa de amostragem (tipicamente
16000).Número de canais (tipicamente
1).Codificação do áudio (
pcm_s16le).Pedaço de áudio PCM em base64.
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.
Identificador da chamada.
Faixas de áudio mono 16kHz:
Depreciado — alias de
files.full.Duração da gravação em milissegundos.
Tamanho do arquivo em bytes.
Tipo do arquivo (
audio/wav).Telefone associado. Opcional.
call.accepted / call.rejected
Eventos de chamada de entrada atendida em outro dispositivo (call.accepted)
ou rejeitada (call.rejected).
O payload destes eventos é repassado tal como vem do bridge (relayed
as-is). Os campos garantidos são
from (JID formatado para telefone quando
possível) e um callId. Os demais campos espelham os dados de chamada de
entrada do bridge e não são documentados aqui para evitar suposições.