Las aplicaciones suelen necesitar un bot para responder al usuario final. Dialogflow puede usar Cloud Text-to-Speech, que se basa en DeepMind WaveNet, para generar respuestas de voz de tu agente. Esta conversión de respuestas de texto de intents a audio se conoce como salida de audio, síntesis de voz, conversión de texto a voz o TTS.
En esta guía se proporciona un ejemplo que usa audio tanto para la entrada como para la salida al detectar una intención. Este caso de uso es habitual cuando se desarrollan aplicaciones que se comunican con los usuarios a través de una interfaz puramente de audio.
Para ver una lista de los idiomas admitidos, consulta la columna TTS de la página Idiomas.
Antes de empezar
Esta función solo se aplica cuando se usa la API para las interacciones con el usuario final. Si usas una integración, puedes saltarte esta guía.
Antes de leer esta guía, debes hacer lo siguiente:
- Consulta los conceptos básicos de Dialogflow.
- Sigue los pasos de configuración.
Crear un agente
Si aún no has creado un agente, hazlo ahora:
- Ve a la consola de Dialogflow ES.
- Si se te solicita, inicia sesión en la consola de Dialogflow. Para obtener más información, consulta el artículo Información general sobre la consola de Dialogflow.
- En el menú de la barra lateral de la izquierda, haz clic en Crear agente. Si ya tienes otros agentes, haz clic en el nombre del agente, desplázate hasta la parte inferior y haz clic en Crear nuevo agente.
- Introduce el nombre, el idioma predeterminado y la zona horaria predeterminada del agente.
- Si ya has creado un proyecto, accede a él. Si quieres permitir que la consola de Dialogflow cree el proyecto, selecciona Crear un proyecto de Google.
- Haz clic en el botón Crear.
Importar el archivo de ejemplo a tu agente
En los pasos de esta guía se presupone que tienes un agente, por lo que debes importar un agente preparado para esta guía. Al importar, estos pasos utilizan la opción Restaurar, que sobrescribe todos los ajustes, las intenciones y las entidades del agente.
Para importar el archivo, sigue estos pasos:
-
Descarga el archivo
room-booking-agent.zip
. - Ve a la consola de Dialogflow ES.
- Selecciona tu agente.
- Haz clic en el botón de configuración settings situado junto al nombre del agente.
- Selecciona la pestaña Exportar e importar.
- Selecciona Restaurar desde ZIP y sigue las instrucciones para restaurar el archivo ZIP que has descargado.
Detectar un intent
Para detectar la intención, llama al método detectIntent
del tipo Sessions
.
REST
1. Preparar contenido de audio
Descarga el archivo de audio de entrada de muestra book-a-room.wav
, que dice "book a room" (reserva una habitación).
El archivo de audio debe estar codificado en Base64 para este ejemplo, de modo que se pueda proporcionar en la solicitud JSON que se muestra a continuación.
Aquí tienes un ejemplo para Linux:
wget https://cloud.google.com/dialogflow/es/docs/data/book-a-room.wav base64 -w 0 book-a-room.wav > book-a-room.b64
Para ver ejemplos en otras plataformas, consulta Insertar audio codificado en Base64 en la documentación de la API Cloud Speech.
2. Hacer una solicitud de detección de intent
Llama al método detectIntent
en el tipo Sessions
y especifica el audio codificado en base64.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- PROJECT_ID: tu ID de proyecto de Google Cloud
- SESSION_ID: un ID de sesión
- BASE64_AUDIO: el contenido en base64 del archivo de salida anterior
Método HTTP y URL:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/agent/sessions/SESSION_ID:detectIntent
Cuerpo JSON de la solicitud:
{ "queryInput": { "audioConfig": { "languageCode": "en-US" } }, "outputAudioConfig" : { "audioEncoding": "OUTPUT_AUDIO_ENCODING_LINEAR_16" }, "inputAudio": "BASE64_AUDIO" }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "responseId": "b7405848-2a3a-4e26-b9c6-c4cf9c9a22ee", "queryResult": { "queryText": "book a room", "speechRecognitionConfidence": 0.8616504, "action": "room.reservation", "parameters": { "time": "", "date": "", "duration": "", "guests": "", "location": "" }, "fulfillmentText": "I can help with that. Where would you like to reserve a room?", "fulfillmentMessages": [ { "text": { "text": [ "I can help with that. Where would you like to reserve a room?" ] } } ], "intent": { "name": "projects/PROJECT_ID/agent/intents/e8f6a63e-73da-4a1a-8bfc-857183f71228", "displayName": "room.reservation" }, "intentDetectionConfidence": 1, "diagnosticInfo": {}, "languageCode": "en-us" }, "outputAudio": "UklGRs6vAgBXQVZFZm10IBAAAAABAAEAwF0AAIC7AA..." }
Ten en cuenta que el valor del campo queryResult.action
es room.reservation
y que el campo outputAudio
contiene una cadena de audio larga en base64.
3. Reproducir audio de salida
Copia el texto del campo outputAudio
y guárdalo en un archivo llamado output_audio.b64
.
Este archivo debe convertirse a audio.
Aquí tienes un ejemplo para Linux:
base64 -d output_audio.b64 > output_audio.wav
Para ver ejemplos en otras plataformas, consulta Decodificar contenido de audio codificado en Base64 en la documentación de la API Text-to-Speech.
Ahora puedes reproducir el archivo de audio output_audio.wav
y comprobar que coincide con el texto del campo queryResult.fulfillmentMessages[1].text.text[0]
de arriba.
Se elige el segundo elemento fulfillmentMessages
porque es la respuesta de texto de la plataforma predeterminada.
Java
Para autenticarte en Dialogflow, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Node.js
Para autenticarte en Dialogflow, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Python
Para autenticarte en Dialogflow, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.
Consulta la sección Respuestas de detección de intenciones para ver una descripción de los campos de respuesta pertinentes.
Detectar respuestas de intents
La respuesta a una solicitud de detección de intents es de tipo DetectIntentResponse
.
El procesamiento normal de la detección de intenciones controla el contenido del campo DetectIntentResponse.queryResult.fulfillmentMessages
.
El campo DetectIntentResponse.outputAudio
se rellena con audio en función de los valores de las respuestas de texto de la plataforma predeterminada que se encuentran en el campo DetectIntentResponse.queryResult.fulfillmentMessages
.
Si hay varias respuestas de texto predeterminadas, se concatenarán al generar el audio.
Si no hay respuestas de texto predeterminadas de la plataforma,
el contenido de audio generado estará vacío.
El campo DetectIntentResponse.outputAudioConfig
se rellena con los ajustes de audio utilizados para generar el audio de salida.
Detectar el intent de una emisión
Cuando detectas el intent de una emisión, envías solicitudes similares al ejemplo que no usa audio de salida: Detectar el intent de una emisión.
Sin embargo, debes proporcionar un campo OutputAudioConfig en la solicitud.
Los campos output_audio
y output_audio_config
se rellenan en la última respuesta de streaming que recibes del servidor de la API Dialogflow.
Para obtener más información, consulta StreamingDetectIntentRequest y StreamingDetectIntentResponse.
Configuración de los agentes para la voz
Puedes controlar varios aspectos de la síntesis de voz. Consulta los ajustes de voz del agente.
Usar el simulador de Dialogflow
Puedes interactuar con el agente y recibir respuestas de audio a través del simulador de Dialogflow:
- Sigue los pasos anteriores para habilitar la función de texto a voz automática.
- Escribe o di "reservar una sala" en el simulador.
- Consulta la sección Audio de salida en la parte inferior del simulador.