Enviar un mensaje a Google Chat usando la API REST (el ejemplo de Google no funciona en 2020)

Aug 19 2020

Por dónde empiezo ... (Google, ¿por qué me tienes que lastimar de esta manera?)

Información de fondo

He creado un nuevo chatbot con Google Apps Script , que recibe mensajes de los usuarios en el chat de Google y responde sincrónicamente con un solo mensaje (cada mensaje solo puede tener una respuesta del chatbot).

Ahora necesito una forma de enviar mensajes asincrónicos para que el bot pueda enviar mensajes por sí mismo o enviar varias respuestas separadas a la vez.

El problema

La API REST de Google Chat tiene un método para crear un mensaje de forma asincrónica , ¡ pero este método ( spaces.messages.create) no funciona! No hay ejemplos prácticos de este método a partir de 2020.

Aquí está el código de ejemplo de Google para crear un mensaje usando la API REST.

El problema es que en su ejemplo, SCOPEse establece en una URL que ya no existe :

var SCOPE = 'https://www.googleapis.com/auth/chat.bot';

Si navega a esa URL, verá este error 404:

Not Found
Error 404

Además, si comprueba la lista de ámbitos de OAuth2 disponibles , notará que no hay ámbitos relacionados con Hangouts o Chat, y no se menciona chat.botel ámbito que se utilizó en el código de ejemplo.

¿Qué he probado?

He leído todas las preguntas de StackOverflow relacionadas con esta API de chat, además de todos los tutoriales de la API REST.

  • El tutorial oficial de Apps Script de Google no funciona porque el chat.botalcance ya no existe:
    • Mensajes asíncronos con Apps Script
  • Todas estas soluciones StackOverflow hacen uso del mismo chat.botalcance inexistente :
    • Enviar mensaje privado sin evento
    • Responda de forma asincrónica en el nuevo Hangout Chat utilizando la API de descanso
    • Respuesta de servidor truncada 404 en Apps Script Bot
  • Este usuario de StackOverflow dice que pudieron usar el chatalcance (es decir googleapis.com/auth/chat), pero ese alcance tampoco existe:
    • Error 400: alcance_ inválido

En conclusión

¿Cómo enviar mensajes desde Google Apps Script a Google Chat usando la API REST de Google Chat ?

Parece que la documentación de Google está desactualizada, y ninguno de los ejemplos de esta API funciona en agosto de 2020. O bien no saben que su API REST no funciona o desaprobaron la API REST sin decírselo a nadie.

Respuestas

5 RafaGuillermo Aug 20 2020 at 09:25

Responder:

Puedo confirmar que el chat.botalcance sí existe. Para configurar un bot de chat con la API REST, debe usar una cuenta de servicio .

Más información:

Según la documentación que vinculó en Desarrollo de bots con Apps Script , para enviar mensajes asíncronos en el disparador:

... la única forma de lograr esto actualmente es a través de la API HTTP externa (ver documentación ). Esto requiere el uso de una cuenta de servicio en la nube (ver documentación) a través de la biblioteca OAuth2 para Apps Script .

Esto significa que primero debes configurar una cuenta de servicio en la consola de GCP para que el chat.botalcance se pueda usar para estos mensajes. Todo el proceso puede ser bastante arduo para los no iniciados, por lo que proporcionaré los pasos de principio a fin aquí.

El proceso:

Crear una cuenta de servicio:

  • Navegue a Google Cloud Console y cree un nuevo proyecto de GCP. Presiona Select a projecten la parte superior de la página y haz clic NEW PROJECT.
    • Deberá proporcionar un Project name, los otros campos deben completarse automáticamente.
  • Presione CREATE: aparecerá una nueva ventana emergente en la parte superior derecha de la pantalla que confirma que se está creando un nuevo proyecto. Una vez cargado, puede hacer clic VIEW.
  • Haga clic en el icono en la parte superior izquierda y siga el APIs & Services > Credentialselemento del menú.
  • En la parte superior de esta página, haga clic en + CREATE CREDENTIALS > Service Account.
    • Dé a la cuenta de servicio un nombre y una descripción, y presione CREATE, seguido de CONTINUE, y finalmente DONE.

Se ha creado su cuenta de servicio.

Creación de credenciales de cuenta de servicio:

Estos serán necesarios para el código proporcionado en el ejemplo de la página Desarrollo de bots con Apps Script .

  • Después de crear la cuenta de servicio, se le redirigirá a la lista de credenciales que puede usar para el proyecto de GCP. En la Service Accountssección, haga clic en su cuenta de servicio recién creada. Esto se llamará[email protected]
  • Hacer clic ADD KEY > Create new key
  • Mantenga JSONseleccionado y presione CREATE.
    • Esto iniciará la descarga de un archivo de credenciales que deberá utilizar para acceder a la API como esta cuenta de servicio. NO PIERDA NI COMPARTE ESTE ARCHIVO. Si se pierde, deberá eliminar y crear nuevas credenciales para esta cuenta.

Habilitación de la API de Hangouts Chat:

  • Volviendo a ☰ > APIs & Servicesy seleccione Library.
  • Busque Hangouts Chat APIy haga clic en el único resultado.
  • Haga clic en ENABLE. Esto habilitará la API para su proyecto.

