Actividad práctica: Taller de Women in Voice

1. Introducción

En este lab, compilarás una acción simple usando Dialogflow y aprenderás a integrarla con el Asistente de Google.

Los ejercicios están ordenados para reflejar una experiencia común de desarrollador de la nube:

  1. Crea un agente de Dialogflow v2
  2. Crea entidades
  3. Crea intents
  4. Configura un webhook con Cloud Functions de GCP
  5. Usa la base de conocimiento para importar preguntas frecuentes
  6. Prueba el chatbot
  7. Habilita la integración del Asistente de Google

Qué compilarás

Crearemos una app del Asistente de Google para el grupo de encuentros de Mujeres en Voice. Podrás preguntar cuándo es la próxima reunión, el artículo y para reservar consejos o preguntas generales sobre el grupo de reunión.

Qué aprenderás

  • Cómo crear un chatbot con Dialogflow v2
  • Cómo crear una conversación lineal con Dialogflow
  • Cómo usar entidades
  • Cómo usar la base de conocimiento
  • Cómo configurar entregas de webhook con funciones de Dialogflow y GCP
  • Cómo trasladar tu aplicación al Asistente de Google con Actions on Google

Requisitos previos

2. Cómo prepararte

Habilita la Actividad web en tu navegador

  1. Haz clic en http://myaccount.google.com/activitycontrols

  1. Asegúrate de que Web & La actividad en apps está habilitada:

bf8d16b828d6f79a.png

Crea un agente de Dialogflow

  1. Abrir: https://console.dialogflow.com

  1. En la barra izquierda, debajo del logotipo, selecciona "Create New Agent". Si ya tienes agentes, haz clic en el menú desplegable primero.

1d7c2b56a1ab95b8.png

  1. Especifica un nombre para el agente: yourname-wiv (usa tu propio nombre)
  2. Como idioma predeterminado, elige English - en.
  3. Como zona horaria predeterminada, elige la más cercana.
  4. No selecciones Mega Agent. (Con esta función, puedes crear un agente general, que puede organizar entre agentes "sub". No lo necesitamos ahora).
  5. Haga clic en Crear.

382af956cbf308a4.png

Configura Dialogflow

  1. Haz clic en el ícono de ajustes en el menú de la izquierda, junto al nombre del proyecto.

1d7c2b56a1ab95b8.png

  1. Ingresa la siguiente descripción del agente: Women in Voice agent.
  2. Desplázate hacia abajo hasta Funciones Beta y mueve el interruptor para habilitar las funciones Beta.
  3. Desplázate hacia abajo hasta Configuración de registros y activa ambos interruptores para registrar las interacciones de Dialogflow y en Google Cloud Stackdriver. Lo necesitaremos más adelante, en caso de que queramos depurar nuestra acción.

e80c17acc3cce993.png

  1. Haga clic en Guardar.
  2. Haga clic en Listo.

Cómo configurar Actions on Google

  1. En el panel derecho, haz clic en el vínculo Asistente de Google en Descubre cómo funciona en Asistente de Google.

5a4940338fc351e3.png

Se abrirá: http://console.actions.google.com

NOTA: Asegúrate de acceder con la misma Cuenta de Google que usaste en Dialogflow.

Si es la primera vez que usas Actions on Google, primero debes completar este formulario:

3fd4e594fa169072.png

  1. Intenta abrir tu acción en el simulador** haciendo clic en el nombre del proyecto.**
  2. Selecciona Develop en la barra de menú.

Desmarca la opción Hacer coincidir la configuración de idioma del usuario. Para garantizar que el idioma predeterminado de Asistente no anule el sintetizador de texto a voz,

3b6bc284050571f5.png

  1. Haga clic en Guardar.
  2. Selecciona Test en la barra de menú.

dd55b141677932fe.png

  1. Asegúrense de que el simulador esté configurado en English y hagan clic en Talk to my test-app.

La acción te saludará con el intent básico predeterminado de Dialogflow. Esto significa que la configuración de la integración con Action on Google funcionó.

Configura Google Cloud

Para este instructivo, necesitarás una cuenta de GCP con una cuenta de facturación. Si aún no tienes una, puedes crearla siguiendo estos pasos.

