Invia un messaggio a Google Chat utilizzando l'API REST (l'esempio di Google non funziona nel 2020)
Da dove comincio ... (Google, perché devi ferirmi in questo modo?)
Informazioni di sfondo
Ho creato un nuovo chatbot utilizzando Google Apps Script , che riceve i messaggi dagli utenti in Google Chat e risponde in modo sincrono con un singolo messaggio (ogni messaggio può avere solo una risposta dal chatbot).
Ora ho bisogno di un modo per inviare messaggi asincroni in modo che il bot possa inviare messaggi da solo o inviare più risposte separate alla volta.
Il problema
L' API REST di Google Chat ha un metodo per creare un messaggio in modo asincrono , ma questo metodo ( spaces.messages.create
) non funziona! Non ci sono esempi di lavoro di questo metodo dal 2020.
Ecco il codice di esempio di Google per la creazione di un messaggio utilizzando l'API REST.
Il problema è che nel loro esempio, SCOPE
è impostato su un URL che non esce più :
var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
Se vai a quell'URL, vedrai questo errore 404:
Not Found
Error 404
Inoltre, se controlli l' elenco degli ambiti OAuth2 disponibili , noterai che non ci sono ambiti relativi a Hangouts o Chat e non viene menzionato chat.bot
l'ambito utilizzato nel codice di esempio.
Cosa ho provato?
Ho letto tutte le domande su StackOverflow relative a questa API di chat, oltre a ogni tutorial per l'API REST.
- Il tutorial ufficiale di Google Apps Script non funziona perché l'
chat.bot
ambito non esiste più:- Messaggi asincroni utilizzando Apps Script
- Queste soluzioni StackOverflow utilizzano tutte lo stesso
chat.bot
ambito inesistente :- Invia messaggio privato senza eventi
- Rispondi in modo asincrono nel nuovo Hangout Chat utilizzando l'API rest
- 404 risposta del server troncata su Apps Script Bot
- Questo utente StackOverflow afferma di essere stato in grado di utilizzare l'
chat
ambito (ovverogoogleapis.com/auth/chat
), ma neanche tale ambito:- Errore 400: invalid_scope
In conclusione
Come inviare messaggi da Google Apps Script a Google Chat utilizzando l' API REST di Google Chat ?
Sembra che la documentazione di Google sia obsoleta e nessuno degli esempi per questa API funziona a partire da agosto 2020. O non sono consapevoli del fatto che la loro API REST non funziona o hanno deprecato l'API REST senza avvisare nessuno.
Risposte
Risposta:
Posso confermare che lo chat.bot
scopo esiste davvero. Per configurare un chat bot con l'API REST, è necessario utilizzare un account di servizio .
Maggiori informazioni:
Come da documentazione collegata allo sviluppo di bot con Apps Script , per l'invio di messaggi asincroni al trigger:
... l'unico modo per ottenere ciò attualmente è tramite l'API HTTP esterna (vedere la documentazione ). Ciò richiede l'uso di un account del servizio cloud (consulta la documentazione) tramite la libreria OAuth2 per Apps Script .
Ciò significa che devi prima configurare un account di servizio nella console GCP in modo che l' chat.bot
ambito possa essere utilizzato per questi messaggi. L'intero processo può essere piuttosto arduo per chi non lo sapesse, quindi fornirò i passaggi dall'inizio alla fine qui.
Il processo:
Creazione di un account di servizio:
- Accedi alla Google Cloud Console e crea un nuovo progetto GCP. Premi
Select a project
nella parte superiore della pagina e fai clicNEW PROJECT
.- Dovrai fornire un
Project name
, gli altri campi dovrebbero essere compilati automaticamente.
- Dovrai fornire un
- Premere
CREATE
: un nuovo pop-up apparirà in alto a destra dello schermo a conferma della creazione di un nuovo progetto. Una volta caricato, puoi fare clic suVIEW
. - Fare clic
☰
sull'icona in alto a sinistra e seguire laAPIs & Services > Credentials
voce di menu. - Nella parte superiore di questa pagina, fai clic su
+ CREATE CREDENTIALS > Service Account
.- Assegnare un nome e una descrizione all'account di servizio e premere
CREATE
, seguito daCONTINUE
e infineDONE
.
- Assegnare un nome e una descrizione all'account di servizio e premere
Il tuo account di servizio è ora stato creato.
Creazione delle credenziali dell'account di servizio:
Saranno necessari per il codice fornito nell'esempio dalla pagina Sviluppo di bot con Apps Script .
- Dopo aver creato l'account di servizio, verrai reindirizzato all'elenco delle credenziali che puoi utilizzare per il progetto GCP. Nella
Service Accounts
sezione, fai clic sul tuo account di servizio appena creato. Questo sarà chiamato[email protected]
- Clic
ADD KEY > Create new key
- Mantieni
JSON
selezionato e premiCREATE
.- Questo avvierà un download di un file delle credenziali che dovrai usare per accedere all'API come questo account di servizio. NON PERDERE O CONDIVIDERE QUESTO FILE. In caso di smarrimento, sarà necessario eliminare e creare nuove credenziali per questo account.
Abilitazione dell'API Hangouts Chat:
- Tornare a
☰ > APIs & Services
e selezionareLibrary
. - Cerca
Hangouts Chat API
e fai clic sull'unico risultato. - Fare clic su
ENABLE
. Ciò abiliterà l'API per il tuo progetto.
Nota: non chiudere ancora questa scheda! In seguito dovremo comunque utilizzare la console GCP.
Configurazione del progetto Apps Script:
- Crea un nuovo progetto Apps Script.
- Ora puoi copiare e incollare l'esempio dalla pagina dei messaggi asincroni nel nuovo progetto.
- Apri il file delle credenziali che hai scaricato dalla console GCP.
- Copia il
private_key
valore (quello che inizia con-----BEGIN PRIVATE KEY-----
e incollalo nel valore diSERVICE_ACCOUNT_PRIVATE_KEY
nel progetto Apps Script. - Copia anche il
client_email
valore dal file delle credenziali e incollalo nelSERVICE_ACCOUNT_EMAIL
progetto Apps Script.
- Copia il
Per utilizzare la libreria OAuth2 di Google Apps Script come nell'esempio, dovrai aggiungere la libreria al progetto utilizzando l'ID dello script della libreria.
- Nell'interfaccia utente del progetto Apps Script, segui la
Resources > Libraries...
voce di menu e copia e incolla l'ID dello script OAuth2 nellaAdd a library
casella- L'ID dello script è
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
- Questo e il resto della libreria sono disponibili nel repository GitHub di OAuth2 per Apps Script
- L'ID dello script è
- Assicurati di selezionare l'ultima versione stabile della libreria (al momento della scrittura, questa è la versione 38)
- Premere
Save
.
Successivamente, dovrai collegare il progetto Apps Script al progetto GCP creato in precedenza.
- Torna alla scheda Console GCP e segui la
☰ > IAM & Admin > Settings
voce di menu. - Copia il
Project number
definito in questa pagina. - Nel tuo progetto Apps Script, segui la
Resources > Cloud Platform project...
voce di menu e incolla il numero del progetto nellaEnter Project Number here
finestra di dialogo. - Fare clic su
Set Project
.
Configurazione del manifesto del progetto: per utilizzare un chat bot in Apps Script, è necessario includere la chat
chiave nel manifesto del progetto.
- Nell'interfaccia utente di Apps Script, fare clic su
View > Show manifest file
. - Dopo l'ultima coppia chiave-valore, aggiungi quanto segue:
"chat": {
"addToSpaceFallbackMessage": "Thank you for adding me!"
}
Il tuo file manifest completo ora avrà un aspetto simile a questo:
{
"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!"
}
}
- Salva il tuo progetto.
Fasi finali:
Hai quasi finito! Ora, dovrai distribuire il bot da manifest, impostare la configurazione in GCP e impostare il trigger che effettuerà la chiamata effettiva.
Distribuzione del bot:
- Nell'interfaccia utente di Apps Script, vai a
Publish > Deploy from manifest...
e premiCreate
nella finestra di dialogo appena aperta.- Nota: non è possibile utilizzare la distribuzione Head se si desidera utilizzarla per l'intero dominio, quindi è necessario creare una nuova distribuzione.
- Assegnare un nome e una descrizione alla distribuzione e premere
Save
. - Una volta terminato il salvataggio, premi
Get ID
accanto alla distribuzione appena creata e copia il fileDeployment ID
.
Impostazione della configurazione GCP:
- Tornando alla console Cloud, dovrai ora navigare verso
☰ > APIs & Services > Dashboard
. - Nell'elenco delle API abilitate nella parte inferiore di questa pagina, seleziona il file
Hangouts Chat API
. - Nel menu a sinistra, seleziona
Configuration
. - Imposta la configurazione del tuo bot. Sarà necessario fornire una
Bot name
,Avatar URL
eDescription
. Configurare le impostazioni della funzionalità in modo che funzioni nelle stanze. - In
Connection Settings
, selezionaApps Script project
e incolla il tuo ID di distribuzione dalla sezione precedente. - Assegna al tuo bot di Apps Script le autorizzazioni pertinenti e premi
Save
.
The Elusive Trigger:
L'unica cosa che devi fare ora è impostare il trigger. Questa operazione viene eseguita come un normale trigger di Apps Script, dalla
Edit > Current project's triggers
voce di menu in Apps Script. Per completare l'esempio, fare clic sul pulsante + Aggiungi trigger in basso a destra e configurare le impostazioni del trigger come segue:Scegli quale funzione eseguire:
onTrigger
Scegli quale distribuzione eseguire: Head
Seleziona l'origine dell'evento: basato sul tempo
Seleziona il tipo di trigger basato sul tempo:
Minutes timer
Seleziona intervallo minuto:
Every minute
E premi Salva.
E hai finito! Questo bot creato ora pubblicherà in tutte le stanze che si trova nell'ora corrente, ogni minuto.
Spero che questa spiegazione ti sia utile!
Riferimenti:
- Account di servizio | Documentazione Cloud IAM
- Capire gli account di servizio | Documentazione Cloud IAM
- Sviluppo di bot con Apps Script | API di Google Chat | Google Developers
- Messaggi avviati da bot - Creazione di nuovi bot | API di Google Chat | Google Developers
- GitHub - gsuitedevs / apps-script-oauth2: una libreria OAuth2 per Google Apps Script.
- Google Cloud Console