Nota: ¡No cierre esta pestaña todavía! Seguiremos necesitando utilizar la consola de GCP más adelante.

Configuración del proyecto de Apps Script:

  • Cree un nuevo proyecto de Apps Script.
  • Ahora, puede copiar y pegar el ejemplo de la página de mensajes Async en el nuevo proyecto.
  • Abra ese archivo de credenciales que descargó de la consola de GCP.
    • Copie el private_keyvalor (el que comienza con -----BEGIN PRIVATE KEY-----y péguelo en el valor de SERVICE_ACCOUNT_PRIVATE_KEYen el proyecto de Apps Script.
    • También copie el client_emailvalor del archivo de credenciales y péguelo en el SERVICE_ACCOUNT_EMAILproyecto de Apps Script.

Para utilizar la biblioteca de Google Apps Script OAuth2 como en el ejemplo, deberá agregar la biblioteca al proyecto con el ID de secuencia de comandos de la biblioteca.

  • En la interfaz de usuario del proyecto de Apps Script, siga el Resources > Libraries...elemento del menú y copie y pegue el ID de la secuencia de comandos de OAuth2 en el Add a librarycuadro
    • El ID del script es 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
    • Esto y el resto de la biblioteca se pueden encontrar en el repositorio de GitHub de OAuth2 para Apps Script.
  • Asegúrese de seleccionar la última versión estable de la biblioteca (al momento de escribir, esta es la versión 38)
  • Presione Save.

A continuación, deberá vincular el proyecto de Apps Script al proyecto de GCP que creó anteriormente.

  • Vuelve a la pestaña de GCP Console y sigue el ☰ > IAM & Admin > Settingselemento del menú.
  • Copie lo Project numberdefinido en esta página.
  • En su proyecto de Apps Script, siga el Resources > Cloud Platform project...elemento del menú y pegue el número del proyecto en el Enter Project Number herecuadro de diálogo.
  • Haga clic en Set Project.

Configuración del manifiesto del proyecto: para utilizar un bot de chat en Apps Script, debe incluir la chatclave en el manifiesto del proyecto.

  • En la interfaz de usuario de Apps Script, haga clic en View > Show manifest file.
  • Después del último par clave-valor, agregue lo siguiente:
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }

Su archivo de manifiesto completo ahora se verá así:

{
  "timeZone": "Europe/Paris",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Drive",
      "serviceId": "drive",
      "version": "v2"
    }],
    "libraries": [{
      "userSymbol": "OAuth2",
      "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF",
      "version": "38"
    }]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }
}
  • Guarde su proyecto.

Pasos finales:

¡Ya casi terminas! Ahora, deberá eliminar el bot del manifiesto, configurar la configuración en GCP y configurar el activador que realizará la llamada real.

Implementando el bot:

  • En la interfaz de usuario de Apps Script, vaya Publish > Deploy from manifest...y presione Createen el cuadro de diálogo recién abierto.
    • Nota: No puede utilizar la implementación de Head si desea utilizarla para todo su dominio, por lo que debe crear una nueva implementación.
  • Asigne un nombre y una descripción a la implementación y presione Save.
  • Una vez que esto haya terminado de guardar, presione Get IDjunto a la implementación que acaba de crear y copie el archivo Deployment ID.

Configurar la configuración de GCP:

  • Volviendo a la consola en la nube, ahora deberá navegar a ☰ > APIs & Services > Dashboard.
  • En la lista de API habilitadas en la parte inferior de esta página, seleccione Hangouts Chat API.
  • En el menú de la izquierda, seleccione Configuration.
  • Configure su bot. Usted tendrá que proporcionar una Bot name, Avatar URLy Description. Configure los ajustes de funcionalidad para que funcione en las habitaciones.
  • En Connection Settings, seleccione Apps Script projecty pegue su ID de implementación de la sección anterior.
  • Otorgue a su bot de Apps Script los permisos pertinentes y presione Save.

El desencadenante esquivo:

  • Lo único que debe hacer ahora es configurar su disparador. Esto se hace como un activador normal de Apps Script, desde el Edit > Current project's triggerselemento de menú en Apps Script. Para completar el ejemplo, haga clic en el botón + Agregar activador en la parte inferior derecha y configure los ajustes del activador de la siguiente manera:

  • Elija qué función ejecutar: onTrigger

  • Elija qué implementación debe ejecutarse: Head

  • Seleccione la fuente del evento: impulsado por el tiempo

  • Seleccione el tipo de disparador basado en el tiempo: Minutes timer

  • Seleccionar intervalo de minutos: Every minute

Y presione guardar.

¡Y tu estas listo! Este bot creado ahora publicará en todas las salas que se encuentra en el tiempo actual, cada minuto.

¡Espero que esta explicación te sea útil!

Referencias:

  • Cuentas de servicio | Documentación de Cloud IAM
  • Comprender las cuentas de servicio | Documentación de Cloud IAM
  • Desarrollo de bots con Apps Script | API de chat de Google | Desarrolladores de Google
  • Mensajes iniciados por bot: creación de nuevos bots | API de chat de Google | Desarrolladores de Google
  • GitHub - gsuitedevs / apps-script-oauth2: una biblioteca OAuth2 para Google Apps Script.

  • Consola de Google Cloud