Creare un'app Google Chat HTTP

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:

Architettura di un'app di chat che utilizza un servizio web in un server on-premise.

Nel diagramma precedente, un utente che interagisce con un'app di chat HTTP ha il seguente flusso di informazioni:

  1. Un utente invia un messaggio in Chat a un'app di Chat, in un messaggio diretto o in uno spazio di Chat.
  2. Una richiesta HTTP viene inviata a un server web che è un sistema cloud o on-premise che contiene la logica dell'app Chat.
  3. 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).
  4. Il server web invia una risposta HTTP al servizio dell'app Chat in Chat.
  5. La risposta viene inviata all'utente.
  6. 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

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.

    Abilita le API

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

  1. Nella console Google Cloud, vai alla pagina Cloud Run:

    Vai a Cloud Run

    Assicurati che il progetto per l'app Chat sia selezionato.

  2. Fai clic su Scrivi una funzione.

  3. Nella pagina Crea servizio, configura la funzione:

    1. Nel campo Nome servizio, inserisci addonchatapp.
    2. Nell'elenco Regione, seleziona una regione.
    3. Nell'elenco Runtime, seleziona la versione più recente di Node.js.
    4. Nella sezione Autenticazione, seleziona Richiedi autenticazione.
    5. Fai clic su Crea e attendi che Cloud Run crei il servizio. La console ti reindirizza alla scheda Origine.
  4. Nella scheda Origine:

    1. In Punto di ingresso, elimina il testo predefinito e inserisci avatarApp.
    2. 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 }
                        }]
                    }]
                }
            }]
        }}}}});
    });
    
    1. 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"
      }
    }
    
    1. Fai clic su Salva e ridistribuisci.

Python

  1. Nella console Google Cloud, vai alla pagina Cloud Run:

    Vai a Cloud Run

    Assicurati che il progetto per l'app Chat sia selezionato.

  2. Fai clic su Scrivi una funzione.

  3. Nella pagina Crea servizio, configura la funzione:

    1. Nel campo Nome servizio, inserisci addonchatapp.
    2. Nell'elenco Regione, seleziona una regione.
    3. Nell'elenco Runtime, seleziona la versione più recente di Python.
    4. Nella sezione Autenticazione, seleziona Richiedi autenticazione.
    5. Fai clic su Crea e attendi che Cloud Run crei il servizio. La console ti reindirizza alla scheda Origine.
  4. Nella scheda Origine:

    1. In Punto di ingresso, elimina il testo predefinito e inserisci avatar_app.
    2. 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 }
                        }]
                    }]
                }
            }]
        }}}}}
    
    1. Fai clic su Salva e ridistribuisci.

Java

  1. Nella console Google Cloud, vai alla pagina Cloud Run:

    Vai a Cloud Run

    Assicurati che il progetto per l'app Chat sia selezionato.

  2. Fai clic su Scrivi una funzione.

  3. Nella pagina Crea servizio, configura la funzione:

    1. Nel campo Nome servizio, inserisci addonchatapp.
    2. Nell'elenco Regione, seleziona una regione.
    3. Nell'elenco Runtime, seleziona la versione più recente di Java.
    4. Nella sezione Autenticazione, seleziona Richiedi autenticazione.
    5. Fai clic su Crea e attendi che Cloud Run crei il servizio. La console ti reindirizza alla scheda Origine.
  4. Nella scheda Origine:

    1. In Punto di ingresso, elimina il testo predefinito e inserisci AvatarApp.
    2. Rinomina il file Java predefinito in src/main/java/gcfv2/AvatarApp.java.
    3. 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;
        }
    }
    
  5. 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>
    
    1. 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:

  1. Nella console Google Cloud, vai alla pagina Cloud Run:

    Vai a Cloud Run

    Assicurati che sia selezionato il progetto per cui hai attivato Cloud Run.

  2. Nell'elenco delle funzioni, fai clic su addonchatapp.

  3. Nella pagina Dettagli servizio, copia l'URL della funzione. L'URL termina con run.app.

  4. Nel campo di ricerca di Google Cloud, cerca "API Google Chat", poi fai clic su API Google Chat e poi su Gestisci.

    Vai all'API Chat

  5. Fai clic su Configurazione e configura l'app Google Chat:

    1. In Nome dell'app, inserisci Add-on Chat app.
    2. In URL avatar, inserisci https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png.
    3. In Descrizione, inserisci Add-on Chat app.
    4. In Funzionalità, seleziona Partecipa a spazi e conversazioni di gruppo.
    5. In Impostazioni di connessione, seleziona URL endpoint HTTP.
    6. Copia l'indirizzo email del service account. Ti servirà questo indirizzo email quando autorizzi il componente aggiuntivo a richiamare la funzione.
    7. 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.
    8. In Visibilità, seleziona Rendi disponibile questa app Google Chat a persone e gruppi specifici nel tuo dominio e inserisci il tuo indirizzo email.
    9. In Log, seleziona Errori di log in Logging.
  6. 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.

  1. Nella console Google Cloud, vai alla pagina Cloud Run:

    Vai a Cloud Run

  2. Nell'elenco dei servizi Cloud Run, seleziona la casella di controllo accanto alla funzione di ricezione. Non fare clic sulla funzione stessa.

  3. Fai clic su Autorizzazioni. Si apre il riquadro Autorizzazioni.

  4. Fai clic su Aggiungi entità.

  5. 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:

    Vai alla configurazione dell'API Chat

  6. In Seleziona un ruolo, seleziona Cloud Run > Cloud Run Service Invoker.

  7. 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:

  1. Apri Google Chat utilizzando l'account Google Workspace che hai fornito quando ti sei aggiunto come tester attendibile.

    Vai a Google Chat

  2. Fai clic su Nuova chat.
  3. Nel campo Aggiungi una o più persone, digita il nome della tua app Chat.
  4. Seleziona l'app di chat dai risultati. Si apre un messaggio diretto.

  5. Nel nuovo messaggio diretto con l'app, digita Hello e premi enter.

Il messaggio dell'app Chat contiene una scheda che mostra il nome e l'immagine dell'avatar del mittente, come mostrato nell'immagine seguente:

L&#39;app di messaggistica risponde con una scheda che mostra il nome visualizzato e l&#39;immagine dell&#39;avatar del mittente

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.

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse. Fai clic su Menu > IAM e amministrazione > Gestisci risorse.

    Vai a Resource Manager

  2. Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina .
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.