O que é
A WhatsApp Calling API da YCloud gerencia a sinalização de chamadas de voz entre um usuário do WhatsApp e um número de telefone comercial. Seu aplicativo troca SDP por meio da YCloud, enquanto sua implementação WebRTC lida com a conexão de áudio. As chamadas podem começar em qualquer direção:- Iniciadas pelo usuário: Um usuário do WhatsApp liga para a sua empresa. Seu aplicativo recebe uma oferta e aceita ou rejeita a chamada.
- Iniciadas pela empresa: Seu aplicativo cria uma oferta e solicita à YCloud que ligue para um usuário do WhatsApp.
A Calling API gerencia a sinalização da chamada, não a pilha de mídia WebRTC. Seu aplicativo é responsável pela configuração da peer connection, captura e reprodução de áudio, geração de SDP e limpeza de recursos do WebRTC.
Mapa da API
As APIs de Calling e os eventos de webhook seguem o mesmo ciclo de vida, mas não formam uma sequência única aplicável a todas as chamadas. Conclua a configuração compartilhada e, em seguida, siga o fluxo iniciado pelo usuário ou iniciado pela empresa. Use o ID da chamada,wacid, para correlacionar cada operação e evento.
Configuração compartilhada
Chamadas iniciadas pelo usuário
Chamadas iniciadas pela empresa
Conclusão compartilhada de chamadas
Processamento de mídia opcional
Essas tabelas descrevem o fluxo de trabalho do aplicativo. Elas não garantem que os webhooks serão entregues na mesma ordem das linhas. Correlacione eventos por
wacid e trate a reentrega de forma idempotente.
Antes de começar
Antes de fazer uma solicitação de Calling, prepare o seguinte:- Uma chave de API da conta YCloud. Envie-a no cabeçalho
X-API-Key. Consulte Autenticação. - Uma conta do WhatsApp Business e um número de telefone comercial registrado na YCloud.
- Calling habilitado para esse número de telefone.
- Uma implementação de áudio WebRTC capaz de criar e aplicar ofertas e respostas SDP.
- Um endpoint de webhook da YCloud inscrito nos eventos de Calling utilizados pela sua integração. Consulte Configurar webhooks.
- Permissão de chamada do usuário quando for exigida para uma chamada iniciada pela empresa.
Como funciona
Comece configurando o número de telefone comercial. Em seguida, troque o SDP de acordo com a direção da chamada. As respostas da API confirmam operações de sinalização individuais, enquanto os eventos de webhook relatam mudanças de estado e o resultado final. Se a captura estiver ativada, eventos separados indicam quando uma gravação ou transcrição está pronta para download.Requisição
Configurar o número de telefone comercial
As configurações de chamada e captura pertencem a um número de telefone comercial do WhatsApp específico. Configure-as antes de processar chamadas.Ler configurações de Calling
UseGET /whatsapp/phoneNumbers/{wabaId}/{phoneNumber}/settings para verificar se o Calling está ativado e se o ícone de Calling está visível:
type, a YCloud retornará a resposta com as configurações de Calling.
Ativar Calling
Salve as configurações de Calling comPOST /whatsapp/phoneNumbers/{wabaId}/{phoneNumber}/settings antes de começar a aceitar ou fazer chamadas:
calling salvo. Antes de processar chamadas ativas, conclua a configuração dos seus webhooks e sessões WebRTC.
Configurar gravação e transcrição
As configurações de captura se aplicam a novas chamadas originadas via API. Você pode ativar a gravação, a transcrição ou ambas.
Para ler as configurações de captura, use
type=capture:
calling e capture na mesma requisição POST. Após validar o acesso ao número de telefone, a YCloud tenta salvar cada seção de forma independente. Se uma das gravações falhar, a outra seção já pode ter sido salva. Leia ambas as configurações após um erro e tente novamente apenas para a seção que ainda precisa de atualização.
Processar uma chamada iniciada pelo usuário
Em uma chamada iniciada pelo usuário, o WhatsApp envia a oferta SDP. O seu aplicativo responde a essa oferta e depois aceita ou rejeita a chamada.
1. Receber o evento connect
Inscreva-se emwhatsapp.call.connect. Um evento iniciado pelo usuário tem direction definido como USER_INITIATED e inclui uma oferta SDP (offer).
callingConnect.wacid e callingConnect.phoneId juntos. Aplique a oferta SDP recebida à sua conexão peer WebRTC e crie uma resposta SDP.
2. Pré-aceitar a chamada
Chame pre-accept após criar uma resposta SDP, mas antes que o agente atenda a chamada. Isso prepara o caminho de mídia e pode reduzir o corte de áudio quando a chamada for atendida. Endpoint:POST /whatsapp/calls/preAccept
3. Aceitar a chamada
Quando o agente atender, envie o mesmophoneId, wacid, tipo de SDP e resposta SDP para o endpoint de aceite.
Endpoint: POST /whatsapp/calls/accept
whatsapp.call.terminate para o resultado final da chamada.
A janela de aceite de entrada documentada é de aproximadamente 30 a 60 segundos após o webhook de conexão. Aceite prontamente; uma chamada não atendida termina do lado do usuário com uma notificação Not Answered e um webhook de encerramento.
Mesmo que a conexão WebRTC já esteja estabelecida, inicie o áudio somente após a requisição de aceite retornar HTTP 200. Iniciar antes pode cortar as primeiras palavras; iniciar muito tarde causa silêncio.
Rejeitar em vez de aceitar
Se o agente não puder atender à chamada de entrada, rejeite-a em vez de criar uma sessão ativa. Endpoint:POST /whatsapp/calls/reject
wacid, caso chegue algum.
Iniciar uma chamada iniciada pela empresa
Em uma chamada iniciada pela empresa, seu aplicativo cria a oferta SDP e a envia para a YCloud.Obter permissão de chamada
Antes de iniciar uma chamada, obtenha a permissão de chamada do usuário. Uma solicitação de permissão interativa pode ser enviada dentro de uma janela de atendimento ao cliente qualificada:POST /v2/whatsapp/messages/sendDirectly ou enfileire-o com POST /v2/whatsapp/messages.
Você também pode criar um modelo de permissão de chamada. Por exemplo, envie este corpo para POST /v2/whatsapp/templates e aguarde a aprovação:
callback_permission_status estiver ativado nas configurações de chamada do número de telefone, uma chamada iniciada pelo usuário pode conceder permissão de retorno de chamada. Um usuário também pode conceder permissão de chamada permanente a partir do perfil comercial.
As respostas de permissão chegam como eventos whatsapp.inbound_message.received. Inspecione o objeto interactive.call_permission_reply, não apenas se a mensagem de solicitação de permissão foi entregue:
Não inicie a chamada após uma rejeição ou uma permissão expirada. O erro da Meta
138006 significa que o número comercial não possui a permissão de chamada necessária. Para obter detalhes sobre erros do provedor, consulte Erros de Calling da Meta.
1. Criar uma oferta SDP
Crie uma conexão peer WebRTC local e anexe a faixa de áudio. Gere a oferta SDP, defina-a como a descrição local e aguarde a conclusão dessa operação antes de enviar a oferta para a YCloud.2. Conectar a chamada
Endpoint:POST /whatsapp/calls/connect
Forneça pelo menos um de
to ou recipient. Se você enviar ambos, a YCloud usará to e ignorará recipient.
wacid retornado imediatamente. success: true significa que a operação de conexão foi aceita; não significa que o usuário atendeu.
3. Aplicar a resposta e rastrear a tentativa
A YCloud enviawhatsapp.call.connect para a chamada. Para uma chamada iniciada pela empresa, o evento tem direction: BUSINESS_INITIATED e contém o SDP remoto answer. Aplique essa resposta como a descrição remota para a mesma conexão peer.
Inscreva-se em whatsapp.call.status.updated para acompanhar a tentativa:
Torne o tratamento de eventos idempotente para que um reenvio não repita ações do agente, faturamento ou limpeza.
Encerrar uma chamada ativa
Chame terminate quando o seu aplicativo precisar encerrar uma chamada ativa recebida ou efetuada. Endpoint:POST /whatsapp/calls/terminate
Resposta
Todos os cinco endpoints de sinalização retornam o mesmo formato de resposta:wacid identifica a chamada associada à operação. success: true confirma que a operação de sinalização foi bem-sucedida; isso não confirma que o outro participante atendeu ou que a chamada foi concluída. Use o estado do WebRTC e os eventos de Webhook de chamadas para esses resultados.
Processar o evento final da chamada
whatsapp.call.terminate é o evento final do ciclo de vida de uma chamada.
Ao receber esse evento, finalize o registro da chamada e libere quaisquer recursos restantes do WebRTC. Uma resposta anterior da API não confirma que a chamada foi concluída.
Receber gravações e transcrições
Quando a captura está habilitada, o processamento de mídia continua após o ciclo de vida da chamada. A gravação e a transcrição possuem eventos terminais separados:
O exemplo a seguir mostra uma gravação disponível:
Baixar um ativo disponível
Chame o endpoint de mídia apenas depois que o evento correspondente reportarAVAILABLE.
Endpoint: GET /whatsapp/calls/media/{mediaAssetId}
.ogg; as transcrições usam .json.
Apenas o locatário proprietário da YCloud pode baixar um ativo. Um ativo permanece disponível por 30 dias a partir da data de criação. Ativos ausentes, indisponíveis, expirados ou que não pertençam ao locatário retornam HTTP 404.
Construir um receptor de Webhook confiável
Inscreva seu endpoint nos eventos de que sua integração precisa:- Preserve o corpo bruto da solicitação e verifique
YCloud-Signatureantes de confiar no evento. - Persista o evento ou enfileire o trabalho durável.
- Retorne uma resposta de sucesso
2xximediatamente. - Elimine a duplicação usando o evento de nível superior
id. - Correlacione os dados da chamada por
wacid; mantenhaphoneIdcom eles para operações posteriores. - Trate eventos relacionados que chegam próximos uns dos outros e tolere reenvios.
Tratar erros e recuperação
Os endpoints de Calling usam a resposta de erro padrão da API da YCloud. Consulte Tratar erros para obter a estrutura de resposta e orientações de repetição. Use estas verificações para falhas comuns de Calling:
Um tempo limite de requisição (timeout) não comprova que a ação de sinalização falhou. Antes de tentar novamente, reconcilie a requisição com os eventos de webhook e o estado local atual da chamada. A ação já pode ter chegado ao WhatsApp.
Lista de verificação de integração
- Ative Calling no número de telefone comercial correto.
- Configure e teste todas as assinaturas de webhook de Calling necessárias.
- Verifique assinaturas de webhook e elimine eventos duplicados.
- Armazene
wacid,phoneId, direção e o estado atual juntos. - Trate
successda API como aceitação da operação, não como o resultado final da chamada. - Use
preAcceptapenas como preparação; chameacceptpara atender. - Finalize chamadas a partir de
whatsapp.call.terminate. - Baixe a mídia capturada apenas após um evento
AVAILABLEe dentro de 30 dias. - Libere recursos WebRTC em caso de rejeição, encerramento, falha e tempo limite local.
- Evite registrar chaves de API, SDP completo ou identificadores de participantes nos logs gerais da aplicação.
Referência da API de Calling
Examine os esquemas exatos de requisição e resposta de cada endpoint de Calling.
Exemplos de payload de webhook
Inspecione os exemplos completos de eventos de Calling gerados a partir da especificação do webhook.

