Exemplos
Abaixo estão exemplos práticos de como usar a API de WhatsApp Calling para iniciar, aceitar e encerrar chamadas. Cada cenário mostra a sequência de requisições e respostas, bem como os webhooks recebidos. Para detalhes sobre os endpoints e seus parâmetros, consulte a API de Calling. Para entender os eventos de webhook, veja Webhooks.Cenário A — Chamada iniciada pela empresa (outbound)
Neste cenário, sua empresa inicia uma chamada para um usuário do WhatsApp.Passo 1: Verificar permissão de chamada
Antes de iniciar uma chamada, verifique se sua empresa tem permissão para ligar para o usuário. A Meta impõe limitações de chamadas que podem variar conforme o histórico de comunicação. Requisição:O campo
calling.permission.status pode ser no_permission, temporary ou permanent. Consulte a tabela de actions para saber se você pode iniciar uma chamada e quais são os limites (máximo de chamadas por período).Passo 2: Iniciar a chamada
Se a permissão está confirmada e você tem chamadas disponíveis, inicie a chamada enviando a oferta SDP (Session Description Protocol). Requisição:Passo 3: Encerrar a chamada
Quando a chamada termina (usuário desligou, você quer encerrar, etc.), envie a requisição de encerramento com ocall_id que você obteve no webhook de início (connect) ou no corpo da resposta.
Requisição:
Passo 4: Receber o webhook de encerramento
Após a chamada ser encerrada, você recebe um webhook nocalls_webhook configurado do número com o evento terminate. O webhook entregue é o envelope bruto da Meta com a estrutura abaixo:
O objeto dentro de
calls[] contém informações sobre como a chamada terminou: direction indica quem iniciou o encerramento, duration é o tempo em segundos e status mostra se foi concluída com sucesso ou não.Cenário B — Chamada recebida de um usuário (inbound)
Neste cenário, um usuário do WhatsApp inicia uma chamada para sua empresa.Passo 1: Receber o webhook de início de chamada
Quando um usuário tenta ligar para o seu número, você recebe um webhook nocalls_webhook com o evento connect. Este webhook contém o call_id (no campo id) e a oferta SDP do usuário.
Use o campo
id (exemplo: wacid.HBgM...) como o call_id para as próximas ações (aceitar ou rejeitar). O connection.webrtc.sdp é a oferta SDP do usuário.Passo 2: Aceitar a chamada (ou rejeitar)
Você pode aceitar a chamada respondendo com sua própria SDP ou rejeitá-la. Para aceitar: Requisição:Passo 3: Encerrar a chamada
Quando a chamada ativa termina (um dos lados desliga), você encerra a chamada: Requisição:Passo 4: Receber o webhook de encerramento
Após o encerramento, você recebe um webhook com o eventoterminate:
O webhook de
terminate é igual para ambos os cenários (outbound e inbound). Use os campos direction, duration e status para registrar detalhes sobre como a chamada terminou.