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 seguente diagramma:

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 di 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 di Chat in Chat.
  5. La risposta viene inviata all'utente.
  6. Se vuoi, l'app di 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.
  • Testare 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 ed esegui il deployment di una funzione Cloud Run che genera una scheda di chat con il nome visualizzato e l'immagine dell'avatar del mittente. Quando l'app di 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 di 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:
    node/chat/avatar-app/index.js
    import { http } from '@google-cloud/functions-framework';
    
    // The ID of the slash command "/about".
    // You must use the same ID in the Google Chat API configuration.
    const ABOUT_COMMAND_ID = 1;
    
    /**
     * Handle requests from Google Workspace add on
     *
     * @param {Object} req Request sent by Google Chat
     * @param {Object} res Response to be sent back to Google Chat
     */
    http('avatarApp', (req, res) => {
      const chatEvent = req.body.chat;
      let message;
      if (chatEvent.appCommandPayload) {
        message = handleAppCommand(chatEvent);
      } else {
        message = handleMessage(chatEvent);
      }
      res.send({ hostAppDataAction: { chatDataAction: { createMessageAction: {
        message: message
      }}}});
    });
    
    /**
     * Responds to an APP_COMMAND event in Google Chat.
     *
     * @param {Object} event the event object from Google Chat
     * @return the response message object.
     */
    function handleAppCommand(event) {
      switch (event.appCommandPayload.appCommandMetadata.appCommandId) {
        case ABOUT_COMMAND_ID:
          return {
            text: 'The Avatar app replies to Google Chat messages.'
          };
      }
    }
    
    /**
     * Responds to a MESSAGE event in Google Chat.
     *
     * @param {Object} event the event object from Google Chat
     * @return the response message object.
     */
    function handleMessage(event) {
      // Stores the Google Chat user as a variable.
      const chatUser = event.messagePayload.message.sender;
      const displayName = chatUser.displayName;
      const avatarUrl = chatUser.avatarUrl;
      return {
        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. 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 di 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:
    python/chat/avatar-app/main.py
    from typing import Any, Mapping
    
    import flask
    import functions_framework
    
    # The ID of the slash command "/about".
    # You must use the same ID in the Google Chat API configuration.
    ABOUT_COMMAND_ID = 1
    
    @functions_framework.http
    def avatar_app(req: flask.Request) -> Mapping[str, Any]:
      """Handle requests from Google Workspace add on
    
      Args:
        flask.Request req: the request sent by Google Chat
    
      Returns:
        Mapping[str, Any]: the response to be sent back to Google Chat
      """
      chat_event = req.get_json(silent=True)["chat"]
      if chat_event and "appCommandPayload" in chat_event:
        message = handle_app_command(chat_event)
      else:
        message = handle_message(chat_event)
      return { "hostAppDataAction": { "chatDataAction": { "createMessageAction": {
          "message": message
      }}}}
    
    def handle_app_command(event: Mapping[str, Any]) -> Mapping[str, Any]:
      """Responds to an APP_COMMAND event in Google Chat.
    
      Args:
        Mapping[str, Any] event: the event object from Google Chat
    
      Returns:
        Mapping[str, Any]: the response message object.
      """
      if event["appCommandPayload"]["appCommandMetadata"]["appCommandId"] == ABOUT_COMMAND_ID:
        return {
          "text": "The Avatar app replies to Google Chat messages.",
        }
      return {}
    
    def handle_message(event: Mapping[str, Any]) -> Mapping[str, Any]:
      """Responds to a MESSAGE event in Google Chat.
    
      Args:
        Mapping[str, Any] event: the event object from Google Chat
    
      Returns:
        Mapping[str, Any]: the response message object.
      """
      # Stores the Google Chat user as a variable.
      chat_user = event["messagePayload"]["message"]["sender"]
      display_name = chat_user.get("displayName", "")
      avatar_url = chat_user.get("avatarUrl", "")
      return {
        "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 di 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 App.
    2. Rinomina il file Java predefinito in src/main/java/com/google/chat/avatar/App.java.
    3. Sostituisci i contenuti di App.java con il seguente codice:
    java/chat/avatar-app/src/main/java/com/google/chat/avatar/App.java
    package com.google.chat.avatar;
    
    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;
    import java.util.List;
    
    public class App implements HttpFunction {
      // The ID of the slash command "/about".
      // You must use the same ID in the Google Chat API configuration.
      private static final int ABOUT_COMMAND_ID = 1;
    
      private static final Gson gson = new Gson();
    
      /**
       * Handle requests from Google Workspace add on
       * 
       * @param request the request sent by Google Chat
       * @param response the response to be sent back to Google Chat
       */
      @Override
      public void service(HttpRequest request, HttpResponse response) throws Exception {
        JsonObject event = gson.fromJson(request.getReader(), JsonObject.class);
        JsonObject chatEvent = event.getAsJsonObject("chat");
        Message message;
        if (chatEvent.has("appCommandPayload")) {
          message = handleAppCommand(chatEvent);
        } else {
          message = handleMessage(chatEvent);
        }
        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));
      }
    
      /**
       * Handles an APP_COMMAND event in Google Chat.
       *
       * @param event the event object from Google Chat
       * @return the response message object.
       */
      private Message handleAppCommand(JsonObject event) throws Exception {
        switch (event.getAsJsonObject("appCommandPayload")
          .getAsJsonObject("appCommandMetadata").get("appCommandId").getAsInt()) {
          case ABOUT_COMMAND_ID:
            return new Message()
              .setText("The Avatar app replies to Google Chat messages.");
          default:
            return null;
        }
      }
    
      /**
       * Handles a MESSAGE event in Google Chat.
       *
       * @param event the event object from Google Chat
       * @return the response message object.
       */
      private Message handleMessage(JsonObject event) throws Exception {
        // Stores the Google Chat user as a variable.
        JsonObject chatUser = event.getAsJsonObject("messagePayload").getAsJsonObject("message").getAsJsonObject("sender");
        String displayName = chatUser.has("displayName") ? chatUser.get("displayName").getAsString() : "";
        String avatarUrl = chatUser.has("avatarUrl") ? chatUser.get("avatarUrl").getAsString() : "";
        return new Message()
          .setText("Here's your avatar")
          .setCardsV2(List.of(new CardWithId()
            .setCardId("avatarCard")
            .setCard(new GoogleAppsCardV1Card()
              .setName("Avatar Card")
              .setHeader(new GoogleAppsCardV1CardHeader()
                .setTitle(String.format("Hello %s!", displayName)))
              .setSections(List.of(new GoogleAppsCardV1Section().setWidgets(List.of(
                new GoogleAppsCardV1Widget().setTextParagraph(new GoogleAppsCardV1TextParagraph()
                  .setText("Your avatar picture:")),
                new GoogleAppsCardV1Widget()
                  .setImage(new GoogleAppsCardV1Image().setImageUrl(avatarUrl)))))))));
      }
    }
  5. Sostituisci i contenuti di pom.xml con il seguente codice:

    java/chat/avatar-app/pom.xml
    <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.1.4</version>
        </dependency>
        <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.9.1</version>
        </dependency>
        <dependency>
          <groupId>com.google.apis</groupId>
          <artifactId>google-api-services-chat</artifactId>
          <version>v1-rev20230115-2.0.0</version>
        </dependency>
      </dependencies>
    
      <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 il quale 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", quindi 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 tua funzione.
    7. In Trigger, seleziona Utilizza un URL dell'endpoint HTTP comune per tutti i trigger e incolla l'URL del 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.

Autorizzare 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 ricevente. 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 del service account 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 di Chat, apri uno spazio di messaggi diretti con l'app di 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 di 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 chat 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 da eliminare e fai clic su Elimina .
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.