Creare un'app Google Chat HTTP

Questa pagina spiega come creare un'app di chat HTTP. Esistono diversi modi per implementare questa architettura. Su Google Cloud, puoi utilizzare Cloud Functions, Cloud Run e App Engine. In questa guida rapida, scrivi ed esegui il deployment di una funzione Cloud che l'app Chat utilizza per rispondere al messaggio di un utente.

Con questa architettura, puoi configurare 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 HTTP Chat ha il seguente flusso di informazioni:

  1. Un utente invia un messaggio in Chat a un'app Chat, in un messaggio diretto o in uno spazio Chat.
  2. Una richiesta HTTP viene inviata a un server web che è un sistema cloud o on-premise contenente la logica dell'app Chat.
  3. Se vuoi, la logica dell'app Chat può essere integrata con i servizi Google Workspace (come Calendar e Fogli), con altri servizi Google (come Maps, YouTube e Vertex AI) o con altri servizi web (come un sistema di gestione dei progetti o uno strumento per la 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 nel tuo sistema perché queste app di chat possono essere progettate utilizzando diversi linguaggi di programmazione.

Obiettivi

  • Configurare l'ambiente.
  • Crea ed esegui il deployment di una funzione Cloud.
  • Pubblica l'app in Chat.
  • Testa l'app.

Prerequisiti

Configurare l'ambiente

Prima di utilizzare le API 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 Google Chat, 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

Crea ed esegui il deployment di una funzione Cloud che genera una scheda di 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 Functions:

    Vai a Cloud Functions

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

  2. Fai clic su Crea funzione.

  3. Nella pagina Crea funzione, configura la funzione:

    1. In Ambiente, seleziona Funzione Cloud Run.
    2. In Nome funzione, inserisci QuickStartChatApp.
    3. In Regione, seleziona una regione.
    4. In Autenticazione, seleziona Richiedi l'autenticazione.
    5. Fai clic su Avanti.
  4. In Runtime, seleziona la versione più recente di Node.js.

  5. In Codice sorgente, seleziona Editor incorporato.

  6. In Punto di contatto, elimina il testo predefinito e inserisci avatarApp.

  7. Sostituisci i contenuti di index.js con il seguente codice:

    node/avatar-app/index.js
    const functions = require('@google-cloud/functions-framework');
    
    // Command IDs (configure these in Google Chat API)
    const ABOUT_COMMAND_ID = 1; // ID for the "/about" slash command
    const HELP_COMMAND_ID = 2; // ID for the "Help" quick command
    
    /**
     * Google Cloud Function that handles HTTP requests from Google Chat.
     *
     * @param {Object} req - The HTTP request object sent from Google Chat.
     * @param {Object} res - The HTTP response object.
     */
    functions.http('avatarApp', (req, res) => {
      const event = req.body;
    
      if (event.appCommandMetadata) {
        handleAppCommands(event, res);
      } else {
        handleRegularMessage(event, res);
      }
    });
    
    /**
     * Handles slash and quick commands.
     *
     * @param {Object} event - The Google Chat event.
     * @param {Object} res - The HTTP response object.
     */
    function handleAppCommands(event, res) {
      const {appCommandId, appCommandType} = event.appCommandMetadata;
    
      switch (appCommandId) {
        case ABOUT_COMMAND_ID:
          return res.send({
            privateMessageViewer: event.user,
            text: 'The Avatar app replies to Google Chat messages.'
          });
        case HELP_COMMAND_ID:
          return res.send({
            privateMessageViewer: event.user,
            text: 'The Avatar app replies to Google Chat messages.'
          });
      }
    }
    
    /**
     * Handles regular messages (not commands).
     *
     * @param {Object} event - The Google Chat event.
     * @param {Object} res - The HTTP response object.
     */
    function handleRegularMessage(event, res) {
      const messageData = createMessage(event.user);
      res.send(messageData);
    }
    
    /**
     * Creates a card message with the user's avatar.
     *
     * @param {Object} user - The user who sent the message.
     * @param {string} user.displayName - The user's display name.
     * @param {string} user.avatarUrl - The URL of the user's avatar.
     * @return {Object} - The card message object.
     */
    function createMessage({displayName, 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}},
              ],
            }],
          },
        }],
      };
    }

  8. Fai clic su Esegui il deployment.

