ساختن برنامه Google Chat با پروتکل HTTP

این صفحه توضیح می‌دهد که چگونه بااستفاده از سرویس‌های Google Cloud، برنامه Google Chat با HTTP بسازید. برای ساختن برنامه Chat، تابع Cloud Run می‌نویسید و مستقر می‌کنید که برنامه Chat از آن برای پاسخ دادن به پیام کاربر استفاده می‌کند.

با معماری HTTP، می‌توانید Chat را پیکربندی کنید تا بااستفاده از HTTP با Google Cloud یا سرور بوم‌گرد ادغام شود، همان‌طور که در نمودار زیر نشان داده شده است:

معماری برنامه Chat بااستفاده از سرویس وب در سرور بومی.

در نمودار قبلی، کاربری که با برنامه گپ HTTP تعامل می‌کند جریان اطلاعات زیر را دارد:

  1. کاربری در Chat به برنامه Chat پیام ارسال می‌کند، چه در پیام مستقیم چه در فضای Chat.
  2. درخواست اچ‌تی‌تی‌پی به سرور وبی ارسال می‌شود که یا سیستم ابری است یا سیستم بومی که حاوی منطق برنامه Chat است.
  3. به‌صورت اختیاری، منطق برنامه Chat می‌تواند با سرویس‌های Google Workspace (مثل «تقویم» و کاربرگ‌نگار Google)، سرویس‌های دیگر Google (مثل Maps،‏ YouTube، و Vertex AI)، یا سرویس‌های وب دیگر (مثل سیستم مدیریت پروژه یا ابزار صدور بلیت) ادغام شود.
  4. کارساز وب پاسخ HTTP را به سرویس برنامه Chat در Chat برمی‌گرداند.
  5. پاسخ به کاربر ارائه می‌شود.
  6. به‌صورت اختیاری، برنامه Chat می‌تواند «میانای برنامه‌سازی کاربردی Chat» را برای پست کردن ناهمزمان پیام‌ها یا انجام عملیات دیگر فراخوانی کند.

این معماری انعطاف‌پذیری لازم برای استفاده از کتابخانه‌ها و عناصری را که ازقبل در سیستم شما وجود دارند فراهم می‌کند، زیرا این برنامه‌های Chat را می‌توان بااستفاده از زبان‌های برنامه‌نویسی مختلف طراحی کرد.

اهداف

  • محیط خود را راه‌اندازی کنید.
  • ایجاد و استقرار تابع Cloud Run.
  • برنامه Chat را پیکربندی کنید.
  • برنامه را آزمایش کنید.

پیش‌نیازها

راه‌اندازی محیط

قبل‌از استفاده از «میاناهای برنامه‌سازی کاربردی Google»، باید آن‌ها را در پروژه Google Cloud روشن کنید. می‌توانید یک یا چند API را در یک پروژه Google Cloud روشن کنید.

ایجاد و مستقر کردن تابع Cloud Run

تابعی در Cloud Run بسازید و مستقر کنید که کارت Chat را با نام نمایشی و تصویر چهرک فرستنده تولید کند. وقتی برنامه Chat پیامی دریافت می‌کند، تابع را اجرا می‌کند و با کارت پاسخ می‌دهد.

برای ایجاد و استقرار عملکرد برنامه Chat، مراحل زیر را تکمیل کنید:

Node.js

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید که پروژه برنامه Chat شما انتخاب شده باشد.

  2. روی نوشتن تابع کلیک کنید.

  3. در صفحه ایجاد سرویس، تابع خود را راه‌اندازی کنید:

    1. در فیلد نام سرویس، addonchatapp را وارد کنید.
    2. در فهرست منطقه، منطقه‌ای را انتخاب کنید.
    3. در فهرست زمان اجرا، جدیدترین نسخه Node.js را انتخاب کنید.
    4. در بخش اصالت‌سنجی، الزامی بودن اصالت‌سنجی را انتخاب کنید.
    5. روی ایجاد کردن کلیک کنید و منتظر بمانید تا Cloud Run سرویس را ایجاد کند. کنسول شما را به برگه منبع هدایت می‌کند.
  4. در برگه منبع:

    1. در نقطه ورودی، نوشتار پیش‌فرض را حذف کنید و avatarApp را وارد کنید.
    2. محتوای index.js را با کد زیر جایگزین کنید:
    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. روی ذخیره و بازاستقرار کلیک کنید.

