HTTP Google Chat uygulaması oluşturma

Bu sayfada, Google Cloud hizmetlerini kullanarak HTTP Google Chat uygulamasının nasıl oluşturulacağı açıklanmaktadır. Chat uygulamasını oluşturmak için, Chat uygulamasının kullanıcının mesajına yanıt vermek üzere kullandığı bir Cloud Run işlevi yazıp dağıtırsınız.

HTTP mimarisinde, aşağıdaki şemada gösterildiği gibi HTTP kullanarak Chat'i Google Cloud veya şirket içi sunucuyla entegre olacak şekilde yapılandırırsınız:

Şirket içi sunucuda web hizmeti kullanan bir Chat uygulamasının mimarisi.

Önceki şemada, bir HTTP Chat uygulamasıyla etkileşimde bulunan kullanıcının bilgi akışı şu şekildedir:

  1. Bir kullanıcı, bir Chat uygulamasına doğrudan mesaj yoluyla ya da bir Chat alanında mesaj gönderir.
  2. Chat uygulaması mantığını içeren bir bulut veya şirket içi sistem olan web sunucusuna bir HTTP isteği gönderilir.
  3. İsteğe bağlı olarak, Chat uygulaması mantığı Google Workspace hizmetleri (ör. Takvim ve E-Tablolar), diğer Google hizmetleri (ör. Haritalar, YouTube ve Vertex AI) veya diğer web hizmetleriyle (ör. proje yönetim sistemi ya da destek kaydı aracı) entegre edilebilir.
  4. Web sunucusu, Chat'teki Chat uygulama hizmetine bir HTTP yanıtı geri gönderir.
  5. Yanıt, kullanıcıya iletilir.
  6. İsteğe bağlı olarak, Chat uygulaması mesajları asenkron olarak yayınlamak veya başka işlemleri gerçekleştirmek için Chat API'yi çağırabilir.

Bu mimari, farklı programlama dilleri kullanılarak tasarlanabilen Chat uygulamaları sayesinde sisteminizde zaten bulunan kitaplıkları ve bileşenleri kullanma esnekliği sağlar.

Hedefler

  • Ortamınızı ayarlayın.
  • Cloud Run işlevi oluşturma ve dağıtma
  • Chat uygulamasını yapılandırın.
  • Uygulamayı test edin.

Ön koşullar

Ortamı ayarlama

Google API'lerini kullanmadan önce bir Google Cloud projesinde etkinleştirmeniz gerekir. Tek bir Google Cloud projesinde bir veya daha fazla API'yi etkinleştirebilirsiniz.
  • Google API Konsolu'nda Google Chat API, Cloud Build API, Cloud Functions API, Cloud Pub/Sub API, Cloud Logging API, Artifact Registry API ve Cloud Run API'yi etkinleştirin.

    API'leri etkinleştirme

Cloud Run işlevi oluşturma ve dağıtma

Gönderenin görünen adı ve avatar resmini içeren bir Chat kartı oluşturan Cloud Run işlevi oluşturup dağıtın. Sohbet uygulaması bir mesaj aldığında işlevi çalıştırır ve kartla yanıt verir.

Chat uygulamanız için işlev oluşturup dağıtmak üzere aşağıdaki adımları tamamlayın:

Node.js

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Chat uygulamanızın projesinin seçildiğinden emin olun.

  2. Write a function'ı (İşlev yaz) tıklayın.

  3. Hizmet oluştur sayfasında işlevinizi ayarlayın:

    1. Hizmet adı alanına addonchatapp girin.
    2. Bölge listesinde bir bölge seçin.
    3. Çalışma zamanı listesinde Node.js'nin en son sürümünü seçin.
    4. Authentication (Kimlik Doğrulama) bölümünde Require authentication'ı (Kimlik doğrulama zorunlu) seçin.
    5. Oluştur'u tıklayın ve Cloud Run'ın hizmeti oluşturmasını bekleyin. Konsol sizi Kaynak sekmesine yönlendirir.
  4. Kaynak sekmesinde:

    1. Giriş noktası bölümünde varsayılan metni silip avatarApp yazın.
    2. index.js dosyasının içeriğini aşağıdaki kodla değiştirin:
    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. Kaydet ve yeniden dağıt'ı tıklayın.

Python

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Chat uygulamanızın projesinin seçildiğinden emin olun.

  2. Write a function'ı (İşlev yaz) tıklayın.

  3. Hizmet oluştur sayfasında işlevinizi ayarlayın:

    1. Hizmet adı alanına addonchatapp girin.
    2. Bölge listesinde bir bölge seçin.
    3. Runtime (Çalışma zamanı) listesinde en yeni Python sürümünü seçin.
    4. Authentication (Kimlik Doğrulama) bölümünde Require authentication'ı (Kimlik doğrulama zorunlu) seçin.
    5. Oluştur'u tıklayın ve Cloud Run'ın hizmeti oluşturmasını bekleyin. Konsol sizi Kaynak sekmesine yönlendirir.
  4. Kaynak sekmesinde:

    1. Giriş noktası bölümünde varsayılan metni silip avatar_app yazın.
    2. main.py dosyasının içeriğini aşağıdaki kodla değiştirin:
    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. Kaydet ve yeniden dağıt'ı tıklayın.

