Bot de voz con Google Dialogflow
Introducción
Esta guía le mostrará cómo realizar una llamada telefónica a un agente Dialogflow utilizando Dialogflow Essentials y una integración WebSockets de Vonage.
El siguiente diagrama muestra una visión general de la arquitectura.

Requisitos previos
Para realizar las acciones descritas en los pasos siguientes, deberá crear:
Crear un agente Dialogflow
Dialogflow es un software como servicio (SaaS) y una plataforma de comprensión del lenguaje natural utilizada para crear interfaces de usuario conversacionales.
Un agente es una instancia de Dialogflow, que puede considerarse como su aplicación de chatbot. Le permite tomar lo que dicen los usuarios, mapearlo a intents y darles respuesta.
Siga los pasos
- Abra el consola dialogflow
- Cree un agente dándole un nombre, estableciendo el idioma por defecto, eligiendo la zona horaria y pulsando el botón para crear un agente. El botón puede mostrarse como
CreateoCreate Agent - En el menú de la izquierda, haga clic en el icono de engranaje
- En Google Project, haz clic en el nombre de ID del proyecto. Por ejemplo
VonageDFEsto le llevará a la Consola de Google Cloud

Crear una cuenta de servicio en Google Cloud Console
Utilizaremos la interfaz gráfica de usuario para gestionar nuestro proyecto y recursos de Google Cloud a través de la consola de Google Cloud utilizando el mismo proyecto creado en Dialogflow. En los siguientes pasos, crearemos una Account de servicio para el control de acceso y autenticación.
Siga los pasos
- Desde el Consola de Google Cloudhaga clic en
Go to project settings - En el menú de la izquierda, haga clic en
Service accounts - En la barra superior, haga clic en
+ Create Service Account - Dele un Nombre de Cuenta de Servicio que recuerde, por ejemplo
VonageDF - Añadir una descripción de cuenta de servicio
- Haga clic en
Create and Continue - En
Grant this service account access to projectFiltrar y seleccionar la funciónDialogflow API Admin

Volverá a la página de Cuentas de servicio.
- Haga clic en los tres puntos situados debajo de
action - Haga clic en
Manage keys - Haga clic en
Add Key - Haga clic en
Create new Key - Seleccione
JSON - Haga clic en
Create - Puede ver una
.jsonse ha descargado. Añadiremos este archivo a la carpeta Conexión de referencia Dialogflow Repositorio GitHub clonaremos en el siguiente paso

Configurar la conexión de referencia de Dialogflow
La conexión de referencia de Dialogflow utiliza la función Función WebSockets de la Voice API de Vonage. Cuando se establece una llamada de voz, una aplicación Voice API activa una conexión WebSocket con la aplicación Conexión de referencia Dialogflow. Transmite el audio hacia y desde la llamada de voz en tiempo real.
En los siguientes pasos a continuación, vamos a dar dos opciones como ejemplos. Usar ngrok para tunelizar el servidor de conexión, que está interactuando con nuestro Dialogflow Agent y desplegarlo Heroku.
Siga los pasos
- Clonar el
dialogflow-reference-connectionrepositorio de GitHub y cambia el directoriogit clone https://github.com/nexmo-community/dialogflow-reference-connection && cd dialogflow-reference-connection - Abra el código en su IDE o editor de texto favorito
- Añada el
.jsonque ha descargado en la raíz del proyecto - Crear un
.envdel archivo.env.example - Rellena las variables de entorno:
GCLOUD_PROJECT_ID=<TheProjectIdFoundOnDialogflow>GOOGLE_CLOUD_CREDENTIALS=<TheJSONFileYouDownloaded.json>Desde la terminal: - Instalar las dependencias
npm install - Ejecute el archivo Dialogflow connecting server
node df-connecting-server.jsHay muchos tipos de despliegue, como App Engine, Heroku, Cloud Run.
Para esta guía, mostraremos ejemplos utilizando la función ngrok tunelización. Aquí hay un enlace que explica más sobre ngrok y Heroku.
Opción 1: Ejemplo con ngrok
- Ejecutar
ngrok http 5000 - Anote la URL encontrada en la consola (por ejemplo
xxxx.ngrok.io). Añadiremos esta información en elDF_CONNECTING_SERVERargumento de la parte de la guía "Configurar la aplicación de ejemplo Dialogflow Voice API

