https://a.storyblok.com/f/270183/81365/4fbd55267c/blog_speech-recognition_1200x600.png

Apresentando o reconhecimento de fala da Voice API

Publicado em May 25, 2021

Tempo de leitura: 4 minutos

Recentemente, anunciamos um novo Reconhecimento Automático de Fala (ASR) que permite que seu aplicativo compreenda o que as pessoas estão dizendo quando falam. Esse recurso permite que você crie uma ampla gama de interações por voz, desde simples IVRs com navegação por voz até sofisticados bots e assistentes de voz.

Com o ASR, você pode oferecer aos clientes o atendimento mais rápido possível, habilitar facilmente operações de autoatendimento baseadas em voz, ao mesmo tempo em que proporciona uma experiência de usuário superior e reduz os custos operacionais. Nesta postagem, vamos mostrar como criar um aplicativo IVR simples que o usuário possa navegar usando apenas a voz.

Antes de começar

Para começar, certifique-se de que você tenha um Account na API da Vonage e de que tenha criado um aplicativo de voz.

Vamos usar o Node.js para este exemplo, bem como o Express e os pacotes body-parser. Para facilitar, você pode usar o comando NPM abaixo para instalá-los em seu projeto:

npm install express body-parser

Embora este exemplo utilize o Node.js, é possível recriar a mesma funcionalidade usando sua linguagem de programação ou framework preferido, utilizando o mesmo NCCO, conforme mostramos a seguir.

Escrevendo o código

O reconhecimento de voz é ativado pelo comando NCCO input , que também é adequado para capturar tons DTMF. Supondo que você já tenha um número atribuído ao seu aplicativo, crie um novo arquivo chamado index.js e comece implementando o answer webhook, conforme mostrado no código abaixo:

'use strict'
 
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const http = require('http')
 
app.use(bodyParser.json())
 
app.get('/webhooks/answer', (request, response) => {
 
  const ncco = [{
      action: 'talk',
      text: 'Thank you for calling Example Inc.! Please tell us how we can help you today. Say Sales to talk to the sales department, Support to get technical support.',
      bargeIn: true
    },
    {
      action: 'input',
      eventUrl: [
        `${request.protocol}://${request.get('host')}/webhooks/asr`
      ],
      speech: {
        uuid: [request.query.uuid],
        context: ["Sales", "Support"]
      }
    }
  ]
 
  response.json(ncco)
})

No trecho de código acima:

uuid é o identificador da chamada (leg) e é um parâmetro obrigatório para esta ação. Você pode obter esse UUID a partir dos parâmetros da consulta do webhook de resposta.

bargeIn: true A função “falar agora” permite que o usuário comece a falar a qualquer momento enquanto a mensagem de conversão de texto em fala está sendo reproduzida, o que pode ser adequado caso o usuário já tenha ouvido essa mensagem em uma chamada anterior.

context na input ação aumenta a precisão do reconhecimento de fala e é adequada para casos do tipo IVR.

Quando o usuário disser o nome do departamento e a palavra for reconhecida pela Vonage, você receberá um callback de webhook no event_url que você especificou na input ação. O corpo da solicitação para esse retorno de chamada contém os resultados do reconhecimento de fala e tem a seguinte aparência:

{
  "speech": {
    "timeout_reason": "end_on_silence_timeout",
    "results": [
      {
        "confidence": "0.9320692",
        "text": "sales"
      }
    ]
  },
  "dtmf": {
    "digits": null,
    "timed_out": false
  },
  "from": "15557654321",
  "to": "15551234567",
  "uuid": "abfd679701d7f810a0a9a44f8e298b33",
  "conversation_uuid": "CON-64e6c8ef-91a9-4a21-b664-b00a1f41340f",
  "timestamp": "2020-04-17T17:31:53.638Z"
}

Em seguida, você precisa implementar um webhook que determine o que fazer com as informações retornadas pelo ASR:

app.post('/webhooks/asr', (request, response) => {
 
  console.log(request.body)
 
  var department = ""
 
  if (request.body.speech.results)
    department = request.body.speech.results[0].text
 
  var departmentNumber = ""
 
  switch (department) {
    case 'sales':
      departmentNumber = "15551234561"
      break;
    case 'support':
      departmentNumber = "15551234562"
      break;
    default:
      break;
  }
 
  var ncco = ""
 
  if (departmentNumber != "") {
    ncco = [{
      "action": "connect",
      "from": "15551234563",
      "endpoint": [{
        "type": "phone",
        "number": departmentNumber
      }]
    }]
  } else {
    ncco = [{
      action: 'talk',
      text: `Sorry, we didn't understand your message. Please try again.`
    }, {
      action: 'input',
      eventUrl: [
        `${request.protocol}://${request.get('host')}/webhooks/asr`
      ],
      speech: {
        uuid: [request.body.uuid],
        context: ["Sales", "Support"]
      }
    }]
 
  }
 
  response.json(ncco)
})

No trecho acima, você deve substituir os departmentNumber valores por outros números de telefone para que você possa receber e fazer chamadas para um dos números da sua conta Nexmo.

Por fim, crie seu servidor Node.js:

const port = 3000
app.listen(port, () => console.log(`Listening on port ${port}`))

Testando seu aplicativo

Para começar a testar localmente, você precisará tornar seu servidor local acessível ao resto do mundo para que seu answer e event_url webhooks possam ser acessados. Você pode usar o Ngrok para fazer isso, seguindo o guia “Testando com o Ngrok” em nossa documentação.

Com o aplicativo em execução, ligue para o número associado ao aplicativo que você criou no painel de controle. Você ouvirá a mensagem de boas-vindas com as opções do IVR e poderá se conectar a um dos seus números dizendo o nome do departamento.

Tente adicionar outras opções e palavras diferentes para identificar; por exemplo, em vez de anunciar as opções na saudação, mantenha apenas a pergunta de forma bastante genérica e, em seguida, tente analisar a resposta do usuário procurando pelas palavras “vendas”, “suporte” ou até mesmo “comprar”, a fim de transformar o IVR em um assistente inteligente.

E agora?

Caso tenha alguma dúvida ou sugestão, entre em contato conosco no Slack da nossa Comunidade ou através do support@nexmo.com

Compartilhar:

https://a.storyblok.com/f/270183/250x250/a153431b0e/victorshisterov.png
Victor ShisterovGerente de Produto da Voice API

Victor é gerente de produto da Voice API da Vonage, com sete anos de experiência no setor de telecomunicações, e desenvolvedor de software desde a infância. Ele se dedica a tornar conceitos tecnicamente complexos fáceis de entender e usar, mantendo APIs poderosas de forma autoexplicativa e consistente. Quando não está criando e programando, ele constrói modelos em escala e toca instrumentos musicais folclóricos.