このページでは、外部トリガーを使用して Chat スペースに非同期メッセージを送信する Webhook の設定方法について説明します。たとえば、サーバーが停止したときに Chat でオンコール担当者に通知するようにモニタリング アプリケーションを構成できます。Chat アプリで同期メッセージを送信するには、メッセージを送信するをご覧ください。
このタイプのアーキテクチャ設計では、通信は一方向であるため、ユーザーは Webhook や接続された外部アプリケーションを操作できません。Webhook は会話型ではありません。ユーザーや Chat 用アプリの操作イベントに返信したり、メッセージを受信したりすることはできません。メッセージに応答するには、Webhook ではなく Chat アプリをビルドします。
Webhook は厳密には Chat アプリではありませんが、Webhook は標準の HTTP リクエストを使用してアプリケーションに接続しますが、このページでは簡略化のために Chat アプリと呼んでいます。各 Webhook は、登録されている Chat スペースでのみ機能します。受信 Webhook はダイレクト メッセージで機能しますが、すべてのユーザーが Chat アプリを有効にしている場合に限られます。Webhook を Google Workspace Marketplace に公開することはできません。
次の図は、Chat に接続された Webhook のアーキテクチャを示しています。
上の図では、Chat 用アプリに次の情報のフローがあります。
- Chat アプリのロジックは、プロジェクト管理システムやチケット発行ツールなど、外部のサードパーティ サービスから情報を受け取ります。
- Chat アプリのロジックは、Webhook URL を使用して特定の Chat スペースにメッセージを送信できるクラウドまたはオンプレミス システムでホストされます。
- ユーザーは、その特定の Chat スペースで Chat 用アプリのメッセージを受信できますが、Chat 用アプリを操作することはできません。
前提条件
Python
- Google Chat にアクセスできる Business または Enterprise の Google Workspace アカウント。Google Workspace 組織で、ユーザーが着信 Webhook を追加して使用できるようにする必要があります。
- Python 3.6 以降
- pip パッケージ管理ツール
httplib2
ライブラリ。ライブラリをインストールするには、コマンドライン インターフェースで次のコマンドを実行します。pip install httplib2
Google Chat スペース。Google Chat API を使用してスペースを作成するには、スペースを作成するをご覧ください。Chat で作成する方法については、ヘルプセンターの記事をご覧ください。
Node.js
- Google Chat へのアクセス権を持つビジネスまたはエンタープライズ Google Workspace アカウント。Google Workspace の組織で、ユーザーが着信 Webhook を追加して使用できるようにする必要があります。
- Node.js 14 以降
- npm パッケージ管理ツール
- Google Chat のスペース。Google Chat API を使用してスペースを作成するには、スペースを作成するをご覧ください。Chat で作成するには、ヘルプセンターのドキュメントをご覧ください。
Java
- Google Chat にアクセスできる Business または Enterprise の Google Workspace アカウント。Google Workspace の組織で、ユーザーが着信 Webhook を追加して使用できるようにする必要があります。
- Java 11 以降
- Maven パッケージ管理ツール
- Google Chat のスペース。Google Chat API を使用してスペースを作成するには、スペースを作成するをご覧ください。Chat で作成する方法については、ヘルプセンターの記事をご覧ください。
Apps Script
- Google Chat にアクセスできる Business または Enterprise の Google Workspace アカウント。Google Workspace 組織で、ユーザーが着信 Webhook を追加して使用できるようにする必要があります。
- スタンドアロンの Apps Script プロジェクトを作成し、Advanced Chat Service をオンにします。
- Google Chat スペース。Google Chat API を使用して作成するには、スペースを作成するをご覧ください。Chat で作成する方法については、ヘルプセンターの記事をご覧ください。
Webhook を作成する
Webhook を作成するには、メッセージを受信する Chat スペースに登録し、メッセージを送信するスクリプトを作成します。
着信 Webhook を登録する
- ブラウザで Chat を開きます。Chat モバイルアプリから Webhook を構成することはできません。
- Webhook を追加するスペースに移動します。
- スペースのタイトルの横にある 展開矢印をクリックし、[アプリとインテグレーション] をクリックします。
[
Webhook を追加] をクリックします。[名前] フィールドに「
Quickstart Webhook
」と入力します。[アバターの URL] フィールドに「
https://developers.google.com/chat/images/chat-product-icon.png
」と入力します。[保存] をクリックします。
Webhook URL をコピーするには、
[その他] をクリックし、 [リンクをコピー] をクリックします。
Webhook スクリプトを作成する
サンプル Webhook スクリプトは、Webhook URL に POST
リクエストを送信することで、Webhook が登録されているスペースにメッセージを送信します。Chat API は Message
のインスタンスを返します。
Webhook スクリプトの作成方法を確認する言語を選択します。
Python
作業ディレクトリに、
quickstart.py
という名前のファイルを作成します。quickstart.py
に次のコードを貼り付けます。url
変数の値は、Webhook の登録時にコピーした Webhook URL に置き換えます。
Node.js
作業ディレクトリに
index.js
という名前のファイルを作成します。index.js
に次のコードを貼り付けます。url
変数の値は、Webhook の登録時にコピーした Webhook URL に置き換えます。
Java
作業ディレクトリに、
pom.xml
という名前のファイルを作成します。pom.xml
に、次のコードをコピーして貼り付けます。作業ディレクトリに、次のディレクトリ構造
src/main/java
を作成します。src/main/java
ディレクトリに、App.java
という名前のファイルを作成します。App.java
に次のコードを貼り付けます。URL
変数の値は、Webhook の登録時にコピーした Webhook URL に置き換えます。
Apps Script
ブラウザで Apps Script にアクセスします。
[新しいプロジェクト] をクリックします。
次のコードを貼り付けます。
url
変数の値は、Webhook の登録時にコピーした Webhook URL に置き換えます。
Webhook スクリプトを実行する
CLI でスクリプトを実行します。
Python
python3 quickstart.py
Node.js
node index.js
Java
mvn compile exec:java -Dexec.mainClass=App
Apps Script
- [実行] をクリックします。
コードを実行すると、Webhook はそれを登録したスペースにメッセージを送信します。
メッセージ スレッドを開始または返信する
メッセージ リクエスト本文の一部として
spaces.messages.thread.threadKey
を指定します。スレッドを開始する場合とスレッドに返信する場合に応じて、threadKey
に次の値を使用します。スレッドを開始する場合は、
threadKey
を任意の文字列に設定します。ただし、スレッドに返信を投稿する際にこの値をメモしておいてください。スレッドに返信する場合は、スレッドの開始時に設定された
threadKey
を指定します。たとえば、最初のメッセージがMY-THREAD
を使用していたスレッドに返信を投稿するには、MY-THREAD
を設定します。
指定された
threadKey
が見つからない場合のスレッドの動作を定義します。スレッドに返信するか、新しいスレッドを開始します。
messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD
パラメータを Webhook URL に追加します。この URL パラメータを渡すと、Chat は指定されたthreadKey
を使用して既存のスレッドを検索します。見つかった場合、メッセージはそのスレッドへの返信として投稿されます。見つからない場合、メッセージは、そのthreadKey
に対応する新しいスレッドを開始します。スレッドに返信するか、何もしません。
messageReplyOption=REPLY_MESSAGE_OR_FAIL
パラメータを Webhook URL に追加します。この URL パラメータを渡すと、Chat は指定されたthreadKey
を使用して既存のスレッドを検索します。見つかった場合は、そのスレッドへの返信としてメッセージが投稿されます。何も見つからない場合、メッセージは送信されません。
詳しくは、
messageReplyOption
をご覧ください。
次のコードサンプルは、メッセージ スレッドを開始または返信します。
Python
Node.js
Apps Script
エラーを処理する
Webhook リクエストは、次のようなさまざまな理由で失敗することがあります。
- リクエストが無効です。
- Webhook または Webhook をホストするスペースが削除された。
- ネットワーク接続や割り当て上限など、断続的に発生する問題。
Webhook を作成する際には、次の方法でエラーを適切に処理する必要があります。
- エラーをロギングします。
- 時間ベースの接続エラー、割り当てエラー、またはネットワーク接続エラーの場合は、指数バックオフでリクエストを再試行します。
- 何もしない(Webhook メッセージの送信が重要でない場合)。
Google Chat API は、エラーを google.rpc.Status
として返します。これには、発生したエラーのタイプ(クライアント エラー(400 シリーズ)またはサーバーエラー(500 シリーズ))を示す HTTP エラー code
が含まれます。すべての HTTP マッピングを確認するには、google.rpc.Code
をご覧ください。
{
"code": 503,
"message": "The service is currently unavailable.",
"status": "UNAVAILABLE"
}
HTTP ステータス コードを解釈してエラーを処理する方法については、エラーをご覧ください。
制限事項と考慮事項
- Google Chat API で Webhook を使用してメッセージを作成すると、レスポンスにメッセージ全体が含まれません。レスポンスでは、
name
フィールドとthread.name
フィールドにデータが入力されます。