Python

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

    Vai a Cloud Functions

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

  2. Fai clic su Crea funzione.

  3. Nella pagina Crea funzione, configura la funzione:

    1. In Ambiente, seleziona Funzione Cloud Run.
    2. In Nome funzione, inserisci QuickStartChatApp.
    3. In Regione, seleziona una regione.
    4. In Autenticazione, seleziona Richiedi l'autenticazione.
    5. Fai clic su Avanti.
  4. In Runtime, seleziona la versione più recente di Python.

  5. In Codice sorgente, seleziona Editor incorporato.

  6. In Punto di contatto, elimina il testo predefinito e inserisci avatar_app.

  7. Sostituisci i contenuti di main.py con il seguente codice:

    python/avatar-app/main.py
    from typing import Any, Mapping
    
    import flask
    import functions_framework
    
    # Command IDs (configure these in Google Chat API)
    ABOUT_COMMAND_ID = 1  # ID for the "/about" slash command
    HELP_COMMAND_ID = 2  # ID for the "Help" quick command
    
    
    @functions_framework.http
    def avatar_app(req: flask.Request) -> Mapping[str, Any]:
        """Google Cloud Function that handles HTTP requests from Google Chat.
    
        Args:
            flask.Request: the request
    
        Returns:
            Mapping[str, Any]: the response
        """
        event = req.get_json(silent=True)
    
        if event and "appCommandMetadata" in event:
            return handle_app_commands(event)
        else:
            return handle_regular_message(event)
    
    
    def handle_app_commands(event: Mapping[str, Any]) -> Mapping[str, Any]:
        """Handles slash and quick commands.
    
        Args:
            Mapping[str, Any] event: The Google Chat event.
    
        Returns:
            Mapping[str, Any]: the response
        """
        app_command_id = event["appCommandMetadata"]["appCommandId"]
    
        if app_command_id == ABOUT_COMMAND_ID:
            return {
                "privateMessageViewer": event["user"],
                "text": "The Avatar app replies to Google Chat messages.",
            }
        elif app_command_id == HELP_COMMAND_ID:
            return {
                "privateMessageViewer": event["user"],
                "text": "The Avatar app replies to Google Chat messages.",
            }
        return {}
    
    
    
    
    def handle_regular_message(event: Mapping[str, Any]) -> Mapping[str, Any]:
        """Handles regular messages (not commands).
    
        Args:
            Mapping[str, Any] event: The Google Chat event.
    
        Returns:
            Mapping[str, Any]: the response
        """
    
        if not event or "user" not in event:
            return "Invalid request."
    
        message_data = create_message(event["user"])
        return message_data
    
    
    def create_message(user: Mapping[str, Any]) -> Mapping[str, Any]:
        """Creates a card message with the user's avatar.
    
        Args:
            Mapping[str, Any] user: The user who sent the message.
    
        Returns:
            Mapping[str, Any]: a card with the user's avatar.
        """
        display_name = user.get("displayName", "")
        avatar_url = 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}},
                                ]
                            }
                        ],
                    },
                }
            ],
        }

  8. Fai clic su Esegui il deployment.

Java

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

    Vai a Cloud Functions

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

  2. Fai clic su Crea funzione.

  3. Nella pagina Crea funzione, configura la funzione:

    1. In Ambiente, seleziona Funzione Cloud Run.
    2. In Nome funzione, inserisci QuickStartChatApp.
    3. In Regione, seleziona una regione.
    4. In Autenticazione, seleziona Richiedi l'autenticazione.
    5. Fai clic su Avanti.
  4. In Runtime, seleziona la versione più recente di Java.

  5. In Codice sorgente, seleziona Editor incorporato.

  6. In Punto di contatto, elimina il testo predefinito e inserisci App.

  7. Rinomina src/main/java/com/example/Example.java in src/main/java/AvatarApp.java.

  8. Sostituisci i contenuti di AvatarApp.java con il seguente codice:

    java/avatar-app/src/main/java/AvatarApp.java
    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.api.services.chat.v1.model.User;
    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 AvatarApp implements HttpFunction {
      private static final Gson gson = new Gson();
    
      // Command IDs (configure these in Google Chat API)
      private static final int ABOUT_COMMAND_ID = 1; // ID for the "/about" slash command
      private static final int HELP_COMMAND_ID = 2; // ID for the "Help" quick command
    
      @Override
      public void service(HttpRequest request, HttpResponse response) throws Exception {
        JsonObject event = gson.fromJson(request.getReader(), JsonObject.class);
    
        if (event.has("appCommandMetadata")) {
          handleAppCommands(event, response);
        } else {
          handleRegularMessage(event, response);
        }
      }
    
      /**
       * Handles slash and quick commands.
       *
       * @param event    The Google Chat event.
       * @param response The HTTP response object.
       */
      private void handleAppCommands(JsonObject event, HttpResponse response) throws Exception {
        int appCommandId = event.getAsJsonObject("appCommandMetadata").get("appCommandId").getAsInt();
    
        switch (appCommandId) {
          case ABOUT_COMMAND_ID:
            Message aboutMessage = new Message();
            aboutMessage.setText("The Avatar app replies to Google Chat messages.");
            aboutMessage.setPrivateMessageViewer(new User()
                .setName(event.getAsJsonObject("user").get("name").getAsString()));
            response.getWriter().write(gson.toJson(aboutMessage));
            return;
          case HELP_COMMAND_ID:
            Message helpMessage = new Message();
            helpMessage.setText("The Avatar app replies to Google Chat messages.");
            helpMessage.setPrivateMessageViewer(new User()
                .setName(event.getAsJsonObject("user").get("name").getAsString()));
            response.getWriter().write(gson.toJson(helpMessage));
            return;
        }
      }
    
      /**
       * Handles regular messages (not commands).
       *
       * @param event    The Google Chat event.
       * @param response The HTTP response object.
       */
      private void handleRegularMessage(JsonObject event, HttpResponse response) throws Exception {
    
        if (!event.has("user")) {
          response.getWriter().write("Invalid request.");
          return;
        }
    
        JsonObject user = event.getAsJsonObject("user");
        String displayName = user.has("displayName") ? user.get("displayName").getAsString() : "";
        String avatarUrl = user.has("avatarUrl") ? user.get("avatarUrl").getAsString() : "";
        Message message = createMessage(displayName, avatarUrl);
        response.getWriter().write(gson.toJson(message));
      }
    
      /**
       * Creates a card message with the user's avatar.
       *
       * @param displayName The user's display name.
       * @param avatarUrl   The URL of the user's avatar.
       * @return The card message object.
       */
      private Message createMessage(String displayName, String avatarUrl) {
        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)))))))));
      }
    }

  9. Sostituisci i contenuti di pom.xml con il seguente codice:

    java/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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>gcfv2</groupId>
      <artifactId>avatar-app</artifactId>
      <version>0.0.1</version>
      <name>Avatar App</name>
    
      <properties>
        <maven.compiler.release>21</maven.compiler.release>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>com.google.cloud.functions</groupId>
          <artifactId>functions-framework-api</artifactId>
          <version>1.1.4</version>
        </dependency>
    
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.12.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-rev20250116-2.0.0</version>
        </dependency>
    
      </dependencies>
    
    </project>

  10. Fai clic su Esegui il deployment.