Opción 2: Ejemplo con Heroku
- Instale git
- Instale Línea de comandos de Heroku e inicie sesión en su cuenta de Heroku
- Si aún no dispone de un repositorio git local, cree uno:
git init - Comience por crear esta aplicación en Heroku desde la línea de comandos utilizando la CLI de Heroku. Nota: En el siguiente comando, reemplaza
thisappnamecon un nombre único en toda la plataforma Heroku.heroku create thisappname - En tu panel de control de Heroku, donde se muestra la página de tu aplicación, haz clic en
Settingsañada lo siguienteConfig Varsy establecerlos con sus respectivos valores:
- Despliegue de la aplicación
git push heroku masterogit push heroku maindependiendo del nombre de su sucursal. - Anote la URL encontrada en la consola (por ejemplo
thisappname.herokuapp.com). Añadiremos esta información en elDF_CONNECTING_SERVERargumento de la parte de la guía "Configurar la aplicación de ejemplo de Voice API de Dialogflow
Configura las credenciales y el número de teléfono de tu aplicación Voice API de Vonage
Siga los pasos
- Crear una Aplicación desde el menú Panel de API de Vonage
- Dé un nombre a la aplicación, por ejemplo
VonageDF - Haga clic en el botón para generar una clave pública y privada, un
private.keyse descargará. Lo añadiremos a la aplicación de ejemplo Dialogflow Voice API en la siguiente sección de esta guía. - Vincule un número de teléfono a esta aplicación. Si aún no lo tiene, en el menú de la izquierda haga clic en
Numbersy luegoBuy Numbersy siga los pasos para comprarlo
Configuraremos la aplicación de muestra de Voice API de Dialogflow y volveremos pronto al panel de esta aplicación de Vonage para agregar más información.
Configuración de la aplicación de ejemplo Voice API de Dialogflow
Esta aplicación de ejemplo utiliza la Voice API de Vonage para responder a las llamadas de voz entrantes y configurar una conexión WebSocket para transmitir audio hacia y desde la conexión de referencia de Dialogflow para cada llamada.
En conexión de referencia dialogflow código lo hará:
- Enviar audio al agente Dialogflow desde el habla de la persona que llama,
- Transmita las respuestas de audio del agente Dialogflow a la persona que llama a través del WebSocket,
- Publicar transcripciones en tiempo real y puntuaciones del sentimiento de la persona que llama a través de webhooks. Aplicación de ejemplo Voice API.
Una vez ejecutada esta aplicación, llamará al número de teléfono vinculado a su aplicación para interactuar por voz con su agente Dialogflow.
Usaremos ngrok para tunelizar el servidor de conexión que está interactuando con nuestro Dialogflow Agent, pero si quieres ver un ejemplo usando Heroku puedes seguir los pasos de Aplicación de ejemplo de Voice API de Dialogflow de GitHub.
Siga los pasos
- Desde su terminal, clone el archivo Aplicación de ejemplo de Voice API de Dialogflow de GitHub y cambia el directorio
git clone https://github.com/nexmo-community/dialogflow-sample-voice-application && cd dialogflow-sample-voice-applicationPuede continuar siguiendo la explicación de los pasos siguientes o desde el archivo readme del Aplicación de ejemplo de Voice API de Dialogflow - Añada el
private.keygenerado desde Vonage Dashboard y descargado en tu máquina en la raíz del proyecto - Desde el
.env.examplecrear un.envarchivo - Rellene las variables de entorno con la información presente en el Panel de API de Vonage
- En
SERVICE_NUMBERes el número virtual que ha adquirido. Recuerde añadir previamente el prefijo del país sin 00 ni +. - En
DF_CONNECTING_SERVERes el servidor de la Referencia Dialogflow que ya tiene en ejecución (el que anotó anteriormente)
Instalar las dependencias
npm installEjecute el
df-application.jsnode df-application.jsA continuación puedes encontrar los siguientes pasos para ngrok y para Heroku respectivamente:Opción 1: A continuación se indican los pasos a seguir con ngrok
En otra pestaña del terminal, ejecute
ngrok http 8000Vuelve al sitio web de Vonage Dashboard y en capacidades:Activar Voz para activar esta función
Añade la URL de ngrok que se ejecuta en
dialogflow-sample-voice-applicationseguido de/answeren la URL de la respuesta. Asegúrese de que HTTP GET está seleccionado.Añade la URL de ngrok que se ejecuta en
dialogflow-sample-voice-applicationseguido de/eventen la URL del evento. Asegúrese de que HTTP POST está seleccionado.Haga clic en Guardar cambios

Opción 2: Pasos siguientes utilizando Heroku
- En otra pestaña del terminal, Si aún no tienes un repositorio git local, crea uno:
git init - Empieza creando esta aplicación en Heroku desde la línea de comandos usando la CLI de Heroku. Nota: En el comando, reemplace
myappnamecon un nombre único en toda la plataforma Heroku.heroku create myappname - En tu panel de control de Heroku, donde se muestra la página de tu aplicación, haz clic en
Settingsañada lo siguienteConfig Varsy establézcalos con sus respectivos valores que se encuentran en su.envarchivo.
Añade también el parámetro PRIVATE_KEY_FILE con el valor ./private.key
- En el panel de control de Heroku, donde se muestra la página de su aplicación, haga clic en el botón
Open Appy copie la URL - Ahora, implementemos la aplicación. Vuelve al sitio web de Vonage Dashboard y en capacidades:
- Activar Voz para activar esta función
- Que
hostname(la URL que ha copiado de Heroku) seguida de/answeren la URL de respuesta. Asegúrese de que HTTP GET está seleccionado - Haga lo mismo con
/eventen la URL del evento. Asegúrese de que HTTP POST está seleccionado - Haga clic en Guardar cambios