Por lo general, una cuenta de facturación requiere una forma de pago, como una tarjeta de crédito. En este taller, podemos usar créditos de taller que pueden omitir este proceso.

  1. Navegar a esta URL y acceder

gcpcredits.com/wivnl

  1. Haz clic: Haz clic aquí y accede a tus créditos
  2. Haz clic en Aceptar y Continuar

¡Listo! Creaste una cuenta de facturación con 25 dólares, lo que debería ser más que suficiente para usar Cloud Functions por mucho tiempo.

Habilitar la API de Google Sheets

Si tu agente necesita más que respuestas estáticas de intent (por ejemplo, para recuperar datos de un servicio web, una base de datos o una hoja de cálculo), debes usar entregas para conectar tu servicio web con tu agente. Conectar tu servicio web te permite realizar acciones en función de las expresiones de los usuarios y enviarle respuestas dinámicas a estos.

Por ejemplo, si un usuario desea recibir una sugerencia de un blog o un libro, tu servicio web puede registrar tu base de datos y responderle al usuario con un artículo para leer.

En este tutorial no utilizaremos una base de datos, sino una hoja de cálculo de Google. Cuando se actualice la hoja de cálculo, también se actualizará la acción de Asistente de Google. ¡Bravo!

  1. Si aún no lo hiciste, abre esta hoja de cálculo de Google en una pestaña nueva del navegador:
  2. https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
  3. IMPORTANTE: Haz una copia de esta hoja. Haz clic en Archivo > Crear una copia
  4. Una vez que se haya copiado la hoja, haz clic en Compartir.
  5. Debemos otorgar derechos de edición a la cuenta de servicio de Dialogflow. Para ello, abre Dialogflow > Configuración (rueda de engranaje).
  6. Desplázate hacia abajo hasta Proyecto de Google.
  7. Copia la dirección de la cuenta de servicio (correo electrónico). Debería verse así: dialogflow-<someid>@<my-gcp-project>.iam.gserviceaccount.com

8bc778a04efb3dd2.png

  1. Pega esta cuenta de servicio en la ventana emergente Compartir de Hojas de cálculo de Google y otórgale derechos de edición.

e296b9c069c2028e.png

  1. A continuación, necesitaremos recordar el ID de la hoja en la que estamos trabajando actualmente.

f9061a3724086bf7.png

    The Sheets URL will look something like this:

https://docs.google.com/spreadsheets/d/1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o/edit#gid=1240329448

    But we are only interested in the Sheet id, which is the part between:

https://docs.google.com/spreadsheets/d/ y /edit#gid=1240329448 (sin las barras).

    So it will look something like this: **1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o**

    **Write this Sheet ID down**, or copy it to Notepad. In the Webhook steps we will use this again.
  1. Abrir en otra pestaña del navegador. http://console.cloud.google.com. (En caso de que tengas más proyectos de Google Cloud, activa el nuevo proyecto de Dialogflow: yourname-wiv). - En la barra de búsqueda, busca: API de Google Sheets

8b42de259eb40547.png

  1. Haz clic aquí y, luego, en el botón Habilitar API de Google Sheets en la parte superior.

4b41a64a6cd5a37e.png

3. Entidades personalizadas

Las entidades son objetos en los que tu app o dispositivo realiza acciones. Piénsalo como parámetros / variables. En nuestra acción preguntaremos:

"Quiero una sugerencia de lectura sobre

chatbots

/ Quiero una sugerencia de lectura sobre

voice*"*

Independientemente de si dices chatbots, Voice o Ambos, esto se recopilará de una entidad personalizada que se usará como parámetro en mi solicitud a un servicio web.

Aquí encontrarás más información sobre las entidades de Dialogflow.

Crea la entidad de canal

  1. Haz clic en el elemento de menú Entities en la consola de Dialogflow.
  2. Haz clic en Crear entidad.
  3. Nombre de la entidad: tech (asegúrate de que todo esté en minúsculas)
  4. Especifica las opciones con los sinónimos. (Puedes usar la tecla Tab en la interfaz).
  • Chatbots - Chatbots, Chat, Web
  • Voice - Voice, Voicebots, Voice Assistants
  • Both - Both, All

f9b213472a75915b.png

5**.** Cambia al modo **Raw Edit** haciendo clic en el botón de menú junto al botón azul de guardar.