Python

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید که پروژه برنامه Chat شما انتخاب شده باشد.

  2. روی نوشتن تابع کلیک کنید.

  3. در صفحه ایجاد سرویس، تابع خود را راه‌اندازی کنید:

    1. در فیلد نام سرویس، addonchatapp را وارد کنید.
    2. در فهرست منطقه، منطقه‌ای را انتخاب کنید.
    3. در فهرست زمان اجرا، جدیدترین نسخه Python را انتخاب کنید.
    4. در بخش اصالت‌سنجی، الزامی بودن اصالت‌سنجی را انتخاب کنید.
    5. روی ایجاد کردن کلیک کنید و منتظر بمانید تا Cloud Run سرویس را ایجاد کند. کنسول شما را به برگه منبع هدایت می‌کند.
  4. در برگه منبع:

    1. در نقطه ورودی، نوشتار پیش‌فرض را حذف کنید و avatar_app را وارد کنید.
    2. محتوای main.py را با کد زیر جایگزین کنید:
    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. روی ذخیره و بازاستقرار کلیک کنید.

جاوا

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید که پروژه برنامه Chat شما انتخاب شده باشد.

  2. روی نوشتن تابع کلیک کنید.

  3. در صفحه ایجاد سرویس، تابع خود را راه‌اندازی کنید:

    1. در فیلد نام سرویس، addonchatapp را وارد کنید.
    2. در فهرست منطقه، منطقه‌ای را انتخاب کنید.
    3. در فهرست زمان اجرا، جدیدترین نسخه Java را انتخاب کنید.
    4. در بخش اصالت‌سنجی، الزامی بودن اصالت‌سنجی را انتخاب کنید.
    5. روی ایجاد کردن کلیک کنید و منتظر بمانید تا Cloud Run سرویس را ایجاد کند. کنسول شما را به برگه منبع هدایت می‌کند.
  4. در برگه منبع:

    1. در نقطه ورودی، نوشتار پیش‌فرض را حذف کنید و App را وارد کنید.
    2. نام فایل پیش‌فرض Java را به src/main/java/com/google/chat/avatar/App.java تغییر دهید.
    3. محتوای App.java را با کد زیر جایگزین کنید:
    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 را با کد زیر جایگزین کنید:

    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. روی ذخیره و بازاستقرار کلیک کنید.

صفحه جزئیات سرویس Cloud Run باز می‌شود. منتظر بمانید تا تابع مستقر شود.

پیکربندی برنامه Chat

پس‌از استقرار تابع Cloud Run، این مراحل را برای پیکربندی و استقرار برنامه Google Chat دنبال کنید:

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید پروژه‌ای که Cloud Run را برای آن فعال کرده‌اید انتخاب شده باشد.

  2. در فهرست توابع، روی addonchatapp کلیک کنید.

  3. در صفحه جزئیات سرویس، نشانی وب تابع را کپی کنید. نشانی وب با run.app تمام می‌شود.

  4. در فیلد جستجوی Google Cloud، «میانای برنامه‌سازی کاربردی Google Chat» را جستجو کنید، سپس روی میانای برنامه‌سازی کاربردی Google Chat کلیک کنید، و روی مدیریت کلیک کنید.

    رفتن به Chat API

  5. روی پیکربندی کلیک کنید و برنامه Google Chat را راه‌اندازی کنید:

    1. در نام برنامه، Quickstart App را وارد کنید.
    2. در نشانی وب چهرک، https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png را وارد کنید.
    3. در شرح، Quickstart app را وارد کنید.
    4. در بخش عملکرد، گزینه پیوستن به فضاها و مکالمه‌های گروهی را انتخاب کنید.
    5. در بخش تنظیمات اتصال، نشانی وب نقطه پایان HTTP را انتخاب کنید.
    6. در بخش راه‌اندازها، گزینه استفاده از نشانی وب نقطه پایانی HTTP مشترک برای همه راه‌اندازها را انتخاب کنید و نشانی وب راه‌انداز تابع Cloud Run را در چارگوش جای‌گذاری کنید.
    7. در بخش رؤیت‌پذیری، این برنامه Google Chat را برای افراد و گروه‌های خاصی در دامنه‌تان دردسترس قرار دهید و نشانی ایمیلتان را وارد کنید.
    8. در بخش گزارش‌ها، خطاهای گزارش به «گزارش‌گیری» را انتخاب کنید.
  6. روی ذخیره کلیک کنید.

  7. در بخش تنظیمات اتصال، ایمیل حساب سرویس را کپی کنید. وقتی برنامه Chat خود را برای فراخوانی تابع خود مجاز می‌کنید، به این ایمیل نیاز دارید.

