
Integración de llamadas telefónicas en un chatbot de Dialogflow mediante WebSockets
Tiempo de lectura: 13 minutos
Introducción
Este tutorial 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.
Diagram of the call
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, asignarlo a intents y proporcionarles respuestas.
Siga los pasos
Abrir la 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 AgentEn 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,
VonageDFAccederá a la consola de consola de Google Cloud
Gif showing the steps to create the dialogflow Agent
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 la consola de Google Cloudhaga clic en
Go to project settingsEn el menú de la izquierda, haga clic en
Service accountsEn la barra superior, haga clic en
+ Create Service AccountPóngale un nombre de cuenta de servicio que recuerde, por ejemplo
VonageDFAñadir una descripción de cuenta de servicio
Haga clic en
Create and ContinueEn
Grant this service account access to projectfiltrar y seleccionar la funciónDialogflow API Admin
Gif showing the seven above steps while creating the Service Account
Volverá a la página de Cuentas de servicio.
Haga clic en los tres puntos situados debajo de
actionHaga clic en
Manage keysHaga clic en
Add KeyHaga clic en
Create new KeySeleccione
JSONHaga clic en
CreatePuede ver que un
.jsonarchivo fue descargado. Añadiremos este archivo al repositorio Dialogflow Reference Connection repositorio GitHub que clonaremos en el siguiente paso
Gif showing the above steps to generate the keys
Configurar la conexión de referencia de Dialogflow
La conexión de referencia de Dialogflow utiliza la función función WebSockets de Voice API de Vonage. Cuando se establece una llamada de voz, una aplicación Voice API activa una conexión WebSocket a la conexió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 repositorio repositorio dialogflow-reference-connection de GitHub y cambia el directorio
git clone https://github.com/nexmo-community/dialogflow-reference-connection && cd dialogflow-reference-connectionAbra el código en su IDE o editor de texto favorito
Añada el archivo
.jsonque acabamos de descargar a la raíz del proyectoCree un
.envarchivo desde el.env.exampleRellene las variables de entorno:
GCLOUD_PROJECT_ID=<TheProjectIdFoundOnDialogflow>GOOGLE_CLOUD_CREDENTIALS=<TheJSONFileYouDownloaded.json>Desde el terminal:Instalar las dependencias
npm installEjecutar el archivo Dialogflow servidor de conexión
node df-connecting-server.jsHay muchos tipos de despliegue, como App Engine, Heroku, Cloud Run.
Para este tutorial, mostraremos ejemplos utilizando el módulo ngrok tunneling. Aquí hay un enlace que explica más sobre ngrok y Heroku.
Opción 1: Ejemplo con ngrok
Ejecutar
ngrok http 5000Anote la URL que aparece en la consola (por ejemplo
xxxx.ngrok.io). Añadiremos esta información en la parteDF_CONNECTING_SERVERargumento de Configuración de la aplicación de ejemplo Voice API de Dialogflow' parte del tutorial
The ngrok URL highlighted on the IDE
Opción 2: Ejemplo con Heroku
Instale git
Instalar Heroku línea de comandos e inicie sesión en su cuenta de Heroku
Si aún no dispone de un repositorio git local, cree uno:
git initEmpieza creando esta aplicación en Heroku desde la línea de comandos usando la CLI de Heroku. Nota: En el comando de abajo, reemplaza
thisappnamecon un nombre único en toda la plataforma Heroku.heroku create thisappnameEn tu panel de control de Heroku, donde se muestra la página de tu aplicación, haz clic en el botón
Settingsañada lo siguienteConfig Varsy establécelos con sus respectivos valores:
Despliegue de la aplicación
git push heroku masterogit push heroku maindependiendo del nombre de su rama.Anote la URL que aparece en la consola (por ejemplo
thisappname.herokuapp.com). Añadiremos esta información en la parteDF_CONNECTING_SERVERargumento de la parte del tutorial 'Configurar la aplicación de ejemplo 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 Application desde el Panel de la API de Vonage
Asigne un nombre a la aplicación, por ejemplo
VonageDFHaga clic en el botón para generar una clave pública y privada, un
private.keyarchivo. Lo añadiremos a la aplicación de ejemplo Voice API de Dialogflow en la siguiente sección de este tutorial.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 despuésBuy Numbersy siga los pasos para adquirirlo
Configuraremos la aplicación de ejemplo 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.
La dirección conexión de referencia dialogflow 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 de sentimiento de voz de la persona que llama a través de webhooks callbacks a este Aplicación de ejemplo de 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 Ejemplo de aplicación Dialogflow Voice API de GitHub.
Siga los pasos
Desde su terminal, clone la Aplicación de ejemplo de Voice API de Dialogflow de GitHub y cambie 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 de la Aplicación de ejemplo de Voice API de DialogflowAñade el archivo
private.keygenerado desde Vonage Dashboard y descargado en tu máquina a la raíz del proyectoDesde la sección
.env.examplecrear un.envarchivoRellene las variables de entorno con la información presente en el Panel de API de Vonage
El
SERVICE_NUMBERes el número virtual que ha adquirido. Recuerde añadir previamente el prefijo del país sin 00 ni +.El
DF_CONNECTING_SERVERes el servidor de la Referencia Dialogflow que ya tiene en ejecución (el que anotó anteriormente)
Instalar las dependencias
npm installEjecutar 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 una pestaña de terminal separada ejecuta
ngrok http 8000Vuelve al sitio web de Vonage Dashboard y en capacidadesActivar Voice para activar esta función
Añada la URL de ngrok que se ejecuta en
dialogflow-sample-voice-applicationseguido de/answeren la URL de respuesta. Asegúrese de que HTTP GET está seleccionado.Añada 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
Vonage Dashboard
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 initEmpieza creando esta aplicación en Heroku desde la línea de comandos usando la CLI de Heroku. Nota: En el comando, reemplaza
myappnamecon un nombre único en toda la plataforma Heroku.heroku create myappnameEn tu panel de control de Heroku, donde se muestra la página de tu aplicación, haz clic en el botón
Settingsañada lo siguienteConfig Varsy establécelos con sus respectivos valores que se encuentran en tu archivo.envarchivo.
Añade también el parámetro PRIVATE_KEY_FILE con el valor ./private.key
En tu panel de control de Heroku, donde se muestra la página de tu aplicación, haz clic en el botón
Open Appy copia la URLAhora, implementemos la aplicación. Vuelve al sitio web de Vonage Dashboard y en capacidades:
Activar Voice para activar esta función
Ese nombre de host (la URL que acabas de copiar de Heroku) se utilizará seguido de
/answeren la URL de respuesta. Asegúrese de que HTTP GET está seleccionadoHaga lo mismo para
/eventen la URL del evento. Asegúrese de que HTTP POST está seleccionadoHaga clic en Guardar cambios
Vonage Dashboard
Mejora del agente Dialogflow
Si intentara llamar al número de teléfono en este punto del tutorial, podría interactuar con el punto de partida de la conversación desde la perspectiva de Dialogflow, el botón 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
Abrir la consola dialogflow y asegúrate de que estás en el agente correcto para este tutorial
Haga clic en el botón
Default Welcome IntentDesplá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 BookerEn 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 mientras escribe estas frases, algunas palabras aparecerán resaltadas en color, asegúrese de hacer doble clic en las palabras y compruebe que están utilizando las entidades correctas
@sys.person,@sys.datey@sys.time.
En Acciones y parámetros, marque
requiredenperson,dateytimeAñ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.
Training phrases examples
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 respuestasHaga clic en Guardar
Table Booker Intent Overview
Interactuar por Voice 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 que se establece el WebSocket, la plataforma API de Vonage reproduce el texto a voz Hello al agente Dialogflow (tú, como persona que llama, no lo escucharás).
Acaba de establecer que el agente Dialogflow se lo lea.
En este punto, interactuará con los intentos que configuró en la sección anterior de este tutorial 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 este tutorial sobre cómo realizar llamadas telefónicas a un agente Dialogflow utilizando una integración WebSockets de Vonage.
Recursos
Encontrará el Ejemplo de referencia de Dialogflow y Ejemplo de aplicación Voice en Github.
Consulte la Guía de referencia de WebSockets.
Compruebe el Una entrada de blog que explica ngrok.
También puede ver un ejemplo similar utilizando un Amazon Lex Bot.
Espero que le haya gustado. No dude en ponerse en contacto conmigo en Twitter o únete a nuestro Canal Slack de la Comunidad.