このページでは、外部トリガーを使用して 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 アプリを操作することはできません。
前提条件
Node.js
- Google Chat へのアクセス権を持つ Business または Enterprise Google Workspace アカウント Google Chat。 Google Workspace 組織では、ユーザーが 受信 Webhook を追加して使用できるようにする必要があります。
- Node.js 14 以降
- npm パッケージ管理ツール
- Google Chat スペース。Google Chat API を使用して作成するには、 スペースを作成するをご覧ください。Chat で作成するには、 次の ヘルプセンターのドキュメントをご覧ください。
Python
- Google Chat へのアクセス権を持つ Business または Enterprise Google Workspace アカウント Google Chat。 Google Workspace 組織では、ユーザーが 受信 Webhook を追加して使用できるようにする必要があります。
- Python 3.6 以降
- pip パッケージ管理ツール
httplib2ライブラリ。ライブラリをインストールするには、コマンドライン インターフェースで次のコマンドを実行します。pip install httplib2Google Chat スペース。Google Chat API を使用して作成するには、 スペースを作成するをご覧ください。Chat で作成するには、 次の ヘルプセンターのドキュメントをご覧ください。
Java
- Google Chat へのアクセス権を持つ Business または Enterprise Google Workspace アカウント Google Chat。 Google Workspace 組織では、ユーザーが 受信 Webhook を追加して使用できるようにする必要があります。
- Java 11 以降
- Maven パッケージ管理ツール
- Google Chat スペース。Google Chat API を使用して作成するには、 スペースを作成するをご覧ください。Chat で作成するには、 次の ヘルプセンターのドキュメントをご覧ください。
Apps Script
- Google Chat へのアクセス権を持つ Business または Enterprise Google Workspace アカウント Google Chat。 Google Workspace 組織では、ユーザーが 受信 Webhook を追加して使用できるようにする必要があります。
- スタンドアロンの Apps Script プロジェクトを作成し、 高度な Chat サービスを有効にします。
- Google Chat スペース。Google Chat API を使用して作成するには、 スペースを作成するをご覧ください。Chat で作成するには、 次の ヘルプセンターのドキュメントをご覧ください。
Webhook を作成する
Webhook を作成するには、メッセージを受信する Chat スペースに登録し、メッセージを送信するスクリプトを作成します。
受信 Webhook を登録する
- ブラウザで Chatを開きます。 Webhook は Chat モバイルアプリから構成できません。
- Webhook を追加するスペースに移動します。
- スペース タイトルの横にある [詳細] 矢印をクリックし、[アプリとインテグレーション] をクリックします。
[**Webhook を追加**] をクリックします。
[名前] フィールドに「
Quickstart Webhook」と入力します。[アバターの URL] フィールドに
https://developers.google.com/chat/images/chat-product-icon.pngと入力します。[保存] をクリックします。
Webhook URL をコピーするには、 [More] をクリックし、 [Copy link] をクリックします。
Webhook URL には、Webhook 間で共有される共通の値である
keyと、Webhook のセキュリティを維持するために秘密にしておく必要がある一意の値であるtokenの 2 つのパラメータが含まれています。
Webhook スクリプトを作成する
Webhook スクリプトの例では、Webhook URL に POST リクエストを送信して、Webhook が登録されているスペースにメッセージを送信します。Chat API は
Message のインスタンスを返します。
Webhook スクリプトの作成方法については、言語を選択してください。
Node.js
作業ディレクトリに
index.jsという名前のファイルを作成します。index.jsに次のコードを貼り付けます。url変数の値を、Webhook の登録時にコピーした Webhook URL に置き換えます。
Python
作業ディレクトリに
quickstart.pyという名前のファイルを作成します。quickstart.pyに次のコードを貼り付けます。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 で次のスクリプトを実行します。
Node.js
node index.jsPython
python3 quickstart.pyJava
mvn compile exec:java -Dexec.mainClass=AppApps 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をご覧ください。
次のコードサンプルは、メッセージ スレッドを開始または返信します。
Node.js
Python
Java
Apps Script
エラーを処理する
Webhook リクエストは、次のようなさまざまな理由で失敗する可能性があります。
- リクエストが無効です。
- Webhook または Webhook をホストするスペースが削除されました。
- ネットワーク接続や割り当て上限など、断続的な問題。
Webhook を構築する際は、次の方法でエラーを適切に処理する必要があります。
- 失敗をロギングする。
- 時間ベース、割り当て、ネットワーク接続のエラーの場合は、 指数バックオフを使用してリクエストを再試行する。
- Webhook メッセージの送信が重要でない場合は、何も行わない。
Google Chat API は、エラーを
google.rpc.Statusとして返します。これには、発生したエラーのタイプを示す HTTP エラー code(クライアント エラー(400 シリーズ)またはサーバー エラー(500 シリーズ))が含まれます。すべての HTTP マッピングを確認するには、
google.rpc.Code をご覧ください。
{
"code": 503,
"message": "The service is currently unavailable.",
"status": "UNAVAILABLE"
}
HTTP ステータス コードの解釈方法とエラーの処理方法については、 エラーをご覧ください。
制限事項と考慮事項
- Google Chat API で Webhook を使用してメッセージを作成する
場合、レスポンスにメッセージ全体は含まれません。
レスポンスには
nameフィールドとthread.nameフィールドのみが入力されます。 - Webhook には、スペース内のすべての Webhook で共有される、
spaces.messages.createのスペースごとの割り当て(1 秒あたり 1 リクエスト)が適用されます。 また、同じスペースで 1 秒あたり 1 クエリを超える Webhook リクエストは拒否されることがあります。Chat API の割り当てについて詳しくは、使用量の制限をご覧ください。