Java

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Chat uygulamanızın projesinin seçildiğinden emin olun.

  2. Write a function'ı (İşlev yaz) tıklayın.

  3. Hizmet oluştur sayfasında işlevinizi ayarlayın:

    1. Hizmet adı alanına addonchatapp girin.
    2. Bölge listesinde bir bölge seçin.
    3. Runtime (Çalışma zamanı) listesinde en son Java sürümünü seçin.
    4. Authentication (Kimlik Doğrulama) bölümünde Require authentication'ı (Kimlik doğrulama zorunlu) seçin.
    5. Oluştur'u tıklayın ve Cloud Run'ın hizmeti oluşturmasını bekleyin. Konsol sizi Kaynak sekmesine yönlendirir.
  4. Kaynak sekmesinde:

    1. Giriş noktası bölümünde varsayılan metni silip App yazın.
    2. Varsayılan Java dosyasını src/main/java/com/google/chat/avatar/App.java olarak yeniden adlandırın.
    3. App.java dosyasının içeriğini aşağıdaki kodla değiştirin:
    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. pom.xml dosyasının içeriğini aşağıdaki kodla değiştirin:

    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. Kaydet ve yeniden dağıt'ı tıklayın.

Cloud Run hizmeti ayrıntıları sayfası açılır. İşlevin dağıtılmasını bekleyin.

Chat uygulamasını yapılandırma

Cloud Run işlevi dağıtıldıktan sonra Google Chat uygulamasını yapılandırmak ve dağıtmak için aşağıdaki adımları uygulayın:

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Cloud Run'ı etkinleştirdiğiniz projenin seçili olduğundan emin olun.

  2. İşlevler listesinde addonchatapp'i tıklayın.

  3. Hizmet ayrıntıları sayfasında, işlevin URL'sini kopyalayın. URL, run.app ile bitiyor.

  4. Google Cloud arama alanında "Google Chat API"yi arayın, ardından Google Chat API'yi ve Yönet'i tıklayın.

    Chat API'ye git

  5. Yapılandırma'yı tıklayın ve Google Chat uygulamasını ayarlayın:

    1. Uygulama adı alanına Quickstart App yazın.
    2. Avatar URL'si alanına https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png girin.
    3. Açıklama bölümüne Quickstart app girin.
    4. İşlevsellik bölümünde Alanlara ve grup görüşmelerine katılma'yı seçin.
    5. Bağlantı ayarları bölümünde HTTP uç nokta URL'si'ni seçin.
    6. Tetikleyiciler bölümünde Tüm tetikleyiciler için ortak bir HTTP uç nokta URL'si kullanın'ı seçin ve Cloud Run işlevi tetikleyicisinin URL'sini kutuya yapıştırın.
    7. Görünürlük bölümünde Bu Google Chat uygulamasını alanınızdaki belirli kişiler ve gruplar için kullanılabilir yap'ı seçip e-posta adresinizi girin.
    8. Günlükler bölümünde Günlük hatalarını günlüğe kaydetme'yi seçin.
  6. Kaydet'i tıklayın.

  7. Bağlantı ayarları bölümünde Hizmet hesabı e-postası'nı kopyalayın. Chat uygulamanızın işlevinizi çağırmasına izin verirken bu e-postaya ihtiyacınız vardır.

Ardından, Chat uygulamasının Cloud Run işlevini çağırmasına izin verin.

Google Chat'in işlevinizi çağırmasına izin verme

Google Chat'in işlevinizi çağırmasına izin vermek için Cloud Run Invoker rolüyle Chat uygulaması hizmet hesabını ekleyin.

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

  2. Cloud Run hizmetleri listesinde, alıcı işlevinin yanındaki onay kutusunu işaretleyin. (İşlevin kendisini tıklamayın.)

  3. İzinler'i tıklayın. İzinler paneli açılır.

  4. Ana hesap ekle'yi tıklayın.

  5. Yeni ana hesaplar bölümünde, Chat uygulamanızla ilişkili hizmet hesabının e-posta adresini girin.

    Hizmet hesabı e-posta adresi, Chat API yapılandırma sayfasındaki Bağlantı ayarları > HTTP uç nokta URL'si > Hizmet Hesabı E-postası bölümünde yer alır:

    Chat API yapılandırmasına gitme

  6. Rol seçin bölümünde Cloud Run > Cloud Run Invoker'ı (Cloud Run Invoker) seçin.

  7. Kaydet'i tıklayın.