e294b49b123e034f.png

  1. Observa que también podrías haber ingresado todas las entidades en formato CSV. Esto puede ser útil cuando tienes que crear muchas entidades.
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"

6cfaa328bcd2bad3.png

  1. Haz clic en Guardar.

4. Intents

Dialogflow usa intents para categorizar las intenciones del usuario. Los intents tienen frases de entrenamiento, que son ejemplos de lo que un usuario podría decirle a tu agente.

Por ejemplo, un usuario que quiere saber quién quiere saber cuándo es el próximo evento puede preguntar:

"¿Cuándo es la próxima reunión?"

Cuando un usuario escribe o dice algo, lo que se conoce como expresión de usuario, Dialogflow detecta el intent más adecuado de tu agente para esa expresión del usuario. La búsqueda de intents coincidentes también se conoce como clasificación de intent.

Aquí encontrarás más información sobre los intents de Dialogflow.

Cómo modificar el intent de bienvenida predeterminado

Cuando creas un agente de Dialogflow nuevo, se crean automáticamente dos intents predeterminados. El intent de bienvenida predeterminado es el primer flujo al que accedes cuando inicias una conversación con el agente. El intent alternativo predeterminado es el flujo que obtendrás una vez que el agente no pueda comprenderte o no pueda hacer coincidir un intent con lo que acabas de decir.

  1. Haz clic en Intents > Intent de bienvenida predeterminado

En el caso del Asistente de Google, se iniciará automáticamente con el intent de bienvenida predeterminado. Esto se debe a que Dialogflow está escuchando el evento de bienvenida. Sin embargo, también puedes invocar el intent diciendo una de las frases de entrenamiento ingresadas.

17610dbd5450e53.png

Este es el mensaje de bienvenida para el intent de bienvenida predeterminado:

Usuario

Agente

"Hey Google, habla con <tunombre>, WIV"

"Hola, soy Anna, la agente virtual de Women in Voice". Puedes pedirme información sobre encuentros, Women in Voice o un consejo de lectura. "¿Qué te gustaría saber?".

  1. Desplázate hacia abajo hasta Respuestas.
  2. Borra todas las respuestas de texto.
  3. En la pestaña predeterminada, crea las siguientes 3 respuestas. (haz clic en Agregar respuestas > Texto o Respuesta de SSML en cada línea nueva):
  • Hola, soy Anna, la agente virtual de Women in Voice.
  • Puedes pedirme información sobre encuentros, Women in Voice o sugerencias de lectura.
  • ¿Qué te gustaría saber?

La configuración debería ser similar a la de esta captura de pantalla.

a0078ea79188dcb3.png

  1. El resultado anterior se usa para chatbots. Podemos modificarlo un poco, específicamente para Asistente de Google. Usaremos SSML (lenguaje de marcación de síntesis de voz) para incorporar pausas en nuestras oraciones. Haz clic en la pestaña Asistente de Google.
  • No habilites el botón de activación predeterminado, ya que no volveremos a usar el mensaje del chatbot.
  • Haz clic en Agregar respuestas > Respuesta simple
  • Agrega la siguiente versión de texto:

Hey there, I'm Anna, the virtual agent of Women in Voice.

You can ask me for information about meetups, Women in Voice or a reading tip. What would you like to know?

  • Luego, haz clic en Personalizar salida de audio.
  • Agrega la siguiente versión del SSML:

<speak><p><s>Hey there, I'm Anna, the virtual agent of Women in Voice.</s><s>

You can ask me for information about meetups, Women in Voice or a reading tip.</s></p><break time="500ms"/><p><s> What would you like to know?</s></p></speak>

La configuración debería ser similar a la de esta captura de pantalla.

62f0f58753463fbe.png

  1. Haga clic en Guardar.

Aquí puedes obtener más información sobre el SSML para Actions on Google.

  1. Probemos este intent. Primero, podemos probarlo en el simulador de Dialogflow.

Escribe: Hello. Debería mostrar este mensaje.

12d40056fbd25dfe.png

  1. Ahora, regresa a la consola de Actions on Google.

(Te recomendamos que mantengas esta opción en otra pestaña).

Haz clic en "Hablar con mi aplicación de prueba". Y escucha el nuevo mensaje de bienvenida.

