使用傳入的 Webhook 傳送訊息至 Google Chat

傳入的 Webhook 可讓您從非 Chat 應用程式的應用程式傳送非同步訊息至 Google Chat。舉例來說,您可以設定監控應用程式,在伺服器當機時,在 Google Chat 上通知值班人員。

如要透過 Chat 應用程式以非同步的方式傳送、更新或刪除訊息,請參閱「建立、讀取、更新及刪除訊息」一文。

讓 Webhook 傳送非同步訊息至 Google Chat 的架構。

必要條件

如要執行本指南中的範例,您需要:

Python

  • Python 3.10.7 以上版本。
  • 連線至網際網路和網路瀏覽器。
  • 擁有可存取 Google ChatGoogle Workspace 帳戶。
  • 現有的 Google Chat 聊天室。
  • httplib2 程式庫。如有需要,請執行以下指令的指令列 (CLI) 指令使用 pip 安裝程式庫:

    pip install httplib2
    

Node.js

Apps Script

  • 連線至網際網路和網路瀏覽器。
  • 擁有可存取 Google ChatGoogle Workspace 帳戶。
  • 現有的 Google Chat 聊天室。

Java

建立 Webhook

如要建立 Webhook,請在要接收訊息的 Google Chat 聊天室中註冊 Webhook,然後撰寫可傳送訊息的指令碼。

步驟 1:註冊連入 Webhook

  1. 在網路瀏覽器中開啟 Google Chat
  2. 前往要新增 Webhook 的聊天室。
  3. 在頂端的聊天室名稱旁邊,依序按一下「向下箭頭」圖示 >「應用程式與整合」
  4. 按一下「管理 Webhook」
  5. 如果這個聊天室已有其他 Webhook,請按一下「Add another」。否則請略過這個步驟。
  6. 在「名稱」部分輸入「quickstart Webhook」。
  7. 在「Avatar URL」(輸入圖片網址) 輸入 https://developers.google.com/chat/images/chat-product-icon.png
  8. 點選「儲存」
  9. 如要複製完整的 Webhook 網址,請按一下「複製」
  10. 按一下方塊外的方塊,即可關閉「連入 Webhook」對話方塊。

步驟 2:編寫 Webhook 指令碼

Webhook 指令碼可將 Webhook 訊息張貼到 Webhook 網址,張貼建立訊息要求到 Webhook 註冊的聊天室中。Google Chat API 會透過 Message 的執行個體回應。

請在下方選擇語言,建立 Webhook 指令碼的具體操作說明:

Python

  1. 在工作目錄中,建立名為 quickstart.py 的檔案。

  2. 複製並貼上 quickstart.py 中的下列程式碼:

    python/Webhook/quickstart.py
    from json import dumps
    
    from httplib2 import Http
    
    WEBHOOK_URL = "[URL FROM WEBHOOK]"
    
    def main():
        """Google Chat incoming webhook quickstart."""
        url = WEBHOOK_URL
        bot_message = {
            'text': 'Hello from a Python script!'}
        message_headers = {'Content-Type': 'application/json; charset=UTF-8'}
        http_obj = Http()
        response = http_obj.request(
            uri=url,
            method='POST',
            headers=message_headers,
            body=dumps(bot_message),
        )
        print(response)
    
    
    if __name__ == '__main__':
        main()
  3. url 變數的值替換成您在步驟 1 中複製的 Webhook 網址:註冊傳入的 Webhook。

Node.js

  1. 在工作目錄中,建立名為 index.js 的檔案。

  2. 複製並貼上 index.js 中的下列程式碼:

    node/Webhook/index.js
    /**
     * Sends asynchronous message into Google Chat
     * @return{obj} response
     */
    function webhook() {
      const fetch = require('node-fetch');
      const webhookURL = 'https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=u9IG_MuTBXw-tnqupPrPNinY2spKFcRBDp6dSldGUAw%3D';
    
      const data = JSON.stringify({
        'text': 'Hello from a Node script!',
      });
      let resp;
      fetch(webhookURL, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json; charset=UTF-8',
        },
        body: data,
      }).then((response) => {
        resp = response;
        console.log(response);
      });
      return resp;
    }
    
  3. webhookURL 變數的值替換成您在步驟 1 中複製的 Webhook 網址:註冊傳入的 Webhook。

Apps Script

  1. 前往 Apps Script 頁面

  2. 按一下「New Project」

  3. 複製及貼上下列程式碼:

    apps-script/Webhook/Webhook.gs
    function webhook() {
      const url = "https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages";
      const options = {
        "method": "post",
        "headers": {
          "Content-Type": "application/json; charset=UTF-8"
        },
        "payload": JSON.stringify({
          "text": "Hello from Apps Script!"
        })
      };
      const response = UrlFetchApp.fetch(url, options);
      Logger.log(response);
    }
  4. url 變數的值替換成您在步驟 1 中複製的 Webhook 網址:註冊傳入的 Webhook。