سپس، به برنامه Chat اجازه دهید تابع Cloud Run را فراخوانی کند.

به Google Chat اجازه دهید تابع شما را فراخوانی کند

برای اینکه به Google Chat اجازه دهید تابع شما را فراخوانی کند، حساب سرویس برنامه Chat را با نقش فراخواننده Cloud Run اضافه کنید.

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

  2. در فهرست خدمات Cloud Run، چارگوش انتخاب کنار تابع دریافت‌کننده را انتخاب کنید. (روی خود تابع کلیک نکنید.)

  3. روی اجازه‌ها کلیک کنید. پانل اجازه‌ها باز می‌شود.

  4. روی افزودن مدیر کلیک کنید.

  5. در اصول جدید، نشانی ایمیل حساب سرویس مرتبط با برنامه Chat را وارد کنید.

    نشانی ایمیل حساب سرویس در صفحه پیکربندی Chat API، در بخش تنظیمات اتصال > نشانی وب نقطه پایان HTTP > ایمیل حساب سرویس قرار دارد:

    رفتن به پیکربندی Chat API

  6. در انتخاب نقش، Cloud Run > فراخواننده Cloud Run را انتخاب کنید.

  7. روی ذخیره کلیک کنید.

برنامه Chat آماده دریافت و پاسخ دادن به پیام‌ها در Chat است.

آزمایش کردن برنامه Chat

برای آزمایش برنامه Chat، فضای پیام مستقیمی را با برنامه Chat باز کنید و پیامی ارسال کنید:

  1. بااستفاده از حساب Google Workspace که هنگام اضافه کردن خودتان به‌عنوان آزمایش‌کننده معتمد ارائه کردید، Google Chat را باز کنید.

    رفتن به Google Chat

  2. روی گپ جدید کلیک کنید.
  3. در فیلد افزودن ۱ یا چند نفر، نام برنامه Chat خود را تایپ کنید.
  4. برنامه Chat را از نتایج انتخاب کنید. پیام مستقیمی باز می‌شود.

  5. در پیام مستقیم جدید با برنامه، Hello را تایپ کنید و enter را فشار دهید.

پیام برنامه Chat حاوی کارتی است که نام و تصویر چهرک فرستنده را نمایش می‌دهد، همان‌طور که در تصویر زیر نشان داده شده است:

برنامه Chat با کارتی که نام نمایشی و چهرک فرستنده را نشان می‌دهد پاسخ می‌دهد
تصویر

برای افزودن آزمایش‌گران مطمئن و کسب اطلاعات بیشتر درباره آزمایش ویژگی‌های تعاملی، به آزمایش ویژگی‌های تعاملی برای برنامه‌های Google Chat مراجعه کنید.

عیب‌یابی

وقتی برنامه یا کارت Google Chat خطایی برمی‌گرداند، میانای Chat پیامی را نشان می‌دهد که می‌گوید «مشکلی پیش آمد». یا «نمی‌توانیم درخواستتان را پردازش کنیم.» گاهی‌اوقات «میانای کاربری Chat» هیچ پیام خطایی نمایش نمی‌دهد، اما برنامه Chat یا کارت نتیجه غیرمنتظره‌ای تولید می‌کند؛ برای مثال، ممکن است پیام کارت ظاهر نشود.