Chat uygulaması, Chat'teki mesajları almaya ve yanıtlamaya hazırdır.

Chat uygulamanızı test etme

Chat uygulamanızı test etmek için Chat uygulamasıyla doğrudan mesaj alanı açın ve mesaj gönderin:

  1. Kendinizi güvenilir test kullanıcıları arasına eklerken sağladığınız Google Workspace hesabını kullanarak Google Chat'i açın.

    Google Chat'e gidin

  2. Yeni sohbet'i tıklayın.
  3. 1 veya daha fazla kişi ekle alanına Chat uygulamanızın adını yazın.
  4. Sonuçlardan Chat uygulamanızı seçin. Doğrudan mesaj açılır.

  5. Uygulamayla olan yeni doğrudan mesajda Hello yazıp enter tuşuna basın.

Chat uygulamasının mesajı, aşağıdaki resimde gösterildiği gibi gönderenin adını ve avatar resmini gösteren bir kart içerir:

Chat uygulaması, gönderenin görünen adını ve avatar resmini içeren bir kartla yanıt veriyor.

Güvenilir test kullanıcıları ekleme ve etkileşimli özellikleri test etme hakkında daha fazla bilgi edinmek için Google Chat uygulamalarında etkileşimli özellikleri test etme başlıklı makaleyi inceleyin.

Sorun giderme

Bir Google Chat uygulaması veya kartı hata döndürdüğünde Chat arayüzünde "Bir hata oluştu" veya "İsteğiniz işlenemiyor" mesajı gösterilir. Bazen Chat kullanıcı arayüzünde hata mesajı gösterilmez ancak Chat uygulaması veya kartı beklenmedik bir sonuç üretir. Örneğin, kart mesajı görünmeyebilir.

Chat kullanıcı arayüzünde hata mesajı gösterilmese de Chat uygulamaları için hata günlüğü kaydı etkinleştirildiğinde hataları düzeltmenize yardımcı olacak açıklayıcı hata mesajları ve günlük verileri kullanılabilir. Hataları görüntüleme, hata ayıklama ve düzeltmeyle ilgili yardım için Google Chat hatalarını giderme ve düzeltme başlıklı makaleyi inceleyin.

Temizleme

Bu eğitimde kullanılan kaynaklar için Google Cloud hesabınızdan ücret alınmasını önlemek istiyorsanız Cloud projesini silmenizi öneririz.

  1. Google API Konsolu'nda Kaynakları yönet sayfasına gidin. Şunu tıklayın: Menü > IAM & Admin > Kaynakları Yönetin.

    Kaynak Yöneticisi'ne gidin

  2. Proje listesinde, silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
  3. İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.

Eklenti olmayan Chat uygulamaları: HTTP Google Chat uygulaması oluşturma

Google Workspace eklentisi olmayan bir Chat uygulaması oluşturmak için Cloud Run işlevini dağıtma, çağırma izinleri verme ve eklenti olmayan Chat uygulamasını yapılandırma adımlarını uygulayın.

Eklenti olmayan bir Chat uygulaması için Cloud Run işlevi oluşturma ve dağıtma

Node.js

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Chat uygulamanızın projesinin seçildiğinden emin olun.

  2. Write a function'ı (İşlev yaz) tıklayın.

  3. Hizmet oluştur sayfasında işlevinizi ayarlayın:

    1. Hizmet adı alanına quickstartchatapp girin.
    2. Bölge listesinde bir bölge seçin.
    3. Çalışma zamanı listesinde Node.js'nin en son sürümünü seçin.
    4. Authentication (Kimlik Doğrulama) bölümünde Require authentication'ı (Kimlik doğrulama zorunlu) seçin.
    5. Oluştur'u tıklayın ve Cloud Run'ın hizmeti oluşturmasını bekleyin. Konsol sizi Kaynak sekmesine yönlendirir.
  4. Kaynak sekmesinde:

    1. Giriş noktası bölümünde varsayılan metni silip avatarApp yazın.
    2. index.js dosyasının içeriğini aşağıdaki kodla değiştirin:

      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}},
                ],
              }],
            },
          }],
        };
      }

    3. Kaydet ve yeniden dağıt'ı tıklayın.