Modifica el intent alternativo predeterminado

  1. Haz clic en Intents > Intent de resguardo predeterminado
  2. Desplázate hacia abajo hasta Respuestas.
  3. Borra todas las respuestas de texto.
  4. En la pestaña predeterminada, crea las siguientes respuestas, cada una en una línea nueva, para alternar entre estas opciones:
  • Sorry, can you repeat this?
  • I didn't understand you. You can ask me questions about Women in Voice, a book or article tip or when the next meetup will be.

bdecc217bafff97b.png

  1. Haga clic en Guardar.

Ten en cuenta que, cuando no ingreses un resultado del Asistente de Google, se usará el predeterminado.

Cómo crear el intent de detención

  1. Haz clic en el elemento de menú Intents.
  2. Haz clic en Crear intent.
  3. Ingresa el nombre del intent: Stop Intent
  4. Haz clic en Agregar frases de entrenamiento.
  • No
  • That's it
  • Bye
  • I don't want that
  • Goodbye
  • It's ok for now
  • Quit
  • I want to stop
  • Close this
  • End the conversation

8c6455cabdf7e36.png

  1. Desplázate hacia abajo hasta Respuestas.> Agregar respuesta
  2. Agrega las siguientes opciones de texto:
  • Alright! Hopefully we will see you at one of our meetups!
  • No problem. See you at one of our meetups!
  1. Activa el interruptor: Establece este intent como el final de la conversación. Esto garantizará que, una vez que se detecte la coincidencia con este intent, se cerrará la acción del Asistente de Google.

ba532398680d457d.png

  1. Haz clic en Guardar.

Crea el intent de reunión

El intent de la reunión incluirá esta parte de la conversación:

Usuario

Agente

"¿Cuándo es la próxima reunión?"

"La próxima reunión será el <fecha> a las <time> en <location>. El tema será <topic>. Y las bocinas son: <speakers>. Puedes registrarte a través de nuestro boletín informativo".

  1. Haz clic en el elemento de menú Intents.
  2. Haz clic en Crear intent.
  3. Ingresa el nombre del intent: Meetup Intent (asegúrate de usar una M mayúscula y una I mayúscula. - Si escribes el intent de manera diferente, el servicio de backend no funcionará).
  4. Haz clic en Agregar frases de entrenamiento.
  • When is the next meetup?
  • Do you have any events?
  • Which events are in the planning?
  • Are there meetup events soon?
  • I would love to attend a meetup
  • Can I join a virtual meetup?
  • When will you get together?
  • Can I join?
  • What does your calendar look like?
  1. Haz clic en Entrega > Habilita la entrega

8eb73ba04d76140e.png

  1. Activa la opción Habilitar llamada de webhook para este intent.

748a82d9b4d7d253.png

  1. Haz clic en Guardar.

Cómo crear el intent de propina

El intent de sugerencia contendrá esta parte de la conversación:

Usuario

Agente

"Quiero una sugerencia de lectura".

“¿Quieres obtener más información sobre chatbots, Voice o Ambos?”

“Voz”

"¡Muy bien, esta es la sugerencia del día! El tipo <type> &lt;title&gt; de <author>. ¿Quieres otra sugerencia sobre un libro o un artículo? Además, puedo contarte más sobre las reuniones o lo que hacemos. ¿Cómo puedo ayudarte?".

  1. Vuelve a hacer clic en el elemento de menú Intents.
  2. Haz clic en Crear intent.
  3. Ingresa el nombre del intent: Tip Intent (asegúrate de usar una L mayúscula y una I mayúscula. - Si escribes el intent de manera diferente, el servicio de backend no funcionará).
  4. Haz clic en Agregar frases de entrenamiento y agrega lo siguiente:
  • Can I get a tip for an article?
  • I would like to receive a reading tip
  • Any book tips?
  • What's nice to read?
  • I want to learn more about Chatbots, what should I read?
  • What are nice blogs?
  • Do you have book suggestions?
  • I want to receive information about Both
  • Can I have Chatbots reading tip
  • I would like to read more about Voice
  • Voice please
  • Both are okay.
  • Reading tip
  • Tip
  • Blog
  • Article
  • Book
  • Book suggestions
  • Yes
  • Yeah
  • Another tip
  • Yes one more
  1. Desplázate hacia abajo hasta Acción y parámetros (Action and parameters).
  2. Marcar el término tecnología como necesario

