Referência sobre Webhooks da Voice API

A Vonage utiliza webhooks em conjunto com sua Voice API para permitir que seu aplicativo interaja com a chamada. Existem dois endpoints de webhook obrigatórios e um opcional:

  • Webhook de resposta é enviada quando uma chamada é atendida. Isso se aplica tanto a chamadas recebidas quanto a chamadas feitas.
  • Webhook de evento é enviado para todos os eventos que ocorrem durante uma chamada. Seu aplicativo pode registrar, reagir ou ignorar cada tipo de evento.
  • URL alternativa é utilizado quando o webhook “Resposta” ou “Evento” falha ou retorna um código de erro HTTP.
  • Erros também são enviadas para o endpoint do webhook do evento, caso ocorram.

Para obter mais informações gerais, consulte nosso guia de webhooks.

Webhooks assinados

Os webhooks assinados são uma forma de verificar se a solicitação está vindo da Vonage e se sua carga útil não foi adulterada durante o trânsito. Voice API, assim como Mensagens e Despacho As APIs suportam callbacks assinados por padrão. Consulte Decodificação de webhooks assinados para aprender a decodificar uma assinatura JWT recebida.

Webhook de resposta

Quando uma chamada recebida é atendida, uma solicitação HTTP é enviada para o answer_url que você especificou ao configurar o aplicativo. Para chamadas de saída, especifique o answer_url quando você fizer a ligação.

Por padrão, o webhook de resposta será um GET solicitação, mas isso pode ser substituído por POST definindo o answer_method campo. Para chamadas recebidas, você configura esses valores ao criar o aplicativo. Para chamadas efetuadas, você especifica esses valores ao fazer uma chamada.

Campos de dados do webhook de resposta

