着信 Webhook を使用して Google Chat にメッセージを送信する

受信 Webhook を使用すると、Chat アプリではないアプリケーションから Google Chat に非同期メッセージを送信できます。たとえば、サーバーがダウンしたときに Google Chat のオンコール担当者に通知するようにモニタリング アプリケーションを構成できます。

Chat アプリを使用した Chat スペース内のメッセージの非同期送信、更新、削除については、メッセージの作成、読み取り、更新、削除をご覧ください。

受信 Webhook が Google Chat に非同期メッセージを送信するためのアーキテクチャ。

Prerequisites

このガイドのサンプルを実行するには、次の準備が必要です。

Python

  • Python 3.10.7 以降
  • インターネットとウェブブラウザへのアクセス。
  • Google Chat にアクセスできる Google Workspace アカウント
  • 既存の Google Chat スペース。
  • httplib2 ライブラリ。必要に応じて、次のコマンドライン インターフェース(CLI)コマンドを実行して、pip を使用してライブラリをインストールします。

    pip install httplib2
    

Node.js

  • Node.js と npm がインストールされていること。
  • インターネットとウェブブラウザへのアクセス。
  • Google Chat にアクセスできる Google Workspace アカウント
  • 既存の Google Chat スペース。

Apps Script

  • インターネットとウェブブラウザへのアクセス。
  • Google Chat にアクセスできる Google Workspace アカウント
  • 既存の Google Chat スペース。

Java

  • Java 11 以降
  • Apache Maven
  • インターネットとウェブブラウザへのアクセス。
  • Google Chat にアクセスできる Google Workspace アカウント
  • 既存の Google Chat スペース。

Webhook を作成する

Webhook を作成するには、メッセージを受信する Google Chat スペースに登録し、メッセージを送信するスクリプトを作成します。

ステップ 1: 受信 Webhook を登録する

  1. ウェブブラウザで Google Chat を開きます。
  2. Webhook を追加するスペースに移動します。
  3. 上部のスペースのタイトルの横にある下矢印 > [アプリと統合] をクリックします。
  4. [Webhook の管理] をクリックします。
  5. このスペースにすでに他の Webhook がある場合は、[別の Webhook を追加] をクリックします。それ以外の場合は、この手順をスキップします。
  6. [名前] に「Quickstart Webhook」と入力します。
  7. [アバターの URL] に「https://developers.google.com/chat/images/chat-product-icon.png」と入力します。
  8. [保存] をクリックします。
  9. 完全な Webhook URL をコピーするには、[ コピー] をクリックします。
  10. ボックスの外側をクリックして [受信した Webhook] ダイアログを閉じます。

ステップ 2: Webhook スクリプトを作成する

この例の Webhook スクリプトは、Webhook URL に create message リクエストを POST 送信して、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 URL に置き換えます。

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 URL に置き換えます。

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 URL に置き換えます。

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 URL に置き換えます。

ステップ 3: Webhook スクリプトを実行する

CLI の作業ディレクトリから次のコマンドを実行して、サンプルを実行します。

Python

  python3 quickstart.py

Node.js

  node index.js

Apps Script

  • [実行] をクリックします。

Java

  mvn compile exec:java -Dexec.mainClass=App

サンプルコードを実行すると、Webhook は入力したスペースにメッセージを送信します。

メッセージ スレッドを開始または返信する

メッセージ スレッドを開始するか、メッセージ スレッドに返信するには、Webhook URL に threadKey パラメータを追加します。各 threadKey は、それを設定するアプリに固有のものです。2 つの異なる Chat アプリまたは Webhook が同じ threadKey を設定した場合、2 つの異なるスレッドが開始されます。

メッセージ スレッドを開始する

Webhook を使用してスレッドの最初のメッセージを送信するには、Webhook URL に threadKey パラメータと messageReplyOption パラメータを追加します。threadKey は任意の文字列に設定しますが、この名前は思い出してください。スレッドへの返信を投稿するには、再度これを指定する必要があります。

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

メッセージ スレッドに返信する

既存のメッセージ スレッドにメッセージを送信するには、スレッドの開始に使用する値に設定された Webhook URL に threadKey パラメータと messageReplyOption パラメータを追加します。たとえば、次の URL にメッセージを送信すると、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)のみを選択してチャットアプリを有効にすると、受信 Webhook が次のエラーを返します。

    {
      "error": {
        "code": 403,
        "message": "The caller does not have permission",
        "status": "PERMISSION_DENIED"
      }
    }
    
  • 着信 Webhook はダイレクト メッセージで機能しますが、すべてのユーザーがチャットアプリを有効にしている場合に限ります。

  • Webhook 管理のアイコン Webhook の管理はウェブブラウザからしか利用できないため、Webhook は Chat ウェブアプリから設定する必要があります。Webhook は Chat モバイルアプリでは設定できません。