اگرچه ممکن است پیام خطا در واسط کاربر Chat نمایش داده نشود، پیام‌های خطای توصیفی و داده‌های گزارش برای کمک به شما در رفع خطاها وقتی گزارش خطا برای برنامه‌های Chat روشن باشد دردسترس است. برای دریافت راهنمایی درباره مشاهده، اشکال‌زدایی، و رفع خطاها، عیب‌یابی و رفع خطاهای Google Chat را ببینید.

مرتب‌سازی

برای اینکه هزینه منابع استفاده‌شده در این آموزش به حساب Google Cloud شما اضافه نشود، توصیه می‌کنیم پروژه Cloud را حذف کنید.

  1. در «کنسول Google API»، به صفحه مدیریت منابع بروید. روی منو > IAM و سرپرست > مدیریت منابع کلیک کنید.

    به «مدیر منابع» بروید

  2. در فهرست پروژه، پروژه‌ای را که می‌خواهید حذف کنید انتخاب کنید و سپس روی حذف کلیک کنید.
  3. در چارگوش گفتگو، شناسه پروژه را تایپ کنید و سپس روی خاموش کردن کلیک کنید تا پروژه حذف شود.

برنامه‌های Chat که برافزا نیستند: ساختن برنامه Google Chat با HTTP

برای ساختن برنامه Chat که برافزای Google Workspace نیست، این مراحل را برای استقرار تابع Cloud Run، اعطای اجازه‌های فراخوانی، و پیکربندی برنامه Chat که برافزا نیست دنبال کنید.

ایجاد و استقرار تابع Cloud Run برای برنامه Chat که برافزا نیست

Node.js

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید که پروژه برنامه Chat شما انتخاب شده باشد.

  2. روی نوشتن تابع کلیک کنید.

  3. در صفحه ایجاد سرویس، تابع خود را راه‌اندازی کنید:

    1. در فیلد نام سرویس، quickstartchatapp را وارد کنید.
    2. در فهرست منطقه، منطقه‌ای را انتخاب کنید.
    3. در فهرست زمان اجرا، جدیدترین نسخه Node.js را انتخاب کنید.
    4. در بخش اصالت‌سنجی، الزامی بودن اصالت‌سنجی را انتخاب کنید.
    5. روی ایجاد کردن کلیک کنید و منتظر بمانید تا Cloud Run سرویس را ایجاد کند. کنسول شما را به برگه منبع هدایت می‌کند.
  4. در برگه منبع:

    1. در نقطه ورودی، نوشتار پیش‌فرض را حذف کنید و avatarApp را وارد کنید.
    2. محتوای index.js را با کد زیر جایگزین کنید:

      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. روی ذخیره و بازاستقرار کلیک کنید.

Python

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید که پروژه برنامه Chat شما انتخاب شده باشد.

  2. روی نوشتن تابع کلیک کنید.

  3. در صفحه ایجاد سرویس، تابع خود را راه‌اندازی کنید:

    1. در فیلد نام سرویس، quickstartchatapp را وارد کنید.
    2. در فهرست منطقه، منطقه‌ای را انتخاب کنید.
    3. در فهرست زمان اجرا، جدیدترین نسخه Python را انتخاب کنید.
    4. در بخش اصالت‌سنجی، الزامی بودن اصالت‌سنجی را انتخاب کنید.
    5. روی ایجاد کردن کلیک کنید و منتظر بمانید تا Cloud Run سرویس را ایجاد کند. کنسول شما را به برگه منبع هدایت می‌کند.
  4. در برگه منبع:

    1. در نقطه ورودی، نوشتار پیش‌فرض را حذف کنید و avatar_app را وارد کنید.
    2. محتوای main.py را با کد زیر جایگزین کنید:

      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. روی ذخیره و بازاستقرار کلیک کنید.