Python

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Chat uygulamanızın projesinin seçildiğinden emin olun.

  2. Write a function'ı (İşlev yaz) tıklayın.

  3. Hizmet oluştur sayfasında işlevinizi ayarlayın:

    1. Hizmet adı alanına quickstartchatapp girin.
    2. Bölge listesinde bir bölge seçin.
    3. Runtime (Çalışma zamanı) listesinde en yeni Python sürümünü seçin.
    4. Authentication (Kimlik Doğrulama) bölümünde Require authentication'ı (Kimlik doğrulama zorunlu) seçin.
    5. Oluştur'u tıklayın ve Cloud Run'ın hizmeti oluşturmasını bekleyin. Konsol sizi Kaynak sekmesine yönlendirir.
  4. Kaynak sekmesinde:

    1. Giriş noktası bölümünde varsayılan metni silip avatar_app yazın.
    2. main.py dosyasının içeriğini aşağıdaki kodla değiştirin:

      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}},
                                  ]
                              }
                          ],
                      },
                  }
              ],
          }

    3. Kaydet ve yeniden dağıt'ı tıklayın.

Java

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Chat uygulamanızın projesinin seçildiğinden emin olun.

  2. Write a function'ı (İşlev yaz) tıklayın.

  3. Hizmet oluştur sayfasında işlevinizi ayarlayın:

    1. Hizmet adı alanına quickstartchatapp girin.
    2. Bölge listesinde bir bölge seçin.
    3. Runtime (Çalışma zamanı) listesinde en son Java sürümünü seçin.
    4. Authentication (Kimlik Doğrulama) bölümünde Require authentication'ı (Kimlik doğrulama zorunlu) seçin.
    5. Oluştur'u tıklayın ve Cloud Run'ın hizmeti oluşturmasını bekleyin. Konsol sizi Kaynak sekmesine yönlendirir.
  4. Kaynak sekmesinde:

    1. Giriş noktası bölümünde varsayılan metni silip App yazın.
    2. src/main/java/com/example/Example.java filtresini src/main/java/AvatarApp.java olarak yeniden adlandırın.
    3. AvatarApp.java dosyasının içeriğini aşağıdaki kodla değiştirin:

      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)))))))));
        }
      }

    4. pom.xml dosyasının içeriğini aşağıdaki kodla değiştirin:

      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>

    5. Kaydet ve yeniden dağıt'ı tıklayın.

Google Chat'in işlevinizi çağırmasına izin verme

Google Chat'in işlevinizi çağırmasına izin vermek için Google Chat hizmet hesabını Cloud Run Invoker rolüyle ekleyin:

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

  2. Cloud Run hizmetleri listesinde, alıcı işlevinin yanındaki onay kutusunu işaretleyin. (İşlevin kendisini tıklamayın.)

  3. İzinler'i tıklayın. İzinler paneli açılır.

  4. Ana hesap ekle'yi tıklayın.

  5. New principals (Yeni ana hesaplar) bölümüne chat@system.gserviceaccount.com girin.

  6. Rol seçin bölümünde Cloud Run > Cloud Run Invoker'ı (Cloud Run Invoker) seçin.

  7. Kaydet'i tıklayın.

Eklenti olmayan Chat uygulamasını yapılandırma

Cloud Run işlevi dağıtıldıktan sonra, eklenti olmayan bir sohbet uygulamasına dönüştürmek için aşağıdaki adımları uygulayın:

  1. Google API Console'da Cloud Run sayfasına gidin:

    Cloud Run'a gitme

    Cloud Run'ı etkinleştirdiğiniz projenin seçili olduğundan emin olun.

  2. Hizmetler listesinde quickstartchatapp'i tıklayın.

  3. Hizmet ayrıntıları sayfasında, işlevin URL'sini kopyalayın.

  4. "Google Chat API" araması yapın, Google Chat API'yi ve ardından Yönet'i tıklayın.

    Chat API'ye git

  5. Yapılandırma'yı tıklayın ve eklenti olmayan Chat uygulamasını ayarlayın:

    1. Bu Chat uygulamasını Google Workspace eklentisi olarak oluştur seçeneğinin işaretini kaldırın. Onaylamanızı isteyen bir iletişim kutusu açılır. İletişim kutusunda Devre dışı bırak'ı tıklayın.
    2. Uygulama adı alanına Quickstart App yazın.
    3. Avatar URL'si alanına https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png girin.
    4. Açıklama bölümüne Quickstart app girin.
    5. İşlevsellik bölümünde Alanlara ve grup görüşmelerine katılma'yı seçin.
    6. Bağlantı ayarları bölümünde HTTP uç nokta URL'si'ni seçin.
    7. Tetikleyiciler bölümünde Tüm tetikleyiciler için ortak bir HTTP uç nokta URL'si kullanın'ı seçin ve Cloud Run işlevi tetikleyicisinin URL'sini kutuya yapıştırın.
    8. Görünürlük bölümünde Bu Chat uygulamasını alanınızdaki belirli kişiler ve gruplar için kullanılabilir yap'ı seçin ve e-posta adresinizi girin.
    9. Günlükler bölümünde Günlük hatalarını günlüğe kaydetme'yi seçin.
  6. Kaydet'i tıklayın.