Questa pagina spiega come creare un componente aggiuntivo di Google Workspace che funzioni in Google Chat utilizzando un servizio HTTP.
Questa guida rapida mostra come creare un servizio HTTP utilizzando i servizi Google Cloud. Per creare l'app Chat, scrivi ed esegui il deployment di una funzione Cloud Run che l'app Chat utilizza per rispondere al messaggio di un utente.
Con un'architettura HTTP, configuri Chat per l'integrazione con Google Cloud o un server on-premise utilizzando HTTP, come mostrato nel diagramma seguente:
Nel diagramma precedente, un utente che interagisce con un'app di chat HTTP ha il seguente flusso di informazioni:
- Un utente invia un messaggio in Chat a un'app di Chat, in un messaggio diretto o in uno spazio di Chat.
- Una richiesta HTTP viene inviata a un server web che è un sistema cloud o on-premise che contiene la logica dell'app Chat.
- Se vuoi, la logica dell'app Chat può integrarsi con i servizi Google Workspace (come Calendar e Fogli), altri servizi Google (come Maps, YouTube e Vertex AI) o altri servizi web (come un sistema di gestione dei progetti o uno strumento di gestione dei ticket).
- Il server web invia una risposta HTTP al servizio dell'app Chat in Chat.
- La risposta viene inviata all'utente.
- Se vuoi, l'app Chat può chiamare l'API Chat per pubblicare messaggi in modo asincrono o eseguire altre operazioni.
Questa architettura ti offre la flessibilità di utilizzare librerie e componenti esistenti già presenti nel tuo sistema, perché queste app di chat possono essere progettate utilizzando linguaggi di programmazione diversi.
Obiettivi
- Configurare l'ambiente.
- Crea ed esegui il deployment di una funzione Cloud Run.
- Configura un componente aggiuntivo di Google Workspace per l'app di Chat.
- Testa l'app.
Prerequisiti
- Un account Google Workspace Business o Enterprise con accesso a Google Chat.
- Un progetto Google Cloud con la fatturazione abilitata. Per verificare che la fatturazione sia attivata per un progetto esistente, consulta Verificare lo stato di fatturazione dei progetti. Per creare un progetto e configurare la fatturazione, consulta Creare un progetto Google Cloud.
Configurare l'ambiente
Prima di utilizzare le API di Google, devi attivarle in un progetto Google Cloud. Puoi attivare una o più API in un singolo progetto Google Cloud.Nella console Google Cloud, abilita l'API Cloud Build, l'API Cloud Functions, l'API Cloud Pub/Sub, l'API Cloud Logging, l'API Artifact Registry e l'API Cloud Run.
Crea ed esegui il deployment di una funzione Cloud Run
Crea e implementa una funzione Cloud Run che genera una scheda Chat con il nome visualizzato e l'immagine dell'avatar del mittente. Quando l'app Chat riceve un messaggio, esegue la funzione e risponde con la scheda.
Per creare ed eseguire il deployment della funzione per la tua app di chat, completa i seguenti passaggi:
Node.js
Nella console Google Cloud, vai alla pagina Cloud Run:
Assicurati che il progetto per l'app Chat sia selezionato.
Fai clic su Scrivi una funzione.
Nella pagina Crea servizio, configura la funzione:
- Nel campo Nome servizio, inserisci
addonchatapp
. - Nell'elenco Regione, seleziona una regione.
- Nell'elenco Runtime, seleziona la versione più recente di Node.js.
- Nella sezione Autenticazione, seleziona Richiedi autenticazione.
- Fai clic su Crea e attendi che Cloud Run crei il servizio. La console ti reindirizza alla scheda Origine.
- Nel campo Nome servizio, inserisci
Nella scheda Origine:
- In Punto di ingresso, elimina il testo predefinito e inserisci
avatarApp
. - Sostituisci i contenuti di
index.js
con il seguente codice:
/** * Google Cloud Run function that responds to messages sent from a * Google Chat space. * * @param {Object} req Request sent from Google Chat space * @param {Object} res Response to send back */ import { http } from '@google-cloud/functions-framework'; http('avatarApp', (req, res) => { if (req.method === 'GET' || !req.body.chat) { return res.send('Hello! This function is meant to be used ' + 'in a Google Chat Space.'); } // Stores the Google Chat event as a variable. const chatMessage = req.body.chat.messagePayload.message; // Replies with the sender's avatar in a card. const displayName = chatMessage.sender.displayName; const avatarUrl = chatMessage.sender.avatarUrl; res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: { text: 'Here\'s your avatar', cardsV2: [{ cardId: 'avatarCard', card: { name: 'Avatar Card', header: { title: `Hello ${displayName}!`, }, sections: [{ widgets: [{ textParagraph: { text: 'Your avatar picture: ' } }, { image: { imageUrl: avatarUrl } }] }] } }] }}}}}); });
- Sostituisci i contenuti di
package.json
con il seguente codice:
{ "name": "avatar-app", "version": "1.0.0", "description": "Google Chat Avatar App", "main": "index.js", "type": "module", "scripts": { "start": "node index.js" }, "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
- Fai clic su Salva e ridistribuisci.
- In Punto di ingresso, elimina il testo predefinito e inserisci
Python
Nella console Google Cloud, vai alla pagina Cloud Run:
Assicurati che il progetto per l'app Chat sia selezionato.
Fai clic su Scrivi una funzione.
Nella pagina Crea servizio, configura la funzione:
- Nel campo Nome servizio, inserisci
addonchatapp
. - Nell'elenco Regione, seleziona una regione.
- Nell'elenco Runtime, seleziona la versione più recente di Python.
- Nella sezione Autenticazione, seleziona Richiedi autenticazione.
- Fai clic su Crea e attendi che Cloud Run crei il servizio. La console ti reindirizza alla scheda Origine.
- Nel campo Nome servizio, inserisci
Nella scheda Origine:
- In Punto di ingresso, elimina il testo predefinito e inserisci
avatar_app
. - Sostituisci i contenuti di
main.py
con il seguente codice:
from typing import Any, Mapping import flask import functions_framework @functions_framework.http def avatar_app(req: flask.Request) -> Mapping[str, Any]: """Google Cloud Run Function that handles requests from Google Chat Args: flask.Request: the request Returns: Mapping[str, Any]: the response """ if req.method == "GET": return "Hello! This function must be called from Google Chat." request_json = req.get_json(silent=True) # Stores the Google Chat event as a variable. chat_message = request_json["chat"]["messagePayload"]["message"] # Replies with the sender's avatar in a card. display_name = chat_message["sender"]["displayName"] avatar_url = chat_message["sender"]["avatarUrl"] return { "hostAppDataAction": { "chatDataAction": { "createMessageAction": { "message": { "text": "Here's your avatar", "cardsV2": [{ "cardId": "avatarCard", "card": { "name": "Avatar Card", "header": { "title": f"Hello {display_name}!" }, "sections": [{ "widgets": [{ "textParagraph": { "text": "Your avatar picture:" } }, { "image": { "imageUrl": avatar_url } }] }] } }] }}}}}
- Fai clic su Salva e ridistribuisci.
- In Punto di ingresso, elimina il testo predefinito e inserisci
Java
Nella console Google Cloud, vai alla pagina Cloud Run:
Assicurati che il progetto per l'app Chat sia selezionato.
Fai clic su Scrivi una funzione.
Nella pagina Crea servizio, configura la funzione:
- Nel campo Nome servizio, inserisci
addonchatapp
. - Nell'elenco Regione, seleziona una regione.
- Nell'elenco Runtime, seleziona la versione più recente di Java.
- Nella sezione Autenticazione, seleziona Richiedi autenticazione.
- Fai clic su Crea e attendi che Cloud Run crei il servizio. La console ti reindirizza alla scheda Origine.
- Nel campo Nome servizio, inserisci
Nella scheda Origine:
- In Punto di ingresso, elimina il testo predefinito e inserisci
AvatarApp
. - Rinomina il file Java predefinito in
src/main/java/gcfv2/AvatarApp.java
. - Sostituisci i contenuti di
AvatarApp.java
con il seguente codice:
import java.util.List; import com.google.api.services.chat.v1.model.CardWithId; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Card; import com.google.api.services.chat.v1.model.GoogleAppsCardV1CardHeader; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Image; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Section; import com.google.api.services.chat.v1.model.GoogleAppsCardV1TextParagraph; import com.google.api.services.chat.v1.model.GoogleAppsCardV1Widget; import com.google.api.services.chat.v1.model.Message; import com.google.cloud.functions.HttpFunction; import com.google.cloud.functions.HttpRequest; import com.google.cloud.functions.HttpResponse; import com.google.gson.Gson; import com.google.gson.JsonObject; public class AvatarApp implements HttpFunction { private static final Gson gson = new Gson(); @Override public void service(HttpRequest request, HttpResponse response) throws Exception { JsonObject body = gson.fromJson(request.getReader(), JsonObject.class); if (request.getMethod().equals("GET") || !body.has("chat")) { response.getWriter().write("Hello! This function is meant to be used " + "in a Google Chat Space.."); return; } // Stores the Google Chat event as a variable. JsonObject chatMessage = body.getAsJsonObject("chat") .getAsJsonObject("messagePayload").getAsJsonObject("message"); // Replies with the sender's avatar in a card. String displayName = chatMessage.getAsJsonObject("sender").get("displayName").getAsString(); String avatarUrl = chatMessage.getAsJsonObject("sender").get("avatarUrl").getAsString(); Message message = createMessage(displayName, avatarUrl); JsonObject createMessageAction = new JsonObject(); createMessageAction.add("message", gson.fromJson(gson.toJson(message), JsonObject.class)); JsonObject chatDataAction = new JsonObject(); chatDataAction.add("createMessageAction", createMessageAction); JsonObject hostAppDataAction = new JsonObject(); hostAppDataAction.add("chatDataAction", chatDataAction); JsonObject dataActions = new JsonObject(); dataActions.add("hostAppDataAction", hostAppDataAction); response.getWriter().write(gson.toJson(dataActions)); } Message createMessage(String displayName, String avatarUrl) { GoogleAppsCardV1CardHeader cardHeader = new GoogleAppsCardV1CardHeader(); cardHeader.setTitle(String.format("Hello %s!", displayName)); GoogleAppsCardV1TextParagraph textParagraph = new GoogleAppsCardV1TextParagraph(); textParagraph.setText("Your avatar picture: "); GoogleAppsCardV1Widget avatarWidget = new GoogleAppsCardV1Widget(); avatarWidget.setTextParagraph(textParagraph); GoogleAppsCardV1Image image = new GoogleAppsCardV1Image(); image.setImageUrl(avatarUrl); GoogleAppsCardV1Widget avatarImageWidget = new GoogleAppsCardV1Widget(); avatarImageWidget.setImage(image); GoogleAppsCardV1Section section = new GoogleAppsCardV1Section(); section.setWidgets(List.of(avatarWidget, avatarImageWidget)); GoogleAppsCardV1Card card = new GoogleAppsCardV1Card(); card.setName("Avatar Card"); card.setHeader(cardHeader); card.setSections(List.of(section)); CardWithId cardWithId = new CardWithId(); cardWithId.setCardId("avatarCard"); cardWithId.setCard(card); Message message = new Message(); message.setText("Here's your avatar"); message.setCardsV2(List.of(cardWithId)); return message; } }
- In Punto di ingresso, elimina il testo predefinito e inserisci
Sostituisci i contenuti di
pom.xml
con il seguente codice:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.google.chat</groupId> <artifactId>avatar-app</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.target>17</maven.compiler.target> <maven.compiler.source>17</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>com.google.cloud.functions</groupId> <artifactId>functions-framework-api</artifactId> <version>1.0.4</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-chat --> <dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-chat</artifactId> <version>v1-rev20230115-2.0.0</version> </dependency> </dependencies> <!-- Required for Java functions in the inline editor --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <excludes> <exclude>.google/</exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
- Fai clic su Salva e ridistribuisci.
Viene visualizzata la pagina dei dettagli del servizio Cloud Run. Attendi il deployment della funzione.
Configurare il componente aggiuntivo
Dopo aver eseguito il deployment della funzione Cloud Run, segui questi passaggi per creare un componente aggiuntivo ed eseguire il deployment dell'app Google Chat:
Nella console Google Cloud, vai alla pagina Cloud Run:
Assicurati che sia selezionato il progetto per cui hai attivato Cloud Run.
Nell'elenco delle funzioni, fai clic su addonchatapp.
Nella pagina Dettagli servizio, copia l'URL della funzione. L'URL termina con
run.app
.Nel campo di ricerca di Google Cloud, cerca "API Google Chat", poi fai clic su API Google Chat e poi su Gestisci.
Fai clic su Configurazione e configura l'app Google Chat:
- In Nome dell'app, inserisci
Add-on Chat app
. - In URL avatar, inserisci
https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png
. - In Descrizione, inserisci
Add-on Chat app
. - In Funzionalità, seleziona Partecipa a spazi e conversazioni di gruppo.
- In Impostazioni di connessione, seleziona URL endpoint HTTP.
- Copia l'indirizzo email del service account. Ti servirà questo indirizzo email quando autorizzi il componente aggiuntivo a richiamare la funzione.
- In Trigger, seleziona Utilizza un URL dell'endpoint HTTP comune per tutti i trigger e incolla l'URL per il trigger della funzione Cloud Run nella casella.
- In Visibilità, seleziona Rendi disponibile questa app Google Chat a persone e gruppi specifici nel tuo dominio e inserisci il tuo indirizzo email.
- In Log, seleziona Errori di log in Logging.
- In Nome dell'app, inserisci
Fai clic su Salva.
Dopodiché, autorizza l'app Chat a richiamare la funzione Cloud Run.
Autorizza Google Chat a richiamare la funzione
Per autorizzare il componente aggiuntivo Google Workspace a richiamare la tua funzione, aggiungi il service account del componente aggiuntivo Google Workspace con il ruolo Cloud Run Service Invoker.
Nella console Google Cloud, vai alla pagina Cloud Run:
Nell'elenco dei servizi Cloud Run, seleziona la casella di controllo accanto alla funzione di ricezione. Non fare clic sulla funzione stessa.
Fai clic su Autorizzazioni. Si apre il riquadro Autorizzazioni.
Fai clic su Aggiungi entità.
In Nuove entità, inserisci l'indirizzo email dell'account di servizio del componente aggiuntivo Google Workspace associato alla tua app Chat.
L'indirizzo email del service account si trova nella pagina di configurazione dell'API Chat, in Impostazioni di connessione > URL endpoint HTTP > Email service account:
In Seleziona un ruolo, seleziona Cloud Run > Cloud Run Service Invoker.
Fai clic su Salva.
L'app Chat è pronta a ricevere e rispondere ai messaggi su Chat.
Testare l'app Chat
Per testare l'app Chat, apri uno spazio di messaggi diretti con l'app Chat e invia un messaggio:
Apri Google Chat utilizzando l'account Google Workspace che hai fornito quando ti sei aggiunto come tester attendibile.
- Fai clic su Nuova chat.
- Nel campo Aggiungi una o più persone, digita il nome della tua app Chat.
Seleziona l'app di chat dai risultati. Si apre un messaggio diretto.
- Nel nuovo messaggio diretto con l'app, digita
Hello
e premienter
.
Il messaggio dell'app Chat contiene una scheda che mostra il nome e l'immagine dell'avatar del mittente, come mostrato nell'immagine seguente:
Per aggiungere tester attendibili e scoprire di più sui test delle funzionalità interattive, vedi Testare le funzionalità interattive per le app Google Chat.
Risoluzione dei problemi
Quando un'app Google Chat o una scheda restituisce un errore, l'interfaccia di Chat mostra il messaggio "Si è verificato un problema". o "Impossibile elaborare la tua richiesta". A volte l'interfaccia utente di Chat non mostra alcun messaggio di errore, ma l'app o la scheda Chat produce un risultato imprevisto; ad esempio, un messaggio della scheda potrebbe non essere visualizzato.
Anche se nell'interfaccia utente di Chat potrebbe non essere visualizzato un messaggio di errore, sono disponibili messaggi di errore descrittivi e dati di log per aiutarti a correggere gli errori quando la registrazione degli errori per le app di chat è attivata. Per assistenza nella visualizzazione, nel debug e nella correzione degli errori, consulta Risolvere i problemi e correggere gli errori di Google Chat.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, ti consigliamo di eliminare il progetto Cloud.
- Nella console Google Cloud, vai alla pagina Gestisci risorse. Fai clic su Menu > IAM e amministrazione > Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina .
- Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.