Mejora del agente Dialogflow
Si intentara llamar al número de teléfono en este punto de la guía, podría interactuar con el punto de partida de la conversación desde la perspectiva de Dialogflow, el Default Welcome Intent.
Se devolvería un mensaje a la persona que llama a partir de la lista de respuestas del usuario. Pero la conversación no tomaría turnos, ya que no disponemos de otros datos formados para otros turnos de conversación.
Demos un paso atrás y exploremos algunos de los Concepts de Dialogflow para añadir las expresiones que podrían decir los usuarios, proporcionarles una respuesta y añadir el final de la conversación, de modo que pueda ver cómo se desarrolla una conversación completa por turnos.
Una vez creado un agente, creará intents que manejarán y darán forma a la conversación.
Cuando un usuario pronuncia una frase, Dialogflow compara lo que se dice con una intención, que se basa en la PNL y en las frases de entrenamiento que un usuario podría decir para que coincidiera con esa intención. Una vez clasificada la intención, se envía una respuesta al usuario.
Las entidades son los tipos de información que extraeremos de la conversación. Para el caso de uso que veremos a continuación, estamos reservando una mesa a través de una llamada telefónica. La información que extraeremos de la conversación son person, date y time.
Mejoremos la intención de bienvenida predeterminada, creemos una intención, describamos las entidades y añadamos un final a la conversación y probémosla.
Siga los pasos
- Abra el consola dialogflow y asegúrate de que estás en el agente correcto para esta guía
- Haga clic en el botón
Default Welcome Intent - Desplázate hacia abajo, borra las respuestas y añade:
Welcome to our Demonstration Restaurant. When and for whom would you like to book a table? - Haga clic en Guardar
- Haga clic en la opción de menú Intenciones
- Haga clic en el botón Nueva intención
- Dale el nombre de
Table Booker - En Frases de entrenamiento añada las siguientes frases de entrenamiento
- Una mesa para Nicole el día 10 a las 13:00, por favor.
- ¿Podría reservar un hueco a las 14:00 del 10/12/2021 para Joseph?
- Me gustaría reservar una mesa el 10/09/2020 a las 16:00 para Amanda
Notará que a medida que escribe estas frases, algunas palabras aparecerán resaltadas en un color, asegúrese de hacer doble clic en las palabras y asegurarse de que están utilizando las entidades correctas
@sys.person,@sys.datey@sys.time.
- En Acciones y parámetros, marque
requiredparaperson,dateytime - Añade indicaciones para cada uno de los parámetros porque, en caso de que no hayan dicho ese dato concreto durante la conversación, se les pedirá que lo añadan.

- En la respuesta, puede añadir lo siguiente:
Table booked for $person at $time on $date. Thank you! - Toggle
Set this intent as end of conversationa continuación las respuestas - Haga clic en Guardar

Interactuar por voz con el agente Dialogflow
¡Ahora que tenemos todas las partes configuradas es el momento de llamar a tu número de teléfono virtual y probarlo, vamos a repasar lo que está pasando y luego seguir nuestro paso final para hacer la llamada!
Una vez que llame al número de teléfono vinculado a su aplicación Voice API para interactuar con el agente Dialogflow
Escuchará el mensaje de confirmación: Connecting your call, please wait.. Ese texto a voz de la plataforma API de Vonage se reproduce tan pronto como la plataforma responde tu llamada.
Una vez establecido el WebSocket, la plataforma API de Vonage reproduce el texto a voz Hello al agente Dialogflow (usted, como interlocutor, no lo oirá).
Ya ha configurado la lectura que le hará el agente Dialogflow.
En este punto, interactuará con los intentos que configuró en la sección anterior de esta guía para reservar una mesa.
Verá las transcripciones en la consola de la aplicación de conexión de referencia de Dialogflow y también en la consola de la aplicación API de voz de ejemplo de Dialogflow.
Si quieres ver los resultados del análisis de sentimiento, tendrás que habilitar la API Cloud Natural desde la consola de Google Cloud. Si no está habilitada, aparecerá un error similar a PERMISSION_DENIED: Cloud Natural Language API has not been used in project xxxx before or it is disabled.
Vayamos al último paso y veamos todos los componentes en acción.
Siga los pasos
Llame al número de teléfono vinculado a su aplicación Voice API e interactúe con el agente Dialogflow.
He aquí una posible forma de poner a prueba la conversación:
- Vonage Websocket: Conectando tu llamada, por favor espera.
- Bot: Bienvenido a nuestro restaurante de demostración. ¿Cuándo y para quién desea reservar mesa?
- A ti: Me gustaría reservar una mesa a las 10:00 am en 01/09/2022 para Tanya
- Respuesta de Bot: Mesa reservada para Tanya a las 10:00 el 01/09/2022. Gracias.
Fin de la llamada
Enhorabuena
Ha completado esta guía sobre cómo realizar llamadas telefónicas a un agente Dialogflow utilizando una integración WebSockets de Vonage.
Recursos
Puede encontrar el Dialogflow Muestra de referencia y Ejemplo de aplicación de voz en GitHub.
Compruebe el Guía de referencia de WebSockets.
Compruebe el Una entrada de blog explicando ngrok.
También puedes ver un ejemplo similar utilizando un Amazon Lex Bot.