Chamadas de voz funcionam em dois tipos de provedor: números Meta Cloud API e números Pilot Status web (não oficiais, conectados por QR). Qualquer outro tipo de número retorna
400 FEATURE_NOT_SUPPORTED. Em um número Pilot Status web ainda não conectado, os endpoints de chamada retornam 409 WHATSAPP_INSTANCE_NOT_CONNECTED.Os dois provedores em resumo
| Meta Cloud API | Pilot Status web | |
|---|---|---|
SDP em POST /v1/calls e /accept | Obrigatório (sdp de oferta/resposta, WebRTC) | Nenhum — sdpOffer/sdpAnswer ficam null |
| Fluxo de mídia | Navegador↔WhatsApp (WebRTC) | No servidor |
Softphone no painel /chat | Sim (WebRTC) | Sim (áudio no servidor) |
| Permissão de chamada e configurações | Sim | Não se aplica |
| Controle de áudio | Seu cliente WebRTC | /play e /realtime-session |
| Cobrança Meta por minuto (BIC) | Sim, na sua WABA | Não há |
Endpoints comuns aos dois provedores
Estes endpoints funcionam tanto em Meta quanto em Pilot Status web:POST /v1/calls— fazer uma chamada iniciada pela empresa (BIC)GET /v1/calls— listar chamadasGET /v1/calls/{callId}— detalhes de uma chamadaPOST /v1/calls/{callId}/accept— atenderPOST /v1/calls/{callId}/reject— recusarPOST /v1/calls/{callId}/terminate— encerrar
Os dois tipos de chamada
| Tipo | Quem inicia | Cobrança |
|---|---|---|
| BIC — Chamada Iniciada pela Empresa | Você liga para o cliente | Meta: cobrada na sua WABA (por minuto, pulsos de 6s, só quando atendida). Pilot Status web: sem cobrança Meta |
| UIC — Chamada Iniciada pelo Usuário | O cliente liga para você | Gratuita |
Números Meta Cloud API
Caminho mais fácil: o softphone do painel
A página /chat do painel tem um softphone integrado que funciona nos dois tipos de número — atenda, faça, rejeite e encerre chamadas do WhatsApp sem escrever nenhum código. Em números Meta ele usa WebRTC no navegador; em números Pilot Status web o áudio é tratado no servidor. É a forma mais rápida de testar chamadas. Use a API abaixo quando quiser construir sua própria experiência de chamada.
Requisitos (Meta)
- Um número Meta Cloud API conectado.
- Chamadas habilitadas no número:
PUT /v1/calls/settingscom{ "status": "ENABLED" }. Números em um tier de mensagens abaixo de 2.000/dia não podem habilitar chamadas (erro Meta138015). - Para chamadas iniciadas pela empresa, uma permissão de chamada válida do usuário (veja abaixo).
Passo 1 — Obter permissão para ligar (só BIC)
Você só pode iniciar uma chamada iniciada pela empresa após o usuário conceder uma permissão de chamada. Solicite-a dentro da janela de atendimento de 24 horas:call.permission_updated. Consulte a permissão atual a qualquer momento:
no_permission, temporary ou permanent mais os limites por ação. Sem permissão, POST /v1/calls retorna META_CALL_PERMISSION_REQUIRED.
Passo 2 — Fazer uma chamada (BIC)
Seu cliente WebRTC produz uma oferta SDP; passe-a ao Pilot Status, que a retransmite ao WhatsApp. O áudio então flui navegador↔WhatsApp diretamente.Passo 3 — Receber uma chamada (UIC)
Quando um cliente liga para você, dispara um webhookcall.ringing. Atenda com sua resposta SDP:
POST /v1/calls/{callId}/pre-accept— resposta antecipada opcional que reduz o corte de áudio; a chamada ainda conecta apenas noaccept. Somente Meta.POST /v1/calls/{callId}/reject— recusar (sem corpo).POST /v1/calls/{callId}/terminate— encerrar uma chamada ativa (sem corpo).
Os endpoints exclusivos da Meta —
POST /v1/calls/{callId}/pre-accept, GET/PUT /v1/calls/settings, GET /v1/calls/permissions e POST /v1/calls/permissions/request — retornam 400 FEATURE_NOT_SUPPORTED em números Pilot Status web.Números Pilot Status web
Em números Pilot Status web (não oficiais, conectados por QR), as chamadas funcionam de forma diferente: não há SDP e não há WebRTC no navegador. O áudio flui no servidor, e não existe modelo de permissão nem tela de configurações de chamada.Fazer e atender (sem SDP)
EnviePOST /v1/calls sem sdp; para atender uma chamada recebida, chame /accept sem corpo. Os campos sdpOffer/sdpAnswer permanecem null.
POST /v1/calls/{callId}/reject e POST /v1/calls/{callId}/terminate.
Controlar o áudio da chamada
Como a mídia é tratada no servidor, você controla o áudio com dois endpoints exclusivos do Pilot Status web (retornam400 FEATURE_NOT_SUPPORTED em números Meta):
Requisitos (Pilot Status web)
- Um número Pilot Status web conectado. Se não estiver conectado, os endpoints de chamada retornam
409 WHATSAPP_INSTANCE_NOT_CONNECTED. - Não há permissão de chamada nem configurações a habilitar — basta fazer ou atender a chamada.
Acompanhe o progresso com webhooks
Assine estes eventos no seu webhook — eles disparam para ambos os provedores (Meta e Pilot Status web):call.ringing, call.connected, call.ended (inclui duration em segundos quando atendida), call.missed e call.permission_updated. Em números Meta, o envelope nativo calls da Meta também é entregue para sinalização WebRTC personalizada.
Próximos passos
Referência da API de Chamadas
Todos os endpoints /v1/calls, parâmetros e configurações.
Visão geral de Chamadas
Modelo de sinalização, detalhes de cobrança e limites por provedor.