7cdf7fdf5d2c3fbe.png

Haz clic en Define Prompt y, luego, ingresa lo siguiente:

  • Do you want to read more about Chatbots, Voice or Both?
  1. Haz clic en Entrega > Habilita la entrega

Esta vez no codificaremos una respuesta. La respuesta provendrá de la Cloud Function. Por lo tanto, activa el interruptor Habilitar llamada de webhook para este intent.

Haz clic en Entrega > Habilita la entrega

8eb73ba04d76140e.png

  1. Activa la opción Habilitar llamada de webhook para este intent.

748a82d9b4d7d253.png

  1. Haz clic en Guardar.

5. Conectores de conocimiento

Los conectores de conocimiento complementan los intents definidos. Analizan documentos de conocimiento para encontrar respuestas automáticas. (por ejemplo, preguntas frecuentes o artículos de archivos CSV, sitios web en línea o incluso archivos PDF). Para configurarlos, define una o más bases de conocimiento, que son colecciones de documentos de conocimiento.

Obtén más información sobre los conectores de conocimiento.

Probemos esto.

  1. Selecciona la etiqueta en para elegir el idioma inglés en el menú de la parte superior.
  2. Selecciona Conocimiento (beta) en el menú.

e0a3d2e03dd1076c.png

  1. Haz clic en el botón azul derecho: Crear base de conocimiento
  2. Escribe como nombre de base de conocimiento. Women in Voice y presiona Guardar.
  3. Haz clic en el vínculo Create the first one.

9b2ca6b25c4100ab.png

  1. Se abrirá una ventana.

Usa la siguiente configuración:

Nombre del documento: Hoja de preguntas frecuentes sobre las mujeres en el mundo de Voice

Tipo de conocimiento: Preguntas frecuentes

Tipo de MIME: CSV

  1. Necesitaremos los datos de esta hoja, asegúrate de que la hoja de datos esté abierta y selecciona la pestaña Preguntas frecuentes
  2. Selecciona Archivo > Descargar > CSV

e7f0066408fc1721.png

  1. De regreso en Dialogflow, haz clic en Subir archivo desde la computadora y selecciona el archivo CSV que descargaste. Haz clic en Crear.

Se creó una base de conocimiento:

64513e2e484dda31.png

  1. Haz clic en Agregar respuesta.

Crea las siguientes respuestas y presiona Guardar:

$Knowledge.Answer[1]

  1. Haz clic en Ver detalles.

Se mostrarán todas las preguntas frecuentes que implementaste en Dialogflow.

Es fácil.

Ten en cuenta que también podrías dirigir a un sitio web HTML en línea con Preguntas frecuentes para importar preguntas frecuentes a tu agente. Incluso es posible subir un PDF con un bloque de texto, y Dialogflow generará preguntas por sí mismo.

  1. Haz clic en Conocimiento (beta) en el menú de Dialogflow para volver a todos los conectores de la base de conocimiento.
  2. Es posible cambiar las fortalezas y debilidades de la base de conocimiento. Esto tiene sentido si tienes la idea de que tus preguntas frecuentes ganan o pierden a partir de tus propios intentos. Como no tenemos muchos intents, hagamos que nuestra base de conocimiento sea un poco más sólida. Cambia la escala a -0.2. Después de arrastrar el control deslizante, el valor se guardará automáticamente.

Ahora, las preguntas frecuentes deberían considerarse “extras”. para agregar a los agentes, junto a los flujos de intents. Las preguntas frecuentes de la base de conocimiento no pueden entrenar el modelo. Por lo tanto, si haces preguntas de una forma completamente diferente, es posible que no obtengas una coincidencia porque no se utiliza la comprensión del lenguaje natural (modelos de aprendizaje automático). Por este motivo, a veces vale la pena convertir tus preguntas frecuentes en intents.

6. Entrega mediante webhook

Crea una función de Google Cloud Functions

  1. Navega a http://console.cloud.google.com en otra pestaña del navegador.
  2. En el menú de la izquierda, selecciona Cloud Functions.
  3. Haz clic en Crear función.

