You are currently viewing Dialogflow 16 – Conectando tu agente con Google Sheets

Dialogflow 16 – Conectando tu agente con Google Sheets

Hola a todos,

A veces lo de tener una base de datos externa puede ser matar moscas a cañonazos. Para una proyecto educativo me han pedido conectar un agente virtual de Dialogflow con una hoja de cálculo, de forma que hay información que va a ser leída de esa hoja.

Si utilizas Google Sheets, hay una API que permite acceder a los datos en las hojas de cálculo, y podremos acceder desde el fulfillment de nuestro agente en Dialogflow.

Lo primero es crear o identificar una hoja existente usando la URL del documento. Es la ristra de caracteres después de /d/

Para acceder a ese documento es necesario autorizar a la API … hay 2 métodos que están documentados en esta página. En este ejemplo voy a utilizar una API key, que es el mecanismo más sencillo y también menos seguro, puesto que tendremos que poner esa API key en el código de nuestro fulfillment.

Para crear la API key tenemos que ir a la consola de GCP en el proyecto en el que corremos nuestro agente de Dialogflow, buscar el apartado de APIs y luego Credenciales. Podemos crear una Service Account nueva o elegir la que ya deberíamos tener creada para “Dialogflow Integrations”:

Seleccionando esa cuenta podemos crear una nueva key en formato JSON, que será descargada a nuestro equipo:

También tenemos que habilitar la API de Sheets en el proyecto con el que estamos trabajando. Buscar “Sheets API” en la barra superior y dadle a “Enable” para esta API:

El siguiente paso es dar permisos a esta cuenta en la hoja de cálculo a la que queremos acceder:

Con esto terminamos con los preparativos, ahora vamos a por el código.

Vamos a utilizar la librería para acceder a las APIs de Google, que incluye la de Sheets, por lo que tenemos que añadirla en nuestro package.json … es la última línea de este ejemplo:

En el código de la función (index.js) tendremos que hacer el correspondiente “require”:

     const {google} = require(‘googleapis’);

Y tenemos que definir una función que realice la lectura de datos de una celda, pasando su fila y columna:

Donde SheetDocument es el identificador del documento que hemos sacado de su URL, y el SheetName es la hoja a la que queremos acceder. Ojo que en castellano se suele utilizar “Hoja 1!”, con un espacio, como nombre por defecto para la primera hoja, pero puede ser cualquier nombre.

La siguiente sección tiene los datos de la API key que hemos descargado en el fichero JSON al generarla, solo necesitamos 2, el client_email y el private_key, dejando el código como sigue:

Lo siguiente es inicializar la autentificación y conexión con Sheets:

Y terminamos la función con el código que hace la lectura, que necesita tener gestión de promesas:

Podéis ver que la lectura se hace accediendo a un rango definido como SheetName+Column+Row … en este caso se lee una sola celda, pero podrías leer un rango de celdas sin mayor problema.

Para llamar a esta función, en un ejemplo muy sencillo haríamos:

Lo normal en vuestro agente será que la fila y la columna las captures como parámetros en el intent, o tengas un “case” para traducir nombres a filas o columnas, pero eso ya os lo dejo a vosotros. Con esto el acceso a la hoja de cálculo debería funcionar, y os recomiendo probarlo antes de empezar a complicarlo con parámetros que llegan desde el intent. 

Recuerda que los logs son tus amigos … en este caso me avisaba de que la API no estaba habilitada, y que tras habilitarla se tarda unos minutos en estar accesible … y puedo dar fe 😀

Saludos

Jamarmu

============================================================

Trabajo para Google Cloud, pero este artículo son ideas y opiniones personales

Esta públicación tiene 2 comentarios

  1. Héctor Salgado de Oñate

    Hola, yo también estoy haciendo un Trabajo de Investigación. Donde pones:
    Para crear la API key tenemos que ir a la consola de GCP en el proyecto en el que corremos nuestro agente de Dialogflow, buscar el apartado de APIs y luego Credenciales. Podemos crear una Service Account nueva o elegir la que ya deberíamos tener creada para “Dialogflow Integrations”:
    Que es la consola GCP?

    1. jamarmu

      Hola,

      Cuando creas un agente nuevo en Dialogflow tiene asociado un proyecto en Google Cloud, el servicio de nube pública de Google.

      Depende de lo que hagas con tu agente, en algunos casos no tienes ni que entrar a la consola de Google Cloud, pero para otros casos, como este, tendrás que aacceder a la consola de Google Cloud bajo el proyecto que se ha creado para tu agente de Dialogflow.

      La consola la tienes accesible en console.cloud.google.com y en la configuración del agente tienes el nombre del proyecto de Cloud asociado.

      Para que muchos de los recursos de Google Cloud funcionen tendrás que dar de alta un método de pago par el proyecto. Al registrarte la primera vez en Google Cloud recibirás un crédito de 300$ para que puedas ir probando.

      Saludos,

      Javier

Deja una respuesta