Enviar un mensaje a Google Chat usando la API REST (el ejemplo de Google no funciona en 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, SCOPE
se 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.bot
el á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.bot
alcance ya no existe:- Mensajes asíncronos con Apps Script
- Todas estas soluciones StackOverflow hacen uso del mismo
chat.bot
alcance 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
chat
alcance (es decirgoogleapis.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
Responder:
Puedo confirmar que el chat.bot
alcance 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.bot
alcance 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 project
en la parte superior de la página y haz clicNEW PROJECT
.- Deberá proporcionar un
Project name
, los otros campos deben completarse automáticamente.
- Deberá proporcionar un
- 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 clicVIEW
. - Haga clic en el
☰
icono en la parte superior izquierda y siga elAPIs & Services > Credentials
elemento 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 deCONTINUE
, y finalmenteDONE
.
- Dé a la cuenta de servicio un nombre y una descripción, y presione
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 Accounts
sección, haga clic en su cuenta de servicio recién creada. Esto se llamará[email protected]
- Hacer clic
ADD KEY > Create new key
- Mantenga
JSON
seleccionado y presioneCREATE
.- 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 & Services
y seleccioneLibrary
. - Busque
Hangouts Chat API
y 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_key
valor (el que comienza con-----BEGIN PRIVATE KEY-----
y péguelo en el valor deSERVICE_ACCOUNT_PRIVATE_KEY
en el proyecto de Apps Script. - También copie el
client_email
valor del archivo de credenciales y péguelo en elSERVICE_ACCOUNT_EMAIL
proyecto de Apps Script.
- Copie el
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 elAdd a library
cuadro- 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.
- El ID del script es
- 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 > Settings
elemento del menú. - Copie lo
Project number
definido 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 elEnter Project Number here
cuadro 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 chat
clave 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 presioneCreate
en 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 ID
junto a la implementación que acaba de crear y copie el archivoDeployment 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 URL
yDescription
. Configure los ajustes de funcionalidad para que funcione en las habitaciones. - En
Connection Settings
, seleccioneApps Script project
y 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 triggers
elemento 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