bf2441ba1271a95e.png

  1. Especifica la siguiente configuración:
  • Nombre: dialogflow
  • Memoria asignada: 256 MiB
  • Activador: HTTP
  • Copia la URL en el portapapeles.
  • Selecciona Inline Editor.
  • Entorno de ejecución: NodeJS 8
  • Función que se ejecutará: dialogflow
  1. Asegúrate de que esta casilla de verificación de autenticación esté marcada:

317140d44ec3299c.png

61ecb8f57a6fd21b.png

  1. Este es el contenido de package.json. Copia y pega esto en la pestaña package.json del editor.

Este fragmento de código carga las bibliotecas de npm correctas en Google Cloud:

{
 "name": "dialogflow",
 "description": "Cloud Functions",
 "engines": {
   "node": "8"
 },
 "dependencies": {
   "request": "^2.85.0",
   "request-promise": "^4.2.5",
   "dialogflow-fulfillment": "^0.6.1",
   "actions-on-google": "^2.2.0",
   "googleapis": "^48.0.0",
   "moment": "^2.24.0"
 },
 "devDependencies": {
   "eslint": "^5.12.0",
   "eslint-plugin-promise": "^4.0.1",
   "ngrok": "^3.2.7"
 },
 "private": true
}
  1. Este es el contenido de index.js. Cópialo y pégalo en la pestaña index.js del editor.

Este fragmento de código se integrará con la biblioteca de googleapis para recuperar datos de una hoja de cálculo de Google. Usa la biblioteca actions-on-google para mostrar tarjetas en un dispositivo con el Asistente de Google integrado. Utiliza la biblioteca dialogflow-fulfillment para clasificar los intents de Dialogflow. Además, utiliza el momento de la biblioteca para controlar los objetos de fecha y hora.

/* jshint esversion: 8 */
'use strict';

process.env.DEBUG = 'dialogflow:debug';

const ACCOUNTS_SHEET_ID = '1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY';

const {
 BasicCard,
 Button,
} = require('actions-on-google');

const {google} = require('googleapis');
const moment = require('moment');
moment.locale('nl');
const { WebhookClient } = require('dialogflow-fulfillment');
var books;
var meetups;

const SHEETS_SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';

/**
* Authenticates the Sheets API client for read-only access.
*
* @return {Object} sheets client
*/
async function getSheetsClient() {
   // Should change this to file.only probably
   const auth = await google.auth.getClient({
       scopes: [SHEETS_SCOPE],
   });
   return google.sheets({version: 'v4', auth});
}

/**
* Return a natural spoken date
* @param {string} date in 'YYYY-MM-DD' format
* @returns {string}
*/
var getSpokenDate = function(date){
   let datetime = moment(date, 'YYYY-MM-DD');
   return `${datetime.format('D MMMM')}`;
};


/* When the tipIntent Intent gets invoked.  */
function tipIntent(agent) {
 var par = agent.parameters.tech;
   var selection = [];
   //console.log(par);
   //console.log(books);
    for(var i = 0; i<books.length; i++){
     if(books[i][2].toLowerCase() == par.toLowerCase()) {
         selection.push(books[i]);
       }
   }
    var random = Math.floor(Math.random() * selection.length);
   var booktip = selection[random];
   //console.log(selection[random]);

   let spokenText = `<p><s>Alright, here's the tip of the day!</s></p><p>The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.</p>`;
   let writtenText = `Alright, here's the tip of the day! The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`;
   //console.log(booktip[8]);
    if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
       let conv = agent.conv();
       conv.ask(`<speak>${spokenText}</speak>`);
       conv.ask(new BasicCard({
           title: `Tip of the day!`,
           subtitle: `${par}`,
           text: `The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`,
           buttons: new Button({
               title: 'Read',
               url: `${booktip[8]}`,
           })
       }));
       conv.ask(`<speak><p><s>Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?</s></p></speak>`);
       // Add Actions on Google library responses to your agent's response
       agent.add(conv);
   } else {
       agent.add(writtenText + ' Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?');
   }
}