Java

  1. 在工作目錄中,建立名為 pom.xml 的檔案。

  2. pom.xml 中複製及貼上下列程式碼:

    java/Webhook/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.hangouts.chat.webhook</groupId>
      <artifactId>java-webhook-app</artifactId>
      <version>0.1.0</version>
    
      <name>java-webhook-app</name>
      <url>https://github.com/googleworkspace/hangouts-chat-samples/tree/main/java/webhook</url>
    
      <properties>
        <maven.compiler.target>11</maven.compiler.target>
        <maven.compiler.source>11</maven.compiler.source>
      </properties>
    
      <dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.9.1</version>
        </dependency>
      </dependencies>
    
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>
  3. 在工作目錄中,建立以下目錄結構 src/main/java

  4. src/main/java 目錄中,建立名為 App.java 的檔案。

  5. 複製並貼上 App.java 中的下列程式碼:

    java/Webhook/src/main/java/com/google/hangouts/chat/Webhook/App.java
    import com.google.gson.Gson;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    import java.util.Map;
    import java.net.URI;
    
    public class App {
      private static final String URL = "https://chat.googleapis.com/v1/spaces/AAAAGCYeSRY/messages";
      private static final Gson gson = new Gson();
      private static final HttpClient client = HttpClient.newHttpClient();
    
      public static void main(String[] args) throws Exception {
        String message = gson.toJson(Map.of("text", "Hello from Java!"));
    
        HttpRequest request = HttpRequest.newBuilder(
            URI.create(URL))
            .header("accept", "application/json; charset=UTF-8")
            .POST(HttpRequest.BodyPublishers.ofString(message))
            .build();
    
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    
        System.out.println(response.body());
      }
    }
  6. URL 變數的值替換成您在步驟 1 中複製的 Webhook 網址:註冊傳入的 Webhook。

步驟 3:執行 Webhook 指令碼

在 CLI 中從工作目錄執行下列指令,執行範例:

Python

  python3 quickstart.py

Node.js

  node index.js

Apps Script

  • 按一下「Run」

Java

  mvn compile exec:java -Dexec.mainClass=App

執行程式碼範例時,Webhook 會傳送訊息到您註冊的聊天室。

發起或回覆訊息串

您可以在 Webhook 網址中加入 threadKey 參數,藉此建立訊息串或回覆討論串。每個 threadKey 都與專門設定的應用程式有關。如果有兩個不同的即時通訊應用程式或 Webhook 設定相同的 threadKey,則兩個不同的執行緒會啟動。

發起討論串

如要張貼含有 Webhook 的對話串訊息,請將 threadKeymessageReplyOption 參數附加至 Webhook 網址。將 threadKey 設為任意字串,但提醒您,參數本身應重複使用,因此您必須再次指定它才能在執行緒中張貼回覆。

  https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?threadKey=ARBITRARY_STRING&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD

回覆討論串

如要將訊息傳送至現有的訊息串,請將 threadKeymessageReplyOption 參數附加至用來啟動執行緒的值的 Webhook 網址。舉例來說,若傳訊息到下列網址,則回覆了會話串:threadKeyMY-THREAD,而 messageReplyOptionREPLY_MESSAGE_FALLBACK_TO_NEW_THREAD

  https://chat.googleapis.com/v1/spaces/SPACE_ID/messages?threadKey=MY-THREAD&messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD

限制與注意事項

設定 Webhook 時,請注意下列限制和注意事項:

  • 每個 Webhook 只能在已註冊的 Chat 聊天室中使用。

  • 您無法在 Google Workspace Marketplace 中發布 Webhook。

  • Webhook 不是對話,使用者無法透過 Google Chat 回覆使用者或活動的訊息。

  • 如果只要選取網域中機構單位 (OU) 啟用 Chat 應用程式,傳入的 Webhook 會傳回下列錯誤:

    {
      "error": {
        "code": 403,
        "message": "The caller does not have permission",
        "status": "PERMISSION_DENIED"
      }
    }
    
  • 連入 Webhook 可在即時訊息中運作,但只有在所有使用者都已啟用 Chat 應用程式的情況下。

  • 由於「用於管理 Webhook 的圖示 管理 Webhook」僅適用於網路瀏覽器,因此您必須透過 Chat 網頁應用程式設定 Webhook。您無法透過 Chat 行動應用程式設定 Webhook。