Si apre la pagina dei dettagli di Cloud Functions e la funzione viene visualizzata con due indicatori di avanzamento: uno per la compilazione e uno per il servizio. Quando entrambi gli indicatori di avanzamento scompaiono e vengono sostituiti da un segno di spunta, la funzione è dispiattata e pronta.

Autorizza Google Chat a richiamare la funzione

Per autorizzare Google Chat a richiamare la tua funzione, aggiungi il service account di Google Chat con il ruolo Invoker di Cloud Run.

  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. Viene visualizzato il riquadro Autorizzazioni.

  4. Fai clic su Aggiungi entità.

  5. In Nuove entità, inserisci chat@system.gserviceaccount.com.

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

  7. Fai clic su Salva.

Pubblicare l'app in Google Chat

Dopo aver eseguito il deployment della funzione Cloud, segui questi passaggi per trasformarla in un'app Google Chat:

  1. Nella console Google Cloud, fai clic su Menu > Cloud Functions.

    Vai a Cloud Functions

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

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

  3. Fai clic sulla scheda Attivatori.

  4. In HTTPS, copia l'URL.

  5. Cerca "API Google Chat" e fai clic su API Google Chat, poi fai clic su Gestisci.

    Vai all'API Chat

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

    1. In Nome dell'app, inserisci Quickstart App.
    2. In URL avatar, inserisci https://developers.google.com/chat/images/quickstart-app-avatar.png.
    3. In Descrizione, inserisci Quickstart app.
    4. In Funzionalità, seleziona Ricevi messaggi 1:1 e Partecipa a spazi e conversazioni di gruppo.
    5. In Impostazioni di connessione, seleziona URL endpoint HTTP e incolla l'URL per l'attivatore della funzione Cloud nella casella.
    6. In Authentication Audience (Pubblico di autenticazione), seleziona HTTP endpoint URL (URL endpoint HTTP).
    7. In Visibilità, seleziona Rendi disponibile questa app Google Chat a utenti e gruppi specifici nel tuo dominio e inserisci il tuo indirizzo email.
    8. In Log, seleziona Errori di log in Logging.
  7. Fai clic su Salva.

L'app Chat è pronta per 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 fornito quando hai aggiunto te stesso come tester attendibile.

    Vai a Google Chat

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

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

La risposta dell'app Chat contiene un messaggio con scheda che mostra il nome e l'immagine dell'avatar del mittente, come mostrato nell'immagine seguente:

App di chat che risponde con una scheda contenente il nome visualizzato e l&#39;immagine dell&#39;avatar del mittente

Per aggiungere Trusted Tester e scoprire di più sul test delle funzionalità interattive, consulta Testare le funzionalità interattive per le app Google Chat.

Risoluzione dei problemi

Quando un'app o una scheda di Google Chat restituisce un errore, l'interfaccia di Chat mostra il messaggio "Si è verificato un problema". o "Impossibile elaborare la richiesta". A volte l'interfaccia utente di Chat non mostra alcun messaggio di errore, ma l'app Chat o la scheda produce un risultato imprevisto; ad esempio, un messaggio della scheda potrebbe non essere visualizzato.

Sebbene un messaggio di errore potrebbe non essere visualizzato nell'interfaccia utente di Chat, sono disponibili messaggi di errore descrittivi e dati di log per aiutarti a correggere gli errori quando la registrazione degli errori per le app Chat è attivata. Per assistenza su come visualizzare, eseguire il debug e correggere gli errori, consulta Risolvere 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 il progetto che vuoi eliminare e fai clic su Elimina .
  3. Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.