https://d226lax1qjow5r.cloudfront.net/blog/blogposts/introducing-voice-api-speech-recognition/Blog_Speech-Recognition_1200x600.png

Presentación de Voice API Reconocimiento de voz

Publicado el May 25, 2021

Tiempo de lectura: 3 minutos

Recientemente hemos anunciado un nuevo Reconocimiento automático del habla (ASR) que permite a su aplicación entender lo que dicen las personas cuando hablan. Esta función permite crear toda una gama de interacciones de voz, desde simples IVR con navegación por voz hasta sofisticados bots y asistentes de voz.

Con ASR puede ofrecer a los clientes el servicio más rápido posible, habilitar fácilmente operaciones de autoservicio basadas en la voz, al tiempo que ofrece una experiencia de usuario superior y reduce los costes operativos. En este post, le mostraremos cómo crear una sencilla aplicación IVR por la que el usuario pueda navegar utilizando solo su voz.

Vonage API Account

To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.

Antes de empezar

Para comenzar, asegúrate de tener una cuenta API de Vonage y de haber creado una aplicación de voz.

Utilizaremos Node.js para este ejemplo, así como el módulo Express y los paquetes body-parser. Para mayor facilidad, puedes utilizar el comando NPM que aparece a continuación para instalarlos en tu proyecto:

npm install express body-parser

Aunque este ejemplo utiliza Node.js, es posible recrear la misma funcionalidad utilizando su lenguaje de código/framework preferido utilizando la misma OCNC que mostramos a continuación.

Escribir el código

El reconocimiento de voz se activa mediante el comando NCCO input que también sirve para capturar tonos DTMF. Suponiendo que ya tiene un número asignado a su aplicación, cree un nuevo archivo llamado index.js y comience implementando el answer webhook como se muestra en el siguiente código:

'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)
})

En el fragmento de código anterior:

uuid es el identificador de la llamada (tramo) y es un parámetro obligatorio para esta acción. Puedes obtener este UUID de los parámetros de consulta del webhook de respuesta.

bargeIn: true en la acción hablar permite al usuario empezar a hablar en cualquier momento mientras se reproduce el mensaje de texto a voz, lo que puede ser conveniente si el usuario ya ha escuchado este mensaje en una llamada anterior.

context en la input acción aumenta la precisión del reconocimiento de voz y es adecuado para casos de tipo IVR.

Cuando el usuario diga el nombre del departamento y Vonage reconozca la palabra, recibirás una devolución de llamada del webhook a la dirección event_url que especificaste en la input acción. El cuerpo de la solicitud para esta devolución de llamada contiene los resultados del reconocimiento de voz y tiene este aspecto:

{
  "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"
}

A continuación, debe implementar un webhook que decida qué hacer con la información devuelta por 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)
})

En el fragmento anterior, debe reemplazar los valores departmentNumber por otros números de teléfono para que pueda recibir una llamada a, y desde el número a uno de sus números de cuenta Nexmo.

Por último, crea tu servidor Node.js:

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

Pruebe su aplicación

Para empezar a hacer pruebas a nivel local, tendrá que exponer su servidor local al resto del mundo para que sus aplicaciones answer y event_url puedan ser alcanzados. Puede utilizar Ngrok para hacer esto siguiendo el tutorial Probando con Ngrok en nuestra documentación.

Con su aplicación en funcionamiento llame al número asociado a la aplicación que ha creado en el panel de control. Oirá el mensaje de bienvenida con las opciones de IVR y podrá conectar con uno de sus números diciendo el nombre del departamento.

Intente añadir otras opciones y palabras diferentes para captar, por ejemplo, en lugar de anunciar las opciones en el saludo, mantenga sólo la pregunta bastante genérica y luego intente analizar la respuesta del usuario buscando las palabras "ventas", "soporte" o incluso "comprar" para convertir el IVR en un asistente inteligente.

¿Y ahora qué?

Si tiene alguna pregunta o comentario, háganoslo saber en nuestro Community Slack o póngase en contacto con nosotros en support@nexmo.com

Compartir:

https://a.storyblok.com/f/270183/250x250/a153431b0e/victorshisterov.png
Victor ShisterovResponsable de producto de Voice API

Victor es director de producto de Vonage Voice API, con siete años de experiencia en el sector de las telecomunicaciones y desarrollador de software desde la infancia. Le apasiona hacer que las cosas técnicamente complejas sean fáciles de entender y utilizar, manteniendo una API potente, autodescriptiva y coherente. Cuando no está inventando o programando, construye maquetas y toca instrumentos musicales populares.