Pular para o conteúdo principal
Controle chamadas do WhatsApp a partir do seu servidor com messaging.voip. Para falar e ouvir em uma chamada a partir do código do servidor, use CallsClient de @polymorfa/sdk/calls. Para chamadas no navegador, veja o guia de chamadas.

Faça uma chamada

session é o Número que faz a chamada. participant indica quem atua na chamada pelo seu servidor, como server:agent-7. O padrão é default. Defina video: true para uma chamada de vídeo. Passe uma chave de idempotência para que o SDK possa tentar novamente a solicitação sem fazer uma segunda chamada.

Verifique antes de ligar

check executa as mesmas verificações que place sem fazer a chamada. refusal é calls_disabled, call_recipient_opted_out, call_destination_blocked, call_permission_required ou call_limit_reached. place executa as verificações de novo, então uma chamada ainda pode falhar se algo mudou nesse intervalo.

Atenda, recuse e encerre chamadas

As chamadas recebidas chegam como webhooks call.received. Uma chamada toca até alguém atender ou recusar. Nada atende automaticamente.
  • accept atende uma chamada que está tocando. Aceites posteriores de outros participantes entram na chamada, a menos que o primeiro participante tenha definido exclusive: true. Nesse caso, eles falham com 409 call_claimed.
  • reject recusa uma chamada que está tocando. Caso contrário, falha com 409 call_not_ringing.
  • end encerra a chamada para todos. leave(callId, { connectionId }) fecha uma das suas conexões e mantém a chamada em andamento.
  • addParticipant(callId, { to }) convida outro usuário do WhatsApp.

Peça permissão para ligar

O WhatsApp exige a permissão de uma pessoa antes que um Número da API oficial ligue para ela. Leia o estado atual e depois peça a permissão com uma mensagem:
O WhatsApp permite um pedido por pessoa a cada 24 horas e dois a cada 7 dias. Um pedido acima do limite falha com call_permission_request_limited. As mudanças chegam como webhooks call.permission_changed. Números com dispositivos vinculados não usam permissão para ligar.

Altere as configurações de chamadas de um Número

Uma atualização altera apenas os campos que você envia.
  • callsEnabled: false desativa as chamadas do Número. Novas chamadas falham com calls_disabled e as chamadas recebidas são recusadas. As chamadas em andamento continuam.
  • conferenceMode (padrão true) permite que todos os participantes que você conectar ouçam uns aos outros. Com false, cada um ouve apenas quem ligou pelo WhatsApp.
  • inboundRoute: "sip_trunk" com sipTrunkId envia as chamadas recebidas para um tronco SIP. clients (o padrão) faz tocar seus apps e navegadores.
Um expectedRevision desatualizado falha com 409 state_conflict.

Fale em uma chamada a partir do código do servidor

CallsClient acompanha as chamadas de um Número e entrega o áudio de cada chamada, por exemplo para executar um agente de voz:
call.audio transporta PCM mono de 16 bits com sinal em call.audio.sampleRate. Escreva o seu próprio áudio com call.audio.write(). O cliente se reconecta depois de uma queda de conexão. Chame disconnect() para parar de acompanhar o Número.

Conecte um tronco SIP

Um tronco SIP conecta o seu PBX às chamadas de um projeto. Leia o endereço que você vai configurar no PBX:
Depois crie o tronco em um cliente de projeto:
Desative um tronco com update(trunkId, { enabled: false, expectedRevision }). rotateCredentials(trunkId) emite uma nova senha de entrada. Um cliente de equipe passa o ID do projeto como primeiro argumento de list e create. Veja Troncos SIP.

Bloqueie países e mantenha uma lista de não ligar

A política de chamadas da equipe bloqueia chamadas para códigos de discagem de países. Ela precisa de uma chave da equipe:
update substitui a lista inteira. Os códigos têm de 1 a 4 dígitos, sem +; 1876 bloqueia a Jamaica sem bloquear o restante de +1. Enquanto houver algum código bloqueado, chamadas para pessoas cujo número de telefone é desconhecido também são recusadas. A lista de não ligar bloqueia chamadas para pessoas específicas:
Uma chamada para uma pessoa da lista falha com call_recipient_opted_out. A correspondência usa o identificador que você armazenou: uma entrada com número de telefone não bloqueia uma chamada endereçada por ID de usuário. import({ entries }) adiciona até 5.000 entradas de uma vez. Para histórico e estatísticas de chamadas, veja Registros de chamadas.