function meetupIntent(agent) {
 let conv = agent.conv();
 let record;
  console.log(meetups);
  for(var i = 0; i<meetups.length; i++){
   let d = moment(meetups[i][0], 'YYYY-MM-DD');
   let today = moment(new Date());

   if(moment(d).isSameOrAfter(today)) {
     // the i event is not in the past
     record = meetups[i];
     console.log(record);
     break; 
   }
 }
  let date = getSpokenDate(record[0]);
 let spokenText1 = `The next meetup will be ${date} at ${record[1]} in ${record[3]}.`;
 let spokenText2 = `The topic will be <emphasis level="moderate">${record[2]}.</emphasis>`;
 let spokenText3 = `You can register via our newsletter.`;
  let writtenText = `${spokenText1} The topic will be ${record[2]}. ${spokenText3}`;

 if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
   conv.ask(`<speak>${spokenText1} ${spokenText2} ${spokenText3}</speak>`);
   conv.ask(new BasicCard({
     title: `Meetup`,
     subtitle: `${record[2]}`,
     text: `${record[0]} ${record[1]} - ${record[3]}`,
     buttons: new Button({
       title: 'Register',
       url: `http://www.meetup.com`
     })
   }));
   conv.ask('<speak><p><s>Is there anything else I can help you with?</s></p></speak>');
   agent.add(conv);
 } else {
   agent.add(`${writtenText} Is there anything else I can help you with?`);
 }
}

exports.dialogflow = async (request, response) => {
 var agent = new WebhookClient({ request, response });

 console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
 console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
  const client = await getSheetsClient();   
 const allBooks = await client.spreadsheets.values.get({
   spreadsheetId: ACCOUNTS_SHEET_ID,
   range: 'Books&Blogs!A:I',
 });
 const allEvents = await client.spreadsheets.values.get({
   spreadsheetId: ACCOUNTS_SHEET_ID,
   range: 'Meetups!A:D',
 });
  books = allBooks.data.values;
 meetups = allEvents.data.values;
 books.shift();
 meetups.shift();

 var intentMap = new Map();
 intentMap.set('Tip Intent', tipIntent);
 intentMap.set('Meetup Intent', meetupIntent);
 agent.handleRequest(intentMap);
};

b130ee596061832c.png

  1. Haz clic en el vínculo Variables de entorno, redes, tiempos de espera y más.

e81c29549f696937.png

  1. Selecciona la cuenta de servicio Dialogflow Integrations.

(De forma predeterminada, usa una cuenta de servicio de App Engine de GAE, pero debería ser la misma que se compartió en Hojas de cálculo de Google en los primeros pasos de este instructivo).

61ecb8f57a6fd21b.png

  1. Antes de implementar la Cloud Function. Cambiaremos una línea de nuestro código en la pestaña index.js. La tercera línea de código:

const ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';

En uno de los primeros pasos, anotamos esta clave en el Bloc de notas. Así que copia y pega este ID en tu código.

  1. Ya estamos listos. Haz clic en el botón Crear. Tomará un momento, porque está implementando tu función sin servidores.

Habilita las entregas en Dialogflow

  1. Vuelve a Dialogflow
  2. Haz clic en Fulfillment en el menú principal.
  3. Habilita el interruptor de Webhook.
  4. Ingresa la URL de la Cloud Function que se copió en el portapapeles.

Por ejemplo: https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow

  1. Haz clic en Guardar.

89dfd437c6689538.png

  1. Probemos el webhook para ver si el código funciona y probamos los flujos directamente en el simulador de Dialogflow.

297e8f7ed1b9e801.png

7. Acciones en Google

Actions on Google es una plataforma de desarrollo para Asistente de Google. Permite el desarrollo de "acciones" por parte de terceros, es decir, applets para Asistente de Google que proporcionan funcionalidad extendida.

Deberás invocar una Acción de Google. Para ello, deberás pedirle a Google que abra una app o hable con ella.

Se abrirá la acción, cambiará la voz y dejarás la opción “nativa” Permiso del Asistente de Google. Es decir, todo lo que le pidas a tu agente a partir de este momento lo debes crear tú. En tu propia acción, no puedes pedirle al Asistente de Google información meteorológica de Google si es lo que quieres. primero debes dejar (cerrar) el alcance de la acción actual (tu app).

Cómo probar tu acción en el simulador de Asistente de Google

Probemos la siguiente conversación:

Usuario

Asistente de Google

"Hey Google, habla con mi app de prueba".

"Obteniendo la versión de prueba de mi aplicación".

