Invia un messaggio a Google Chat utilizzando l'API REST (l'esempio di Google non funziona nel 2020)

Aug 19 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.botl'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.botambito non esiste più:
    • Messaggi asincroni utilizzando Apps Script
  • Queste soluzioni StackOverflow utilizzano tutte lo stesso chat.botambito 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' chatambito (ovvero googleapis.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

5 RafaGuillermo Aug 20 2020 at 09:25

Risposta:

Posso confermare che lo chat.botscopo 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.botambito 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 projectnella parte superiore della pagina e fai clic NEW PROJECT.
    • Dovrai fornire un Project name, gli altri campi dovrebbero essere compilati automaticamente.
  • 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 su VIEW.
  • Fare clic sull'icona in alto a sinistra e seguire la APIs & Services > Credentialsvoce 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 da CONTINUEe infine DONE.

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 Accountssezione, fai clic sul tuo account di servizio appena creato. Questo sarà chiamato[email protected]
  • Clic ADD KEY > Create new key
  • Mantieni JSONselezionato e premi CREATE.
    • 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 & Servicese selezionare Library.
  • Cerca Hangouts Chat APIe 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_keyvalore (quello che inizia con -----BEGIN PRIVATE KEY-----e incollalo nel valore di SERVICE_ACCOUNT_PRIVATE_KEYnel progetto Apps Script.
    • Copia anche il client_emailvalore dal file delle credenziali e incollalo nel SERVICE_ACCOUNT_EMAILprogetto Apps Script.

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 nella Add a librarycasella
    • L'ID dello script è 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF
    • Questo e il resto della libreria sono disponibili nel repository GitHub di OAuth2 per Apps 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 > Settingsvoce di menu.
  • Copia il Project numberdefinito in questa pagina.
  • Nel tuo progetto Apps Script, segui la Resources > Cloud Platform project...voce di menu e incolla il numero del progetto nella Enter Project Number herefinestra di dialogo.
  • Fare clic su Set Project.

Configurazione del manifesto del progetto: per utilizzare un chat bot in Apps Script, è necessario includere la chatchiave 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 premi Createnella 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 IDaccanto alla distribuzione appena creata e copia il file Deployment 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 URLe Description. Configurare le impostazioni della funzionalità in modo che funzioni nelle stanze.
  • In Connection Settings, seleziona Apps Script projecte 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 triggersvoce 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