Conversão de fala em texto
O Reconhecimento Automático de Fala (ASR) permite que os aplicativos ofereçam suporte à entrada de voz para casos de uso como IVR, identificação e diversos tipos de bots/assistentes de voz. Ao utilizar esse recurso, o aplicativo obtém a transcrição da fala do usuário (na forma de texto) quando espera que o usuário responda a alguma pergunta falando, em vez de digitar dígitos (DTMF); e, então, pode continuar o fluxo da chamada de acordo com sua lógica de negócios, com base no que o usuário disse.
Observação: este é um recurso pago. As tarifas exatas podem ser consultadas no Preços da Voice API página na seção “Recursos programáveis”.
Como funciona
Normalmente, o ASR é usado em conjunto com uma mensagem de áudio reproduzida para o usuário. A mensagem pode ser uma arquivo de áudio ou Conversão de texto em fala, ou uma combinação de ambos executados sequencialmente. Para ativar o ASR, o NCCO deve conter um input ação com parâmetros de fala especificados.
Exemplo de NCCO
[
{
"action": "talk",
"text": "Hello!"
},
{
"action": "talk",
"text": "Please tell us, how can we help you today?",
"bargeIn": true
},
{
"eventUrl": ["https://api.example.com/callbacks/events"],
"eventMethod": "POST",
"action": "input",
"type": ["speech"],
"speech": {
"provider": "google",
"providerOptions": {
"language_code": "en-US",
"speech_contexts": [
{
"phrases": ["hello", "world", "speech recognition"],
"boost": 10.0
}
]
}
}
}
]
O Guia de Referência da NCCO contém informações sobre todos os parâmetros possíveis que podem ser utilizados em conjunto com o ASR input Ação da NCCO.
Tipo de entrada
Conjunto type como speech apenas para entrada por voz, ou [ "dtmf", "speech" ] para aceitar tanto a fala quanto DTMF.
Provedor e opções de provedor
Ao usar a entrada por voz, você pode escolher explicitamente qual provedor de conversão de voz em texto a Vonage utilizará, configurando provider. Os valores permitidos são deepgram e google. Se você não definir provider, a Vonage utiliza o comportamento padrão.
Observação: O google O provedor é cobrado como ASR Padrão. O deepgram A tarifa cobrada pelo provedor é a Premier ASR, que é de US$ 0,024 por minuto. Consulte o Preços da Voice API página para consultar as tarifas exatas.
Exemplo speech objeto com providerOptions:
{
"speech": {
"provider": "google",
"providerOptions": {
"language_code": "en-US",
"speech_contexts": [
{
"phrases": ["hello", "world", "speech recognition"],
"boost": 10.0
}
]
}
}
}
Uso providerOptions para passar a configuração de conversão de fala em texto específica do provedor. Ao usar providerOptions, as chaves e os valores em providerOptions são determinados pelo provedor escolhido. Para mais detalhes, consulte a documentação sobre Deepgram ou Google sobre como especificá-los dentro de providerOptions.
Se você omitir provider, você pode omitir providerOptions também. Se você definir provider, incluem providerOptions (pode ser um objeto vazio) {} ou null).
Importante: A Vonage impõe algumas limitações a providerOptions. No momento, só é possível definir certos model valores em providerOptions, embora a Vonage utilize um modelo padrão quando você não especifica nenhum.
Suporte ao modelo
A Vonage oferece suporte aos seguintes recursos model valores em providerOptions, dependendo do provedor:
| Provedor | Compatível model valores |
Padrão model |
|---|---|---|
| Deepgram | nova-2, nova-3 |
nova-2 |
latest_long, latest_short, command_and_search, phone_call, default, medical_conversation, medical_dictation, telephony, telephony_short |
default |
Idioma (antigo)
O idioma esperado da fala do usuário deve ser especificado como o language parâmetro (en-US (por padrão).
Ao usar provider e providerOptions, os idiomas e formatos de idioma suportados são determinados pelo provedor escolhido. Para mais detalhes, consulte a documentação de Deepgram ou Google (language_code) sobre como especificá-los dentro de providerOptions.
Idiomas suportados
Ao usar provider e providerOptions, os idiomas e formatos de idioma suportados são determinados pelo provedor escolhido. Para mais detalhes, consulte a documentação de Deepgram ou Google (language_code) sobre como especificá-los dentro de providerOptions.
| Idioma {filter} | Código |
|---|---|
| Africâner (África do Sul) | af-ZA |
| Albanês (Albânia) | sq-AL |
| Amárico (Etiópia) | am-ET |
| Árabe (Argélia) | ar-DZ |
| Árabe (Bahrein) | ar-BH |
| Árabe (Egito) | ar-EG |
| Árabe (Iraque) | ar-IQ |
| Árabe (Israel) | ar-IL |
| Árabe (Jordânia) | ar-JO |
| Árabe (Kuwait) | ar-KW |
| Árabe (Líbano) | ar-LB |
| Árabe (Marrocos) | ar-MA |
| Árabe (Omã) | ar-OM |
| Árabe (Catar) | ar-QA |
| Árabe (Arábia Saudita) | ar-SA |
| Árabe (Estado da Palestina) | ar-PS |
| Árabe (Tunísia) | ar-TN |
| Árabe (Emirados Árabes Unidos) | ar-AE |
| Armênio (Armênia) | hy-AM |
| Azerbaijano (Azerbaijão) | az-AZ |
| Básquico (Espanha) | eu-ES |
| Bengali (Bangladesh) | bn-BD |
| Bengali (Índia) | bn-IN |
| Búlgaro (Bulgária) | bg-BG |
| Birmanês (Mianmar) | my-MM |
| Catalão (Espanha) | ca-ES |
| Chinês, cantonês (tradicional, Hong Kong) | yue-hant-HK |
| Chinês, mandarim (simplificado, China) | zh (cmn-hans-cn) |
| Chinês, mandarim (tradicional, Taiwan) | zh-TW (cmn-hant-TW) |
| Croata (Croácia) | hr-HR |
| Tcheco (República Tcheca) | cs-CZ |
| Dinamarquês (Dinamarca) | da-DK |
| Holandês (Bélgica) | nl-BE |
| Holandês (Países Baixos) | nl-NL |
| Inglês (Austrália) | en-AU |
| Inglês (Canadá) | en-CA |
| Inglês (Gana) | en-GH |
| Inglês (Índia) | en-IN |
| Inglês (Irlanda) | en-IE |
| Inglês (Quênia) | en-KE |
| Inglês (Nova Zelândia) | en-NZ |
| Inglês (Nigéria) | en-NG |
| Inglês (Filipinas) | en-PH |
| Inglês (Cingapura) | en-SG |
| Inglês (África do Sul) | en-ZA |
| Inglês (Tanzânia) | en-TZ |
| Inglês (Reino Unido) | en-GB |
| Inglês (Estados Unidos) | en-US |
| Estoniano (Estônia) | et-EE |
| Filipino | fil-PH |
| Finlandês (Finlândia) | fi-FI |
| Francês (Canadá) | fr-CA |
| Francês (França) | fr-FR |
| galego (Espanha) | gl-ES |
| Georgiano (Geórgia) | ka-GE |
| Alemão (Alemanha) | de-DE |
| Grego (Grécia) | el-GR |
| Gujarati (Índia) | gu-IN |
| Hebraico (Israel) | he-IL |
| Hindi (Índia) | hi-IN |
| Húngaro (Hungria) | hu-HU |
| Islandês (Islândia) | is-IS |
| Indonésio (Indonésia) | id-ID |
| Italiano (Itália) | it-IT |
| Japonês (Japão) | ja-JP |
| Javanês (Indonésia) | jv-ID |
| Kannada (Índia) | kn-IN |
| Khmer (Camboja) | km-KH |
| Coreano (Coreia do Sul) | ko-KR |
| Laos (Laos) | lo-LA |
| Letão (Letônia) | lv-LV |
| Lituano (Lituânia) | lt-LT |
| Macedônio (Macedônia do Norte) | mk-MK |
| Malaio (Malásia) | ms-MY |
| Malayalam (Índia) | ml-IN |
| Marata (Índia) | mr-IN |
| Mongol (Mongólia) | mn-MN |
| Nepalês (Nepal) | ne-NP |
| Norueguês Bokmål (Noruega) | nb-NO |
| Persa (Irã) | fa-IR |
| Polonês (Polônia) | pl-PL |
| Português (Brasil) | pt-BR |
| Português (Portugal) | pt-PT |
| Punjabi (Gurmukhi, Índia) | pa-guru-IN |
| Romeno (Romênia) | ro-RO |
| Russo (Rússia) | ru-RU |
| Sérvio (Sérvia) | sr-RS |
| Cingalês (Sri Lanka) | si-LK |
| Eslovaco (Eslováquia) | sk-SK |
| Esloveno (Eslovênia) | sl-SI |
| Espanhol (Argentina) | es-AR |
| Espanhol (Bolívia) | es-BO |
| Espanhol (Chile) | es-CL |
| Espanhol (Colômbia) | es-CO |
| Espanhol (Costa Rica) | es-CR |
| Espanhol (República Dominicana) | es-DO |
| Espanhol (Equador) | es-EC |
| Espanhol (El Salvador) | es-SV |
| Espanhol (Guatemala) | es-GT |
| Espanhol (Honduras) | es-HN |
| Espanhol (México) | es-MX |
| Espanhol (Nicarágua) | es-NI |
| Espanhol (Panamá) | es-PA |
| Espanhol (Paraguai) | es-PY |
| Espanhol (Peru) | es-PE |
| Espanhol (Porto Rico) | es-PR |
| Espanhol (Espanha) | es-ES |
| Espanhol (Estados Unidos) | es-US |
| Espanhol (Uruguai) | es-UY |
| Espanhol (Venezuela) | es-VE |
| Sundanês (Indonésia) | su-ID |
| Suaili (Quênia) | sw-KE |
| Suaili (Tanzânia) | sw-TZ |
| Sueco (Suécia) | sv-SE |
| Tâmil (Índia) | ta-IN |
| Tâmil (Malásia) | ta-MY |
| Tâmil (Cingapura) | ta-SG |
| Tâmil (Sri Lanka) | ta-LK |
| Telugu (Índia) | te-IN |
| Tailandês (Tailândia) | th-TH |
| Turco (Turquia) | tr-TR |
| Ucraniano (Ucrânia) | uk-UA |
| Urdu (Índia) | ur-IN |
| Urdu (Paquistão) | ur-PK |
| Uzbeque (Uzbequistão) | uz-UZ |
| Vietnamita (Vietnã) | vi-VN |
| Zulu (África do Sul) | zu-ZA |
Contexto (antigo)
Algumas dicas podem ser fornecidas por meio do context parâmetro de matriz para melhorar a qualidade do reconhecimento. Os valores definidos podem ser as palavras ou frases esperadas do usuário, por exemplo, ['one', 'two', 'three'] ou ['support', 'order starship'].
Ao usar provider e providerOptions, a configuração desse parâmetro é determinada pelo provedor escolhido. Para mais detalhes, consulte a documentação de Deepgram ou Google (speech_contexts[]) sobre como especificá-lo dentro de providerOptions.
Intrometer-se
Se o usuário não estiver ligando pela primeira vez, ele talvez já saiba qual pergunta fazer, de modo que pode começar a falar antes mesmo de a mensagem de áudio terminar. Para dar suporte a isso, bargeIn parâmetro do TTS (ou stream - (seja qual for a ação utilizada para a mensagem) deve ser ativada.
Recomenda-se que a mensagem inicial de TTS/áudio seja uma breve saudação inicial, sem ativar o bargeIn opção para melhorar a experiência do usuário. Se bargeIn Se estiver ativado para a saudação inicial, o usuário pode interrompê-lo inadvertidamente sem sequer ouvir o aviso, já que o ruído de fundo pode ser interpretado pelo aplicativo como uma interação ativa nesses primeiros momentos.
Salvar áudio
O áudio da fala pode ser armazenado, se desejado. Para obter a gravação, o saveAudio Se o parâmetro tiver que ser definido, então o recording_url será incluído na carga útil da solicitação de retorno de chamada. Isso pode ser útil para comparar a transcrição com o áudio original. Use o Baixar uma gravação trecho de código para baixar o áudio.
Exemplo de carga útil de evento
Assim que o NCCO input Quando a ação for concluída, o callback de entrada será enviado:
{
"speech": {
"recording_url": "https://api-us.nexmo.com/v1/files/ee94a327-ab6b-4bef-86bf-cadca33343e9",
"timeout_reason": "end_on_silence_timeout",
"results": [
{
"confidence": "1.0",
"text": "one two three four five six seven eight nine ten"
}
]
},
"dtmf": {
"digits": null,
"timed_out": false
},
"uuid": "529aa8f0-0ad8-42b0-ad61-b76dca18bb52",
"conversation_uuid": "CON-7347b08d-5f51-478f-bfb2-e8c3fd39509f",
"timestamp": "2020-02-07T11:42:40.933Z"
}
No corpo da resposta, espera-se um novo NCCO, contendo as próximas ações do fluxo da chamada com base na lógica do aplicativo e nas entradas do usuário (speech.results.text). Veja também Referência sobre Webhooks para mais detalhes.