Usuario

Tu-nombre-WIV

-

“Hola, soy Anna, la agente virtual de Women in Voice. Puedes pedirme información sobre encuentros, Women in Voice o sugerencias de lectura. ¿Qué te gustaría saber?".

¿Puedo darte una sugerencia para un blog?

“¿Quieres obtener más información sobre chatbots, Voice o Ambos?”

Chatbots

"¡Muy bien, esta es la sugerencia del día! The Article Chatbots And The Challenge Of Invisible Affordances of Cobus Greyling. ¿Quieres otra sugerencia sobre libro o artículo? Además, puedo contarte más sobre las reuniones o lo que hacemos. ¿Cómo puedo ayudarte?".

¿Cuándo es la próxima reunión?

"La próxima reunión será el 29 de abril a las 6:00 p.m. en un Hangout virtual. El tema será un taller en línea: Crea acciones de Google con Dialogflow. Puedes registrarte a través de nuestro boletín informativo. ¿Puedo ayudarte con algo más?".

¿Cuál es la URL de tu sitio web?

"Puedes encontrarnos en www.womeninvoice.com. ¿Puedo hacer algo más por ti?".

No, eso es todo, gracias

"Muy bien. Esperamos verte en una de nuestras reuniones".

  1. Vuelve al simulador de Asistente de Google

Abrir: https://console.actions.google.com

  1. Haz clic en el ícono del micrófono y pregunta lo siguiente:

aa43d7f1568c4d80.png

  • Talk to my test app.
  1. Ahora preguntamos:
  • Can I have a tip for a blog?

Se debería mostrar lo siguiente:

“¿Quieres obtener más información sobre chatbots, Voice o Ambos?”

  • Chatbots

"¡Muy bien, esta es la sugerencia del día! The Article Chatbots And The Challenge Of Invisible Affordances of Cobus Greyling.

¿Quieres otra sugerencia sobre un libro o un artículo? Además, puedo contarte más sobre las reuniones o lo que hacemos. ¿Cómo puedo ayudarte?".

  1. Probemos con otra versión de la misma pregunta:
  • "Yes, I want to read more about Voice"

"¡Muy bien, esta es la sugerencia del día! Libro Diseño de interfaces de usuario de voz: Principios de las experiencias de conversación. ... de Cathy Pearl.

¿Quieres otra sugerencia sobre un libro o un artículo? Además, puedo contarte más sobre las reuniones o lo que hacemos. ¿Cómo puedo ayudarte?".

Ten en cuenta que nunca usaste esta frase de entrenamiento en Dialogflow. Sólo coincidió con el intent correcto.

Además, ten en cuenta que no recibiste una pregunta de seguimiento porque proporcionaste suficiente información para que Dialogflow continúe.

  1. Continúa con Dialogflow con las siguientes frases:
  • What's the URL for your website
  • Bye

a0bd5578d6833c98.png

¿Errores? Revisa los registros.

Cada vez que uses console.log() en el código de tu Cloud Function, se escribirán datos en tus registros de GCP (Stackdriver). Para acceder a estos registros, abre la consola de Cloud > Registro.

En el primer menú desplegable, puedes seleccionar Cloud Function > dialogflow para filtrar tus registros.

8. Felicitaciones

Felicitaciones, creaste tu primera acción del Asistente de Google con Dialogflow.

Como habrás notado, tu acción se estaba ejecutando en modo de prueba, que está vinculado a tu Cuenta de Google. Si quieres acceder en tu dispositivo Nest o en la app de Asistente de Google en tu teléfono iOS o Android, con la misma cuenta También podrías probar tu acción.

Esta es una demostración de taller. Sin embargo, cuando compilas aplicaciones para el Asistente de Google de verdad, puedes enviar tu acción para que se apruebe. Para obtener más información, lee esta guía.

Temas abordados

  • Cómo crear un chatbot con Dialogflow v2
  • Cómo crear entidades personalizadas con Dialogflow
  • Cómo crear una conversación lineal con Dialogflow
  • Cómo configurar entregas de webhook con Dialogflow y Google Cloud Functions
  • Cómo trasladar tu aplicación al Asistente de Google con Actions on Google

¿Qué sigue?

¿Te gustó este codelab? Echa un vistazo a estos excelentes labs.