جاوا

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید که پروژه برنامه Chat شما انتخاب شده باشد.

  2. روی نوشتن تابع کلیک کنید.

  3. در صفحه ایجاد سرویس، تابع خود را راه‌اندازی کنید:

    1. در فیلد نام سرویس، quickstartchatapp را وارد کنید.
    2. در فهرست منطقه، منطقه‌ای را انتخاب کنید.
    3. در فهرست زمان اجرا، جدیدترین نسخه Java را انتخاب کنید.
    4. در بخش اصالت‌سنجی، الزامی بودن اصالت‌سنجی را انتخاب کنید.
    5. روی ایجاد کردن کلیک کنید و منتظر بمانید تا Cloud Run سرویس را ایجاد کند. کنسول شما را به برگه منبع هدایت می‌کند.
  4. در برگه منبع:

    1. در نقطه ورودی، نوشتار پیش‌فرض را حذف کنید و App را وارد کنید.
    2. نام src/main/java/com/example/Example.java به src/main/java/AvatarApp.java تغییر کند.
    3. محتوای AvatarApp.java را با کد زیر جایگزین کنید:

      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 را با کد زیر جایگزین کنید:

      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. روی ذخیره و بازاستقرار کلیک کنید.

به Google Chat اجازه دهید تابع شما را فراخوانی کند

برای مجاز کردن Google Chat برای فراخوانی تابع، حساب سرویس Google Chat را با نقش فراخوان Cloud Run اضافه کنید:

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

  2. در فهرست خدمات Cloud Run، چارگوش انتخاب کنار تابع دریافت‌کننده را انتخاب کنید. (روی خود تابع کلیک نکنید.)

  3. روی اجازه‌ها کلیک کنید. پانل اجازه‌ها باز می‌شود.

  4. روی افزودن مدیر کلیک کنید.

  5. در اصول جدید، chat@system.gserviceaccount.com را وارد کنید.

  6. در انتخاب نقش، Cloud Run > فراخواننده Cloud Run را انتخاب کنید.

  7. روی ذخیره کلیک کنید.

پیکربندی برنامه Chat که برافزا نیست

پس‌از استقرار تابع Cloud Run، این مراحل را دنبال کنید تا آن را به برنامه Chat که افزونه نیست تبدیل کنید:

  1. در «کنسول Google API»، به صفحه Cloud Run بروید:

    رفتن به Cloud Run

    مطمئن شوید پروژه‌ای که Cloud Run را برای آن فعال کرده‌اید انتخاب شده باشد.

  2. در فهرست سرویس‌ها، روی quickstartchatapp کلیک کنید.

  3. در صفحه جزئیات سرویس، نشانی وب تابع را کپی کنید.

  4. «Google Chat API» را جستجو کنید و روی Google Chat API کلیک کنید، سپس روی مدیریت کلیک کنید.

    رفتن به Chat API

  5. روی پیکربندی کلیک کنید و برنامه Chat را که برافزا نیست راه‌اندازی کنید:

    1. ساخت این برنامه Chat به‌عنوان برافزای Google Workspace را لغو انتخاب کنید. کادر گفتگویی باز می‌شود که از شما می‌خواهد تأیید کنید. در چارگوش گفتگو، روی غیرفعال کردن کلیک کنید.
    2. در نام برنامه، Quickstart App را وارد کنید.
    3. در نشانی وب چهرک، https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png را وارد کنید.
    4. در شرح، Quickstart app را وارد کنید.
    5. در بخش عملکرد، گزینه پیوستن به فضاها و مکالمه‌های گروهی را انتخاب کنید.
    6. در بخش تنظیمات اتصال، نشانی وب نقطه پایان HTTP را انتخاب کنید.
    7. در بخش راه‌اندازها، گزینه استفاده از نشانی وب نقطه پایانی HTTP مشترک برای همه راه‌اندازها را انتخاب کنید و نشانی وب راه‌انداز تابع Cloud Run را در چارگوش جای‌گذاری کنید.
    8. در بخش رؤیت‌پذیری، این برنامه Chat را برای افراد و گروه‌های خاصی در دامنه‌تان دردسترس قرار دهید و نشانی ایمیلتان را وارد کنید.
    9. در بخش گزارش‌ها، خطاهای گزارش به «گزارش‌گیری» را انتخاب کنید.
  6. روی ذخیره کلیک کنید.