Referência NCCO
Um Objeto de Controle de Chamada (NCCO) é representado por um array JSON. Você pode usá-lo para controlar o fluxo de uma chamada da Voice API. Para que seu NCCO seja executado corretamente, os objetos JSON devem ser válidos.
Durante o desenvolvimento e o teste dos NCCOs, você pode usar o Voice Playground para experimentá-los de forma interativa. Você pode Leia mais sobre isso na Visão geral da Voice API ou vá diretamente para o Voice Playground no Painel de Controle.
Ações da NCCO
A ordem das ações no NCCO controla o fluxo da chamada. As ações que precisam ser concluídas antes que a próxima ação possa ser executada são síncrono. Outras ações são assíncrono. Ou seja, elas devem continuar passando pelas ações seguintes até que uma condição seja satisfeita. Por exemplo, um record a ação é encerrada quando o endOnSilence essa opção for atendida. Quando todas as ações no NCCO estiverem concluídas, a Chamada será encerrada.
As ações do NCCO e as opções e tipos para cada ação são:
| Ação | Descrição | Síncrono |
|---|---|---|
| registro | A totalidade ou parte de uma chamada | Não |
| conversa | Crie ou participe de um já existente Conversa | Sim |
| conectar | Para um ponto de conexão, como um número de telefone ou uma extensão VBC. | Sim |
| conversa | Enviar voz sintetizada para uma conversa. | Sim, a menos que bargeIn=true |
| fluxo | Envie arquivos de áudio para uma conversa. | Sim, a menos que bargeIn=true |
| entrada | Colete os dígitos ou capture a entrada de voz da pessoa para quem você está ligando. | Sim |
| notificar | Envie uma solicitação à sua aplicação para acompanhar o andamento por meio de um NCCO | Sim |
| esperar | Pausar a execução por um número específico de segundos | Sim |
| transferência | Transferir as partes da chamada de uma conversa atual para outra conversa existente | Sim |
Nota: Atender uma chamada recebida apresenta um exemplo de como enviar seus NCCOs à Vonage após o início de uma chamada ou conferência.
Observe que, em todas as ações, o eventUrl O parâmetro DEVE ser um array, mesmo que contenha apenas um único valor.
Registro
Use o record procedimento para gravar uma chamada ou parte de uma chamada:
[
{
"action": "record",
"eventUrl": ["https://example.com/recordings"]
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"from":"447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]
A ação de registro é assíncrona.
É possível definir uma condição síncrona — endOnSilence, timeOut ou endOnKey - para encerrar a gravação quando essa condição for atendida.
Se nenhuma condição for definida, a gravação funcionará de maneira assíncrona e passará imediatamente para a próxima ação, sem interromper a gravação da chamada. A gravação só será encerrada e o evento relevante será enviado quando a chamada for encerrada.
Isso é utilizado em cenários semelhantes ao monitoramento de chamadas.
Você pode transcrever uma gravação usando o transcription opção. Assim que a transcrição da gravação estiver concluída, será enviada uma notificação para um eventUrl. Usando as configurações de transcrição, você pode definir uma eventUrl e language para suas transcrições. Observe que esse é um recurso pago; as tarifas exatas podem ser consultadas no Preços da Voice API página na seção “Recursos programáveis”.
Para obter informações sobre o fluxo de trabalho a ser seguido, consulte Gravação.
Você pode usar as seguintes opções para controlar um record ação:
| Opção | Descrição | Obrigatório |
|---|---|---|
format |
Grave a ligação em um formato específico. As opções são:
mp3, ou wav ao gravar mais de 2 canais. |
Não |
split |
Grave o áudio enviado e recebido em canais separados de uma gravação estéreo — configurada para conversation para ativar isso. |
Não |
channels |
O número de canais a serem gravados (máximo 32). Se o número de participantes ultrapassar channels quaisquer participantes adicionais serão adicionados ao último canal do arquivo. split conversation também deve estar ativado. |
Não |
endOnSilence |
Interromper a gravação após n segundos de silêncio. Assim que a gravação for interrompida, os dados gravados são enviados para event_url. O intervalo de valores possíveis é 3<=endOnSilence<=10. |
Não |
endOnKey |
Interromper a gravação quando um dígito for digitado no aparelho. Os valores possíveis são: *, # ou qualquer dígito, por exemplo: 9. |
Não |
timeOut |
A duração máxima de uma gravação, em segundos. Assim que a gravação for interrompida, os dados da gravação são enviados para event_url. O intervalo de valores possíveis está entre 3 segundos e 7200 segundos (2 horas). |
Não |
beepStart |
Definir como true para emitir um bipe quando a gravação começar. |
Não |
eventUrl |
A URL do endpoint do webhook que é chamado de forma assíncrona quando uma gravação é concluída. Se a gravação da mensagem for hospedada pela Vonage, esse webhook contém o URL necessária para baixar a gravação e outros metadados. | Não |
eventMethod |
O método HTTP utilizado para enviar a solicitação para eventUrl. O valor padrão é POST. |
Não |
transcription |
Definido como um objeto vazio, {}, para usar os valores padrão ou personalizar com Configurações de transcrição |
Não |
Configurações de transcrição
| Opção | Descrição | Obrigatório |
|---|---|---|
language |
A língua (BCP-47 formato) para a gravação que você está transcrevendo. Atualmente, esse recurso é compatível com os mesmos idiomas da Gravação Automática de Fala, e uma lista está disponível aqui. | Não |
eventUrl |
A URL do endpoint do webhook que é chamado de forma assíncrona quando uma transcrição é concluída. | Não |
eventMethod |
O método HTTP que a Vonage utiliza para enviar a solicitação para eventUrl. O valor padrão é POST. |
Não |
sentimentAnalysis [Prévia para desenvolvedores] |
Realizar análise de sentimento nos segmentos da transcrição da gravação da chamada. Retornará um valor entre -1 (sentimento negativo) e 1 (sentimento positivo) para cada segmento. O valor padrão é false. |
Não |
Observação: há um limite máximo de 2 horas para a transcrição de chamadas de voz.
Registrar parâmetros de retorno
Veja o Referência sobre Webhooks para parâmetros de gravação ou transcrição que são retornados ao eventUrl.
Conversa
Você pode usar o conversation ação para criar conferências padrão ou moderadas, preservando o contexto da comunicação. Usando conversation com o mesmo name reutiliza o mesmo dado armazenado Conversa. A primeira pessoa a ligar para o número virtual atribuído à conversa é quem a cria. Essa ação é síncrona.
Nota: você pode convidar até 200 pessoas para a sua Conversa.
Os exemplos a seguir do NCCO mostram como configurar diferentes tipos de conversação. Você pode usar o answer_url Parâmetros da solicitação GET do webhook para garantir que um NCCO seja enviado aos participantes e outro ao moderador.
[
{
"action": "conversation",
"name": "nexmo-conference-standard",
"record": true,
"transcription": {
"eventUrl": [ "https://example.com/transcription" ],
"eventMethod": "POST",
"language": "he-IL"
}
}
]
// As the customer is the first person to join, there is no canHear/canSpeak entry
// The customer's leg ID is 6a4d6af0-55a6-4667-be90-8614e4c8e83c
[
{
"action": "conversation",
"name": "selective-audio-demo",
"startOnEnter": false,
"musicOnHoldUrl": ["https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3"],
}
]
// The agent joins and can both hear, and speak to the customer
// The agent's leg ID is 533c0874-f43d-446c-a153-f35bf30783fa
[
{
"action": "conversation",
"name": "selective-audio-demo",
"startOnEnter": true,
"record": true,
"canHear": ["6a4d6af0-55a6-4667-be90-8614e4c8e83c"], // Customer leg ID
"canSpeak": ["6a4d6af0-55a6-4667-be90-8614e4c8e83c"] // Customer leg ID
}
]
// Finally, the supervisor joins the conversation. They can hear both the customer
// and the agent, but only speak to the agent
// The supervisor's leg ID is e2833e43-db39-4c1a-b689-d17ad2cf3529
[
{
"action": "conversation",
"name": "selective-audio-demo",
"startOnEnter": true,
"record": true,
"canHear": ["6a4d6af0-55a6-4667-be90-8614e4c8e83c", "533c0874-f43d-446c-a153-f35bf30783fa"] // Customer leg ID, Agent leg ID
"canSpeak": ["533c0874-f43d-446c-a153-f35bf30783fa"] // Agent leg ID
}
]
[
{
"action": "conversation",
"name": "nexmo-conference-moderated",
"record": true,
"startOnEnter": true
}
]
[
{
"action": "talk",
"text": "Welcome to a Vonage moderated conference. We will connect you when an agent is available"
},
{
"action": "conversation",
"name": "nexmo-conference-moderated",
"startOnEnter": false,
"musicOnHoldUrl": ["https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3"]
}
]
Você pode usar as seguintes opções para controlar um conversa ação:
| Opção | Descrição | Obrigatório |
|---|---|---|
name |
O nome da sala de conversação. Os nomes são atribuídos ao espaço de nomes no nível do aplicativo e região. | Sim |
musicOnHoldUrl |
Um URL para o mp3 arquivo para ser reproduzido para os participantes até o início da conversa. Por padrão, a conversa começa quando a primeira pessoa liga para o número virtual associado ao seu aplicativo Voice. Para reproduzir esse arquivo MP3 antes que o moderador entre na conversa, defina startOnEnter para false para todos os usuários, exceto o moderador. | Não |
startOnEnter |
O valor padrão de verdadeiro garante que a conversa comece assim que esse participante entrar na conversa name. Definir como false para os participantes de uma conversa moderada. |
Não |
endOnExit |
Especifica se uma conversa moderada é encerrada quando o moderador desliga. Essa opção está definida como false por padrão, o que significa que a conversa só termina quando o último participante restante desligar, independentemente de o moderador ainda estar na chamada. Definir endOnExit para verdadeiro para encerrar a conversa quando o moderador desligar. |
Não |
record |
Definir como verdadeiro para gravar essa conversa. Em conversas padrão, as gravações começam quando um ou mais participantes se conectam à conversa. Em conversas moderadas, as gravações começam quando o moderador entra na conversa. Ou seja, quando um NCCO é executado para a conversa em questão, na qual startOnEnter está definido como verdadeiro. Quando a gravação é encerrada, a URL de onde você baixa a gravação é enviada para a URL do evento. Você pode substituir a URL padrão do evento de gravação e o método HTTP padrão fornecendo valores personalizados eventUrl e eventMethod opções no conversation definição de ação. Por padrão, o áudio é gravado no formato MP3. Consulte o gravação Consulte o guia para obter mais detalhes. |
Não |
canSpeak |
Uma lista dos UUIDs de canal nos quais esse participante pode ser ouvido. Se não for fornecida, o participante poderá ser ouvido por todos. Se for fornecida uma lista vazia, o participante não será ouvido por ninguém | Não |
canHear |
Uma lista dos UUIDs das sessões que este participante pode ouvir. Se não for fornecida, o participante poderá ouvir todos. Se for fornecida uma lista vazia, o participante não ouvirá nenhum outro participante | Não |
mute |
Definir como verdadeiro para silenciar o participante. O áudio do participante não será transmitido para a conversa e não será gravado. Ao usar canSpeak, o mute O parâmetro não é compatível. |
Não |
transcription |
Configurações de transcrição. Se estiver presente (mesmo que seja um objeto vazio), a transcrição está ativada. O parâmetro de registro deve ser definido como verdadeiro. Veja Configurações de transcrição Veja acima para mais detalhes. | Não |
Conectar-se
Você pode usar o connect ação para conectar uma chamada a pontos de extremidade, como números de telefone ou uma extensão do VBC.
Essa ação é síncrona, após um conectar a próxima ação na pilha do NCCO é processada. Uma ação de conexão é encerrada quando o terminal que você está chamando está ocupado ou indisponível. Você liga para os terminais sequencialmente, aninhando ações de conexão.
Os exemplos a seguir do NCCO mostram como configurar diferentes tipos de conexões.
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"timeout": "45",
"from": "447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001",
"dtmfAnswer": "2p02p"
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventType": "synchronous",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "websocket",
"uri": "ws://example.com/socket",
"content-type": "audio/l16;rate=16000",
"headers": {
"name": "J Doe",
"age": 40,
"address": {
"line_1": "Apartment 14",
"line_2": "123 Example Street",
"city": "New York City"
},
"system_roles": [183493, 1038492, 22],
"enable_auditing": false
},
"authorization": {
"type": "custom",
"value": "Bearer eyJhbGciOi..."
}
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "app",
"user": "jamie"
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "sip",
"uri": "sip:rebekka@sip.mcrussell.com",
"headers": { "location": "New York City", "occupation": "developer" }
}
]
}
]
É possível definir uma alternativa para chamadas que não sejam conectadas. Para isso, defina o eventType para synchronous e retornar um NCCO a partir do eventUrl se a Chamada entrar em qualquer um dos seguintes estados:
timeout- o usuário não atendeu sua ligação comringing_timersegundosfailed- a ligação não foi concluídarejected- a chamada foi rejeitadaunanswered- a ligação não foi atendidabusy- a pessoa que estava sendo ligada estava em outra ligação
[
{
"action": "connect",
"from": "447700900000",
"timeout": 5,
"eventType": "synchronous",
"eventUrl": [
"https://example.com/event-fallback"
],
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]
[
{
"action": "record",
"eventUrl": ["https://example.com/recordings"]
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"from": "447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]
[
{
"action": "talk",
"voiceName": "Russell",
"text": "Thank you for calling. Connecting you to extension."
},
{
"action": "connect",
"endpoint": [
{
"type": "vbc",
"extension": "111"
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "sip",
"user": "john",
"domain": "vonage-developer",
"headers":
{
"location": "New York City",
"occupation": "developer"
}
}
]
}
]
Você pode usar as seguintes opções para controlar um connect ação:
| Opção | Descrição | Obrigatório |
|---|---|---|
endpoint |
Matriz de endpoint objetos aos quais se conectar. Atualmente, suporta um máximo de um endpoint objeto. Tipos de endpoint disponíveis. |
Sim |
from |
Um número em E.164 formato que identifica quem está ligando. Esse número deve ser um dos seus números virtuais da Vonage se você estiver ligando para um telefone físico; caso contrário, a ligação não será estabelecida. | Não |
randomFromNumber |
Definir como true para usar um número de telefone aleatório como from. O número será selecionado a partir da lista de números atribuídos ao aplicativo atual. O aplicativo tentará usar um ou mais números do mesmo país que o de destino (se houver). randomFromNumber: true não pode ser usado em conjunto com from. O valor padrão é false. |
Não |
eventType |
Definir como synchronous para:
|
Não |
timeout |
Se a chamada não for atendida, defina o tempo, em segundos, após o qual a Vonage interrompe o toque endpoint. Deve ser um número inteiro entre 1 e 120. O valor padrão é 60. |
Não |
limit |
Duração máxima da chamada em segundos. O valor padrão e máximo é 7200 segundos (2 horas). |
Não |
machineDetection |
Configure o comportamento quando a Vonage detectar que um destino é uma secretária eletrônica. Defina uma das seguintes opções:
|
Não |
advancedMachineDetection |
Configure o comportamento da detecção avançada de máquinas da Vonage. Substituições machineDetection se ambos estiverem definidos. Consulte o Referência da API para obter detalhes sobre os parâmetros. Esse recurso é cobrado; as tarifas exatas podem ser consultadas no Preços da Voice API página na seção “Recursos programáveis”. |
Não |
eventUrl |
Defina o endpoint do webhook que a Vonage chama de forma assíncrona em cada uma das possíveis Estados de origem das chamadas. Se eventType está definido como synchronous o eventUrl pode retornar um NCCO que substitua o NCCO atual quando ocorrer um tempo limite. |
Não |
eventMethod |
O método HTTP que a Vonage utiliza para enviar a solicitação para eventUrl. O valor padrão é POST. |
Não |
ringbackTone |
Um valor de URL que aponta para um ringbackTone para ser reproduzido em loop para o autor da chamada, para que não ouçam o silêncio. O ringbackTone a reprodução será interrompida automaticamente assim que a chamada estiver totalmente conectada. Não é recomendável usar esse parâmetro ao se conectar a um terminal telefônico, pois a operadora fornecerá seu próprio ringbackTone. Exemplo: "ringbackTone": "http://example.com/ringbackTone.wav". |
Não |
Tipos e valores de pontos finais
Telefone (PSTN) — números de telefone no formato E.164
| Valor | Descrição |
|---|---|
type |
O tipo de endpoint: phone para um terminal PSTN. |
number |
O número de telefone para o qual ligar em E.164 formato. |
dtmfAnswer |
Defina os dígitos que serão enviados ao usuário assim que a chamada for atendida. O * e # os dígitos são respeitados. Você cria pausas usando p. Cada pausa dura 500 ms. |
onAnswer |
Um objeto JSON contendo um campo obrigatório url chave. A URL fornece um NCCO a ser executado no número ao qual se está conectando, antes que essa chamada seja incorporada à sua conversa atual. Opcionalmente, o ringbackTone A chave pode ser especificada com um valor de URL que aponte para um ringbackTone para ser reproduzido em loop para o autor da chamada, para que não ouçam apenas o silêncio. O ringbackTone a reprodução será interrompida automaticamente assim que a chamada estiver totalmente conectada. Exemplo: {"url":"https://example.com/answer", "ringbackTone":"http://example.com/ringbackTone.wav" }. Observe que a chave ringback ainda é compatível. |
shaken |
Para os clientes da Vonage que são obrigados pela FCC a identificar suas próprias chamadas para os EUA, oferecemos a opção de realizar chamadas pela Voice API utilizando sua própria identificação. Esse recurso está disponível somente mediante solicitação. Chamadas com assinatura inválida serão rejeitadas. Entre em contato conosco para obter mais informações. Ao utilizar essa opção, é necessário inserir o conteúdo do cabeçalho de identidade STIR/SHAKEN que a Vonage deve utilizar para essa chamada. O formato esperado consiste em:
|
Exemplo do shaken opção:
eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jZXJ0LmV4YW1wbGUuY29tL3Bhc3Nwb3J0LnBlbSJ9.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxMjEyNTU1MTIxMiJdfSwiaWF0IjoxNjk0ODcwNDAwLCJvcmlnIjp7InRuIjoiMTQxNTU1NTEyMzQifSwib3JpZ2lkIjoiMTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDAwIn0.MEUCIQCrfKeMtvn9I6zXjE2VfGEcdjC2sm5M6cPqBvFyV9XkpQIgLxlvLNmC8DJEKexXZqTZ;info=<https://stir-provider.example.net/cert.cer>;alg=ES256;ppt="shaken"
Aplicativo - Conecte a chamada a um aplicativo compatível com RTC
| Valor | Descrição |
|---|---|
type |
O tipo de endpoint: app para um aplicativo. |
user |
O nome de usuário da pessoa à qual se conectará. Esse nome de usuário deve ter sido adicionado como usuário. |
WebSocket — o WebSocket ao qual se conectar
| Valor | Descrição |
|---|---|
type |
O tipo de endpoint: websocket para um WebSocket. |
uri |
O URI do WebSocket para o qual você está transmitindo. |
content-type |
O tipo de mídia da Internet para o áudio que você está transmitindo. Os valores possíveis são: audio/l16;rate=16000 ou audio/l16;rate=8000. |
headers |
Um objeto JSON contendo os metadados que você desejar. Consulte conectando-se a um WebSocket por exemplo, cabeçalhos. |
authorization |
Configuração opcional que define como o Authorization O cabeçalho HTTP é definido durante o handshake de abertura do WebSocket. Use type: "vonage" para que a Voice API inclua o mesmo JWT usado para webhooks assinados no Authorization cabeçalho (Bearer <JWT>). Use type: "custom" para enviar um arquivo fornecido pelo desenvolvedor Authorization valor do cabeçalho, tal como está. Ao usar type: "custom", você também deve fornecer value contendo o valor bruto do cabeçalho a ser incluído (por exemplo, Bearer eyJhbGciOi... ou ApiKey X9Z...). Ao usar type: "vonage", value é ignorado. Leia mais aqui. |
SIP — o terminal SIP ao qual se conectar
| Valor | Descrição |
|---|---|
type |
O tipo de endpoint: sip para o SIP. |
uri |
O URI SIP do ponto de extremidade ao qual você está se conectando, no formato sip:rebekka@sip.example.com. Para usar TLS e/ou SRTP, incluem, respectivamente, transport=tls ou media=srtp para a URL com o ponto-e-vírgula ; como delimitador, por exemplo: sip:rebekka@sip.example.com;transport=tls;media=srtp. Observe que essa propriedade é mutuamente exclusiva com user e domain. |
user |
O user componente do URI. Ele será utilizado junto com o domain propriedade para criar o URI SIP completo. Se você definir essa propriedade, também deverá definir domain e sair uri desativado. |
domain |
O identificador de um tronco criado por meio do painel de controle. Deve ser um domínio provisionado com sucesso usando o Painel de controle de SIP Trunking ou o API SIP programável. Os URIs provisionados no tronco serão utilizados ao longo do user propriedade para criar o URI SIP completo. Assim, por exemplo, se o URI no tronco for: sip.example.com e user é example_user, a Vonage encaminhará a chamada para example_user@sip.example.com. Se você definir essa propriedade, deverá deixar uri desativado. Observe que essa propriedade se refere ao nome de domínio, e não ao URI do domínio. |
headers |
key => value pares de strings contendo quaisquer metadados necessários, por exemplo: { "location": "New York City", "occupation": "developer" }. Os cabeçalhos são transmitidos como parte da mensagem SIP INVITE da seguinte forma: X-key: value cabeçalhos. Portanto, no exemplo, esses cabeçalhos são enviados: X-location: New York City e X-occupation: developer. |
standardHeaders |
Um objeto JSON contendo uma única chave User-to-User. Isso é usado para transmitir informações entre usuários, caso seja compatível com o fornecedor, conforme RFC 7433. Ao contrário de headers, a chave não terá prefixado X-, já que é padronizado. Por exemplo: { "User-to-User": "342342ef34;encoding=hex" }. A Vonage não validará o conteúdo do cabeçalho “User-to-User”, limitando-se a verificar se ele contém caracteres válidos e se o conteúdo está dentro do número máximo de caracteres permitido (256). |
Para entender como seu aplicativo pode receber e processar cabeçalhos personalizados do SIP, consulte a seguinte página em SIP programável. Se você quiser saber como seu aplicativo pode enviar cabeçalhos SIP, acesse a página Guia de Referência dos Webhooks da Voice API.
VBC — a extensão Vonage Business Cloud (VBC) para se conectar a
| Valor | Descrição |
|---|---|
type |
O tipo de endpoint: vbc para uma extensão VBC. |
extension |
a extensão VBC à qual a chamada deve ser conectada. |
Conversa
O talk Essa ação envia uma mensagem de voz sintetizada para uma conversa.
O texto fornecido na ação de fala pode ser simples ou formatado usando SSML. As tags SSML fornecem instruções adicionais ao sintetizador de texto para fala, permitindo definir o tom, a pronúncia e combinar textos em vários idiomas. As tags SSML são baseadas em XML e enviadas diretamente na string JSON.
Por padrão, a ação “talk” é síncrona. No entanto, se você definir bargeIn para verdadeiro você deve definir um entrada ação posterior na pilha do NCCO. Os exemplos a seguir do NCCO mostram como enviar uma mensagem de fala sintetizada para uma conversa ou chamada:
[
{
"action": "talk",
"text": "You are listening to a Call made with Voice API"
}
]
[
{
"action": "talk",
"text": "Welcome to a Voice API I V R. ",
"language": "en-GB",
"bargeIn": false
},
{
"action": "talk",
"text": "Press 1 for maybe and 2 for not sure followed by the hash key",
"language": "en-GB",
"bargeIn": true
},
{
"action": "input",
"submitOnHash": true,
"eventUrl": ["https://example.com/ivr"]
}
]
[
{
"action": "talk",
"text": "<speak><prosody rate='fast'>I can speak fast.</prosody></speak>"
}
]
Você pode usar as seguintes opções para controlar um conversa ação:
| Opção | Descrição | Obrigatório |
|---|---|---|
text |
Uma sequência de até 1.500 caracteres (excluindo as tags SSML) contendo a mensagem a ser sintetizada na Chamada ou na Conversação. Uma única vírgula em text insere uma breve pausa na fala sintetizada. Para inserir uma pausa mais longa, um break A tag precisa ser usada no SSML. Para usar SSML tags, você deve colocar o texto entre uma speak elemento. |
Sim |
bargeIn |
Definir como true portanto, essa ação é encerrada quando o usuário interage com o aplicativo, seja por meio de DTMF ou de entrada de voz ASR. Use esse recurso para permitir que os usuários escolham uma opção sem precisar ouvir a mensagem inteira no seu Resposta Interativa de Voz (IVR). Se você definir bargeIn para true a próxima ação que não envolva fala na pilha do NCCO deve ser um input ação. O valor padrão é false. Certa vez bargeIn está definido como true vai ficar true (mesmo que bargeIn: false se passa em uma ação subsequente) até que um input ocorre uma ação |
Não |
loop |
O número de vezes text é repetido antes do encerramento da chamada. O valor padrão é 1. Defina como 0 para que o ciclo seja infinito. |
Não |
level |
O nível de volume em que a fala é reproduzida. Esse valor pode ser qualquer número entre -1 para 1 com 0 sendo essa a configuração padrão. |
Não |
language |
A língua (BCP-47 formato) para a mensagem que você está enviando. Padrão: en-US. Os valores possíveis estão listados no Guia de conversão de texto em fala. |
Não |
style |
O estilo vocal (extensão vocal, tessitura e timbre). Padrão: 0. Os valores possíveis estão listados no Guia de conversão de texto em fala. |
Não |
premium |
Definir como true para usar a versão premium do estilo especificado, se disponível; caso contrário, será usada a versão padrão. O valor padrão é false. Você pode encontrar mais informações sobre o Premium Voices no Guia de conversão de texto em fala. |
Não |
Parâmetros de retorno da função Talk
Veja Referência sobre Webhooks para os parâmetros que são retornados à eventUrl.
Transmissão
O stream Essa ação permite enviar um fluxo de áudio para uma conversa
Por padrão, a ação do fluxo é síncrona. No entanto, se você definir bargeIn para verdadeiro você deve definir um entrada ação posterior na pilha do NCCO.
O exemplo a seguir do NCCO mostra como enviar um fluxo de áudio para uma conversa ou chamada:
[
{
"action": "stream",
"streamUrl": ["https://acme.com/streams/music.mp3"]
}
]
[
{
"action": "stream",
"streamUrl": ["https://acme.com/streams/announcement.mp3"],
"bargeIn": "true"
},
{
"action": "input",
"submitOnHash": "true",
"eventUrl": ["https://example.com/ivr"]
}
]
Você pode usar as seguintes opções para controlar um fluxo ação:
| Opção | Descrição | Obrigatório |
|---|---|---|
streamUrl |
Uma matriz contendo um único URL para um arquivo de áudio em formato mp3 ou wav (16 bits) a ser transmitido para a Chamada ou Conversação. | Sim |
level |
Defina o nível de áudio da transmissão no intervalo -1 >=nível<=1, com precisão de 0,1. O valor padrão é 0. | Não |
bargeIn |
Definir como true portanto, essa ação é encerrada quando o usuário interage com o aplicativo, seja por meio de DTMF ou de entrada de voz ASR. Use esse recurso para permitir que os usuários escolham uma opção sem precisar ouvir a mensagem inteira no seu Resposta Interativa de Voz (IVR) ). Se você definir bargeIn para true em mais uma ação de fluxo e, em seguida, na próxima ação que não seja de fluxo na pilha do NCCO deve ser um input ação. O valor padrão é false.Certa vez bargeIn está definido como true vai ficar true (mesmo que bargeIn: false se passa em uma ação subsequente) até que um input ocorre uma ação. |
Não |
loop |
O número de vezes audio é repetido antes do encerramento da chamada. O valor padrão é 1. Definir como 0 para repetir infinitamente. |
Não |
O fluxo de áudio mencionado deve ser um arquivo no formato MP3 ou WAV. Caso haja problemas com a reprodução do arquivo, codifique-o de acordo com as seguintes especificações técnicas: Que tipo de arquivos de áudio pré-gravados posso usar?
Se você reproduzir o mesmo arquivo de áudio várias vezes, por exemplo, usando a mesma gravação em várias chamadas, considere adicionar um Cache-Control cabeçalho na resposta da URL com os valores corretos.
Cache-Control: public, max-age=360000
Isso permite que a Vonage armazene seu arquivo de áudio em cache, em vez de baixá-lo todas as vezes, o que pode melhorar significativamente o desempenho e a experiência do usuário. O armazenamento em cache é compatível tanto com URLs HTTP quanto com HTTPS.
Parâmetros de retorno do fluxo
Veja Referência sobre Webhooks para os parâmetros que são retornados à eventUrl.
Entrada
Você pode usar o input ação para coletar os dígitos ou a entrada de voz da pessoa para quem você está ligando. Essa ação é síncrona: a Vonage processa a entrada e a encaminha no parâmetros enviado para o eventUrl ponto de extremidade do webhook que você configura em sua solicitação. Seu ponto de extremidade do webhook deve retornar outro NCCO que substitua o NCCO existente e controle a chamada com base na entrada do usuário. Você pode usar essa funcionalidade para criar uma Resposta Interativa de Voz (IVR). Por exemplo, se o usuário pressionar 4 ou diz “Vendas”, você retorna um conectar A NCCO que encaminha a ligação para o seu departamento de vendas.
O exemplo a seguir do NCCO mostra como configurar um terminal IVR:
[
{
"action": "talk",
"text": "Please enter a digit or say something"
},
{
"action": "input",
"eventUrl": [
"https://example.com/ivr"
],
"type": [ "dtmf", "speech" ],
"dtmf": {
"maxDigits": 1
},
"speech": {
"context": [ "sales", "support" ]
}
}
]
O exemplo a seguir do NCCO mostra como usar bargeIn para permitir que um usuário interrompa um talk ação. Observe que um input ação deve acompanhar qualquer ação que tenha um bargeIn propriedade (por exemplo, talk ou stream).
[
{
"action": "talk",
"text": "Please enter a digit or say something",
"bargeIn": true
},
{
"action": "input",
"eventUrl": [
"https://example.com/ivr"
],
"type": [ "dtmf", "speech" ],
"dtmf": {
"maxDigits": 1
},
"speech": {
"context": [ "sales", "support" ]
}
}
]
As seguintes opções podem ser usadas para controlar um input ação:
| Opção | Descrição | Obrigatório |
|---|---|---|
type |
Tipo de entrada aceitável, pode ser definido como [ "dtmf" ] apenas para entrada DTMF, [ "speech" ] apenas para ASR, ou [ "dtmf", "speech" ] para ambos. |
Sim |
dtmf |
Configurações de DTMF. | Não |
speech |
Configurações de reconhecimento de voz. | Não |
mode |
Modo de processamento de entrada, atualmente aplicável apenas ao DTMF. Os valores válidos são synchronous (o padrão) e asynchronous. Se estiver definido como asynchronous, todos Configurações de DTMF deve ser deixado em branco. No modo assíncrono, os dígitos são enviados um por um para o webhook de eventos em tempo real. No padrão synchronous Nesse modo, isso é controlado pelas configurações de DTMF, e as entradas são enviadas em lote. |
Não |
eventUrl |
A Vonage envia os dígitos digitados pelo destinatário da chamada para esta URL 1) após timeOut interrupção da atividade ou quando # se for pressionada a tecla DTMF ou 2) depois que o usuário parar de falar ou 30 segundos de fala para entrada de voz. |
Não |
eventMethod |
O método HTTP utilizado para enviar informações sobre eventos para event_url O valor padrão é POST. |
Não |
Configurações de entrada DTMF
Observação: Essas configurações não se aplicam se o mode está definido como asynchronous.
| Opção | Descrição | Obrigatório |
|---|---|---|
timeOut |
O resultado da atividade do chamado é enviado para o eventUrl ponto de extremidade do webhook timeOut segundos após a última ação. O valor padrão é 3. O Max tem 10 anos. |
Não |
maxDigits |
O número de dígitos que o usuário pode digitar. O valor máximo é 20, o padrão é 4 dígitos. |
Não |
submitOnHash |
Definir como true assim, a atividade do destinatário é enviada para o seu endpoint de webhook em eventUrl depois que apertarem #. Se # se não for pressionado, o resultado é enviado após timeOut segundos. O valor padrão é false. Ou seja, o resultado é enviado para o seu endpoint de webhook após timeOut segundos. |
Não |
Configurações de reconhecimento de voz
| Opção | Descrição | Obrigatório |
|---|---|---|
uuid |
O ID exclusivo do segmento da chamada cuja fala o usuário deve capturar, definido como uma matriz com um único elemento. Por padrão, trata-se do primeiro segmento da chamada em que o usuário participou. | Não |
endOnSilence |
Determina por quanto tempo o sistema aguardará após o usuário parar de falar para considerar que a entrada foi concluída. O valor padrão é 2.0 (segundos). O intervalo de valores possíveis está entre 0.4 segundos e 10.0 segundos. |
Não |
startTimeout |
Determina por quanto tempo o sistema aguardará até que o usuário comece a falar. O intervalo de valores possíveis está entre 1 segundo e 60 segundos. O valor padrão é 10. |
Não |
maxDuration |
Controla a duração máxima da fala (a partir do momento em que o usuário começa a falar). O valor padrão é 60 (segundos). O intervalo de valores possíveis está entre 1 e 60 segundos. | Não |
saveAudio |
Definir como true portanto, a gravação da entrada de voz (recording_url) é enviada para o seu endpoint de webhook em eventUrl. O valor padrão é false. |
Não |
sensitivity |
Sensibilidade de áudio usada para diferenciar ruído de fala. Um valor inteiro em que 10 representa baixa sensibilidade e 100, a sensibilidade máxima. O valor padrão é 90. | Não |
provider |
String composta pelo nome do provedor. Valor aceito: google. Se provider está definido, providerOptions deve estar presente (pode ser {} ou null). Se provider é omitido, providerOptions pode ser omitido. Leia mais aqui. |
Não |
providerOptions |
Objeto JSON com as opções personalizadas para o serviço de conversão de voz em texto. Se provider é omitido, providerOptions pode ser omitido. Se provider está definido, providerOptions deve estar presente e pode ser um objeto vazio {} ou null. Leia mais aqui. |
Não |
Alguns parâmetros legados (por exemplo, language e context) estão documentados no Guia conceitual sobre conversão de fala em texto.
O exemplo a seguir mostra os parâmetros enviados ao eventUrl webhook para entrada DTMF:
{
"speech": { "results": [ ] },
"dtmf": {
"digits": "1234",
"timed_out": true
},
"from": "15551234567",
"to": "15557654321",
"uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"conversation_uuid": "bbbbbbbb-cccc-dddd-eeee-0123456789ab",
"timestamp": "2020-01-01T14:00:00.000Z"
}
O exemplo a seguir mostra os parâmetros enviados de volta ao eventUrl webhook para entrada de voz:
{
"speech": {
"recording_url": "https://api-us.nexmo.com/v1/files/eeeeeee-ffff-0123-4567-0123456789ab",
"timeout_reason": "end_on_silence_timeout",
"results": [
{
"confidence": "0.9405097",
"text": "sales"
},
{
"confidence": "0.70543784",
"text": "sails"
},
{
"confidence": "0.5949854",
"text": "sale"
}
]
},
"dtmf": {
"digits": null,
"timed_out": false
},
"from": "15551234567",
"to": "15557654321",
"uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"conversation_uuid": "bbbbbbbb-cccc-dddd-eeee-0123456789ab",
"timestamp": "2020-01-01T14:00:00.000Z"
}
Parâmetros de entrada e retorno
Veja Referência sobre Webhooks para parâmetros de entrada que são retornados ao eventUrl.
Notificar
Use o notify ação para enviar uma carga personalizada para a URL do seu evento. Seu endpoint de webhook pode retornar outro NCCO que substitua o NCCO existente ou retornar uma carga vazia, o que significa que o NCCO existente continuará a ser executado.
[
{
"action": "notify",
"payload": {
"foo": "bar"
},
"eventUrl": [
"https://example.com/webhooks/event"
],
"eventMethod": "POST"
}
]
| Opção | Descrição | Obrigatório |
|---|---|---|
payload |
O corpo JSON a ser enviado para a URL do seu evento. | Sim |
eventUrl |
A URL para a qual os eventos devem ser enviados. Se você retornar um NCCO ao receber uma notificação, ele substituirá o NCCO atual. | Sim |
eventMethod |
O método HTTP a ser utilizado ao enviar payload para o seu eventUrl. |
Não |
Configurações de voz das instruções
| Opção | Descrição | Obrigatório |
|---|---|---|
language |
A língua (BCP-47 formato) para as instruções. Padrão: en-US. Os valores possíveis estão listados no Guia de conversão de texto em fala. |
Não |
style |
O estilo vocal (extensão vocal, tessitura e timbre). Padrão: 0. Os valores possíveis estão listados no Guia de conversão de texto em fala. |
Não |
Espere
Você pode usar o wait ação para adicionar um período de espera e pausar a execução do NCCO em andamento por um número especificado de segundos.
A ação é síncrona. O período de espera começa quando a ação de espera é executada no NCCO e termina após o valor de tempo limite especificado ou padrão. Nesse momento, o NCCO retoma a execução.
O timeout O parâmetro é do tipo float. Os valores válidos variam de 0,1 segundo a 7.200 segundos. Valores inferiores a 0,1 assumem o valor padrão de 0,1 segundo, e valores superiores a 7.200 assumem o valor padrão de 7.200 segundos. Se não for especificado, o valor padrão é 10 segundos.
Nota: se você precisar de uma chamada de retorno informando que a ação de espera foi concluída, adicione uma ação de notificação após a ação de espera.
O exemplo a seguir do NCCO mostra como executar a ação de espera:
[
{
"action": "talk",
"text": "Welcome to a Vonage moderated conference"
},
{
"action": "wait",
"timeout": 0.5
},
{
"action": "talk",
"text": "We will connect you when an agent is available"
}
]
Você pode usar as seguintes opções para controlar um wait ação:
| Opção | Descrição | Obrigatório |
|---|---|---|
timeout |
Controla a duração do período de espera antes da execução da próxima ação no NCCO. Este parâmetro é do tipo float. Os valores válidos variam de 0,1 segundos a 7.200 segundos. Valores inferiores a 0,1 assumem o valor padrão de 0,1 segundo, e valores superiores a 7.200 assumem o valor padrão de 7.200 segundos. O valor padrão é 10. |
Não |
Transferência
O transfer A ação é síncrona. Você pode usá-la para transferir as partes da chamada de uma conversa atual para outra conversa já existente. A transfer essa ação encerra a conversa atual, e o NCCO da conversa de destino continua a controlar o comportamento dessa conversa. Todas as ramificações da conversa atual são transferidas para a conversa de destino, respeitando as configurações de áudio (canHear, canSpeak, mute) caso sejam fornecidos.
O exemplo a seguir do NCCO mostra como executar a ação de transferência:
[
...
{
"action": "transfer",
"conversationId": "CON-f972836a-550f-45fa-956c-12a2ab5b7d22",
"canHear": [ "9c132730-8c22-4760-a4dc-40502f05b444" ]
}
...
]
Você pode usar as seguintes opções para controlar uma ação de transferência:
| Opção | Descrição | Obrigatório |
|---|---|---|
conversation_id |
ID da conversa de destino, definido como uma string. | Sim |
canHear |
Uma lista dos UUIDs das sessões que este participante pode ouvir, definida como uma matriz de strings. Se não for fornecida, o participante poderá ouvir todos. Se for fornecida uma lista vazia, o participante não ouvirá nenhum outro participante. | Não |
canSpeak |
Uma lista dos UUIDs de leg pelos quais esse participante pode ser ouvido, definida como uma matriz de strings. Se não for fornecida, o participante poderá ser ouvido por todos. Se for fornecida uma lista vazia, o participante não será ouvido por ninguém. | Não |
mute |
Defina como “true” para silenciar o participante. O áudio do participante não será reproduzido na conversa e não será gravado. Ao usar canSpeak, o mute O parâmetro não é compatível. |
Não |