Campo Exemplo Descrição
to 442079460000 O número que atendeu a chamada. (Este é o número virtual vinculado ao seu aplicativo.)
from 447700900000 O número de quem ligou to. Pode ser um número de telefone fixo ou celular, ou outro número virtual, caso a chamada tenha sido feita por meio de um programa.
from_user JaneDoe O nome de usuário que fez a chamada to somente se a chamada tiver sido feita usando o Client SDK. Nesse caso, from estará ausente (ou seja, from e from_user (nunca estarão presentes ao mesmo tempo).
endpoint_type phone O tipo de canal de voz que atendeu a chamada. Os valores possíveis são: phone, sip, websocket, app, vbc.
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab Um identificador único para esta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab Um identificador único para esta conversa
region_url https://api-ap-3.vonage.com Endpoint da API regional que deve ser usado para controlar a chamada com API REST; veja a lista completa de regiões aqui
custom_data { "key": "value" } Um objeto de dados personalizado, opcionalmente passado como parâmetro na serverCall método quando uma chamada é iniciada a partir de um aplicativo que utiliza o Client SDK

Transmissão de dados adicionais por meio de cabeçalhos SIP

Além dos campos acima, você pode especificar quaisquer cabeçalhos adicionais necessários ao usar o SIP Connect. Quaisquer cabeçalhos fornecidos devem começar com X- e será enviado para o seu answer_url com o prefixo SipHeader_. Por exemplo, se você adicionar um cabeçalho com o texto X-UserId com um valor de 1938ND9, a Vonage irá adicionar SipHeader_X-UserId=1938ND9 em resposta ao pedido feito ao seu answer_url.

Aviso: Cabeçalhos que começam com X-Nexmo não será enviado para o seu answer_url

A Vonage oferece suporte a ambos X- cabeçalhos e o De usuário para usuário cabeçalho. Esses mecanismos podem ser usados individualmente ou em conjunto na mesma chamada.

O cabeçalho User-to-User permite enviar dados contextuais durante uma chamada do seu equipamento SIP para o seu aplicativo de Voice API. Para usar esse cabeçalho, seu equipamento SIP deve enviar um cabeçalho User-to-User para o seu domínio SIP programável. Além disso, seu aplicativo de Voice API precisará receber o webhook de resposta que contém o conteúdo desse cabeçalho.

O Cabeçalho “Usuário para usuário” deve ser formatado da seguinte maneira: SipHeader_User-to-User=1234567890abcdef;encoding=hex

O cabeçalho “User-to-User” é validado apenas para garantir que contenha caracteres válidos e não exceda 256 caracteres. O conteúdo em si não é validado de nenhuma outra forma.

Exemplos de campos de dados do webhook de resposta

Para um GET Na solicitação, as variáveis estarão na URL, assim:

/answer.php?to=442079460000&from=447700900000&conversation_uuid=CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab&uuid=aaaaaaaa-bbbb-cccc-dddd-0123456789ab&SipHeader_X-UserId=1938ND9

Se você definir o answer_method para POST nesse caso, você receberá a solicitação com dados no formato JSON no corpo da mensagem:

{
  "from": "442079460000",
  "to": "447700900000",
  "uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
  "conversation_uuid": "CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
  "SipHeader_X-UserId": "1938ND9"
}

Respondendo ao webhook de resposta

A Vonage espera que você devolva um NCCO no formato JSON, contendo as ações a serem executadas.

Webhook de evento

As solicitações HTTP do webhook de eventos chegarão ao endpoint do webhook de eventos sempre que houver alguma alteração no status de uma chamada. A URL será a event_url que você especificou ao criar seu aplicativo, a menos que você o substitua definindo um event_url ao iniciar uma chamada.

Por padrão, as solicitações recebidas são POST solicitações com corpo em JSON. Você pode sobrescrever o método para GET configurando o event_method além do event_url. Espera-se que seu sistema responda à solicitação HTTP. Se o seu sistema não confirmar o evento ou, em vez disso, responder com um código 429, 502, 503 ou 504, será feita uma nova tentativa. Para eventos que exijam o retorno de um NCCO, a URL alternativa será então utilizada. Consulte o URL de reserva seção para mais detalhes.

O formato dos dados incluídos depende do evento que ocorreu:

Iniciado

Indica que a chamada foi criada.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status started Status da chamada
direction outbound Direção da chamada: pode ser inbound ou outbound
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

Zumbido

O telefone do destinatário da chamada está tocando.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status ringing Status da chamada
direction outbound Direção da chamada: pode ser inbound ou outbound
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

Respondido

A ligação foi atendida.

Campo Exemplo Descrição
start_time null Atualmente, esse campo não é compatível.
rate 0.12 Custo da ligação em euros
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status answered Status da chamada
direction inbound Direção da chamada: pode ser inbound ou outbound
network null Tipo de rede utilizada na chamada
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

Ocupado

O destinatário está na linha com outro interlocutor.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status busy Status da chamada
direction outbound Direção da chamada, será esta outbound nesse contexto
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
sip_code 404 O código de status SIP retornado (por exemplo, 404, 480, ou 487) por meio do endereço registrado event_url, fornecendo detalhes adicionais sobre o motivo da conclusão ou da falha da chamada. Consulte os códigos de status SIP descritos aqui.

Voltar à lista de webhooks de eventos

Cancelado

Uma chamada efetuada é cancelada pelo autor antes de ser atendida.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status cancelled Status da chamada
direction outbound Direção da chamada, será esta outbound nesse contexto
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

Sem resposta

Ou o destinatário está indisponível ou recusou a chamada.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status unanswered Status da chamada
detail unavailable Indica se o assinante está temporariamente indisponível (unavailable) ou a operadora não conseguiu dar uma resposta dentro de um prazo razoável (timeout)
direction outbound Direção da chamada, será esta outbound nesse contexto
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
sip_code 404 O código de status SIP retornado (por exemplo, 404, 480, ou 487) por meio do endereço registrado event_url, fornecendo detalhes adicionais sobre o motivo da conclusão ou da falha da chamada. Consulte os códigos de status SIP descritos aqui.

Voltar à lista de webhooks de eventos

Desconectado

Se a conexão WebSocket for encerrada pelo lado do aplicativo por qualquer motivo, a chamada de retorno do evento de desconexão será enviada; se a resposta contiver um NCCO, este será processado; caso não haja nenhum NCCO, a execução normal continuará.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status disconnected Status da chamada
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

Rejeitado

A chamada foi rejeitada pela Vonage antes de ser conectada.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status rejected Status da chamada
detail restricted Indica se to ou from os números são inválidos (invalid_number), a chamada rejeitada pela operadora (restricted) ou rejeitada pelo destinatário (declined)
direction outbound Direção da chamada, será esta outbound nesse contexto
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
sip_code 404 O código de status SIP retornado (por exemplo, 404, 480, ou 487) por meio do endereço registrado event_url, fornecendo detalhes adicionais sobre o motivo da conclusão ou da falha da chamada. Consulte os códigos de status SIP descritos aqui.

Voltar à lista de webhooks de eventos

Falha

Não foi possível estabelecer a ligação.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status failed Status da chamada
detail cannot_route Indica que o destino não é compatível ou está bloqueado para a Account (cannot_route), o número não está disponível (number_out_of_service) ou ocorreu um erro no servidor (internal_error)
direction outbound Direção da chamada, será esta outbound nesse contexto
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
sip_code 404 O código de status SIP retornado (por exemplo, 404, 480, ou 487) por meio do endereço registrado event_url, fornecendo detalhes adicionais sobre o motivo da conclusão ou da falha da chamada. Consulte os códigos de status SIP descritos aqui.

Voltar à lista de webhooks de eventos

Homem / Máquina

No caso de uma chamada de saída efetuada programaticamente, se o machine_detection Se a opção estiver definida, um evento com o status de human ou machine será enviada dependendo se a pessoa atendeu ou não a ligação.

Campo Exemplo Descrição
call_uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada (Nota call_uuid, não uuid (assim como em alguns outros pontos finais)
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
status human Status da chamada: pode ser human se uma pessoa respondeu ou machine se a chamada foi atendida pelo correio de voz ou por outro serviço automatizado
sub_state beep_start Status de detecção avançada de aparelho: quando a chamada é atendida pelo correio de voz ou por um aparelho de fax e o bipe é detectado. Os valores possíveis são beep_start para o correio de voz, fax para aparelho de fax e beep_timeout.
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

Tempo limite

Se a duração da fase de toque exceder o valor especificado ringing_timeout durante esse período, este evento será enviado.

Campo Exemplo Descrição
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status timeout Status da chamada
direction outbound Direção da chamada, será esta outbound nesse contexto
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

Concluído

A chamada terminou; este evento também inclui dados resumidos sobre a chamada.

Campo Exemplo Descrição
end_time 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
network GB-FIXED O tipo de rede utilizada na chamada
duration 2 Duração da chamada (em segundos)
start_time 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
rate 0.00450000 Custo por minuto da ligação (EUR)
price 0.00015000 Custo total da ligação (EUR)
from 442079460000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
status completed Status da chamada
direction de entrada Direção da chamada: pode ser inbound ou outbound
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
disconnected_by user Pode assumir um dos dois valores:
platform - A chamada foi encerrada pela plataforma da Voice API; por exemplo, o NCCO concluiu sua última ação e a chamada foi desconectada.
user - A chamada foi encerrada pelo usuário; por exemplo, o usuário desligou, rejeitou a chamada ou não atendeu.
sip_code 404 O código de status SIP retornado (por exemplo, 404, 480, ou 487) por meio do endereço registrado event_url, fornecendo detalhes adicionais sobre o motivo da conclusão ou da falha da chamada. Consulte os códigos de status SIP descritos aqui.

Voltar à lista de webhooks de eventos

Registro

Este webhook é acionado quando uma ação NCCO com a ação “registro” é concluída. Ao criar uma ação de registro, você pode definir um eventUrl para o qual esse evento deve ser enviado. Isso pode ser útil caso você queira usar um código separado para lidar com esse tipo de evento.

Campo Exemplo Descrição
start_time 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
recording_url https://api.nexmo.com/v1/files/bbbbbbbb-aaaa-cccc-dddd-0123456789ab Onde baixar a gravação
size 12222 O tamanho do arquivo de gravação (em bytes)
recording_uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab Um identificador único para esta gravação
end_time 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Transcrição

Campo Exemplo Descrição
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
type record A ação NCCO do registro de tipo
recording_uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab Um identificador único para esta gravação
status transcribed Status da transcrição
transcription_url https://api.nexmo.com/v1/files/bbbbbbbb-aaaa-cccc-dddd-0123456789ab A URL do arquivo que contém a transcrição da gravação

Voltar à lista de webhooks de eventos

Entrada

Este webhook é enviado pela Vonage quando um NCCO com a ação “input” é concluído.

Campo Exemplo Descrição
from 447700900000 O número de onde a ligação foi feita
to 447700900000 O número para o qual a ligação foi feita
dtmf veja abaixo Resultados da captura de DTMF
speech veja abaixo Resultados do reconhecimento de fala
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada. Essa propriedade pode não aparecer quando uma entrada atingir o tempo limite de DTMF.
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Resultados da captura de DTMF

Campo Exemplo Descrição
digits 42 Os botões pressionados pelo usuário
timed_out true Se a entrada de DTMF atingiu o tempo limite: true se fosse o caso, false se não

Resultados do reconhecimento de fala

Campo Exemplo Descrição
timeout_reason end_on_silence_timeout Indica se a entrada foi encerrada quando o usuário parou de falar (end_on_silence_timeout), por tempo limite máximo (max_duration) ou se o usuário não tiver dito nada (start_timeout)
results veja abaixo Matriz de objetos de texto reconhecidos
error ERR1: Failed to analyze audio Mensagem de erro.
recording_url https://api-us.nexmo.com/v1/files/eeeeeee-ffff-0123-4567-0123456789ab Gravação de voz. Incluída se saveAudio o sinalizador está definido como true no input ação. Requer autorização JWT para o download; consulte Baixar uma gravação.
Texto da transcrição
Campo Exemplo Descrição
text sales Texto da transcrição que representa as palavras que o usuário disse.
confidence 0.9405097 A estimativa de confiança varia entre 0,0 e 1,0. Um valor mais alto indica uma maior probabilidade estimada de que as palavras reconhecidas estejam corretas.

Veja também o exemplo completo de payload apresentado em Referência NCCO

Voltar à lista de webhooks de eventos

Transferência

Este webhook é enviado pela Vonage quando uma etapa é transferida de uma conversa para outra. Isso pode ser feito por meio de um NCCO ou do transfer ação

Campo Exemplo Descrição
conversation_uuid_from CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O ID da conversa em que a etapa estava originalmente
conversation_uuid_to CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O ID da conversa para a qual a etapa foi transferida
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta chamada
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)

Voltar à lista de webhooks de eventos

URL alternativa

O webhook de fallback é acionado quando o webhook de resposta ou o webhook de evento — caso se espere que o evento responda com um NCCO — retorna um código de erro HTTP ou fica inacessível. Os dados retornados pela URL de fallback são os mesmos que seriam recebidos na URL de resposta original ou na URL de evento, com a adição de dois novos parâmetros, reason e original_request:

{
  "reason": "Connection closed.",
  "original_request": {
    "url": "https://api.example.com/webhooks/event",
    "type": "event"
  }
}

Se houve o fechamento ou a reinicialização de uma conexão, um tempo limite ou um código de status HTTP de 429, 503 ou 504 durante a NCCO inicial, a answer_url se for tentado duas vezes, então:

  1. Tentar entrar em contato com o fallback_answer_url duas vezes
  2. Se não for bem-sucedida, a chamada é encerrada

Se houve o fechamento ou a reinicialização de uma conexão, um tempo limite ou um código de status HTTP de 429, 503 ou 504 durante uma chamada em andamento, o event_url para eventos que devem retornar um NCCO (por exemplo, retorno para um input ou notify ação) for tentada duas vezes, então:

  1. Tentar entrar em contato com o fallback_answer_url duas vezes
  2. Se não for bem-sucedido, continue o fluxo da chamada

Erros

O endpoint de eventos também receberá webhooks em caso de erro. Isso pode ser útil na depuração do seu aplicativo.

Campo Exemplo Descrição
reason Syntax error in NCCO. Invalid value type or action. Informações sobre a natureza do erro
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab O identificador exclusivo desta conversa
timestamp 2020-01-01T12:00:00.000Z Carimbo de data e hora (formato ISO 8601)