Receba e faça chamadas de voz do WhatsApp pela API do Pilot Status — retransmissão de SDP apenas para sinalização, softphone no navegador e cobrança pelo lado da Meta.
O WhatsApp Business Calling permite fazer e receber chamadas de voz com seus clientes pelo WhatsApp, através da API /v1/calls*.
As chamadas funcionam em dois tipos de provedor — e se comportam de forma diferente em cada um:
Provedor
O que é
Modelo de mídia
META (Meta Cloud API)
Número oficial do WhatsApp Business
Apenas sinalização — o Pilot Status retransmite o SDP (RFC 8866); o áudio flui navegador ↔ WhatsApp diretamente via WebRTC
Pilot Status web (não oficial)
Número conectado via QR (não oficial)
Mídia no servidor — sem SDP; o áudio é processado no servidor. Você envia áudio ou abre um stream em tempo real por endpoints dedicados
Qualquer outro tipo de número retorna 400 FEATURE_NOT_SUPPORTED. Mensagem do erro: “Calling is only supported for Meta Cloud API and Pilot Status (web) numbers.” Um número web desconectado retorna 409 WHATSAPP_INSTANCE_NOT_CONNECTED.
Na META, cobrada pela Meta diretamente na sua WABA (por minuto, pulsos de 6 segundos, só quando atendida). Em números web não há cobrança por minuto da Meta.
O Pilot Status retransmite o SDP; o áudio flui navegador ↔ WhatsApp diretamente. Seu cliente WebRTC produz a oferta/resposta SDP. Não há nada no servidor para tocar áudio, então play e realtime-session não se aplicam. A página /chat do painel tem um softphone integrado (disponível nos dois tipos de número).
POST /v1/calls e /acceptnão recebem sdp — a chamada conecta e o áudio é processado no servidor. Você então controla o áudio com os dois endpoints exclusivos dos números web:
POST /v1/calls/{callId}/play — o backend baixa seu arquivo de áudio (com proteção contra SSRF) e o toca na chamada.
POST /v1/calls/{callId}/realtime-session — abre uma sessão WebSocket PCM16 full-duplex. A wsUrl retornada fica em um host público de mídia dedicado e seu token é de uso único com TTL curto (~2 min); conecte-se a ela diretamente (não passa pelo proxy da API).
Números web não precisam de concessão de permissão BIC e não têm superfície de configurações de chamada (esses são conceitos da Meta).
Se você já integra com o Evolution GO, a camada de compatibilidade faz proxy dos endpoints GO /call/* (start, answer, reject, hangup, list, get, media/play, media/realtime/session) — aponte sua base URL para /api/layer/evolution-go/ e seu código de chamadas GO existente continua funcionando. O WebSocket em tempo real (/call/media/realtime/ws/*) é acessado diretamente em um host público de mídia dedicado (a camada HTTP não faz upgrade de WebSocket); rotas de frontend/manager do GO não passam pelo proxy.
Assine call.ringing, call.connected, call.ended (inclui duration em segundos quando atendida), call.missed e call.permission_updated. Eventos call.* normalizados disparam tanto para números META quanto Pilot Status web.