このページでは、外部トリガーを使用して非同期メッセージを 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 へのアクセス権を持つビジネスまたはエンタープライズ 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 へのアクセス権を持つビジネスまたはエンタープライズ向け Google Workspace アカウント。Google Workspace 組織で、ユーザーが着信 Webhook を追加して使用できるようにする必要があります。
- Java 11 以降
- Maven パッケージ管理ツール
- Google Chat のスペース。Google Chat API を使用して作成するには、スペースを作成するをご覧ください。Chat で作成するには、ヘルプセンターのドキュメントをご覧ください。
Apps Script
- Google Chat へのアクセス権を持つビジネスまたはエンタープライズ Google Workspace アカウント。Google Workspace 組織で、ユーザーが着信 Webhook を追加して使用できるようにする必要があります。
- スタンドアロンの Apps Script プロジェクトを作成し、Advanced Chat Service を有効にします。
- 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 をコピーするには、
[その他]、 [リンクをコピー] の順にクリックします。
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
に対応する新しいスレッドを開始します。スレッドに返信するか、何もしないかを選択します。Webhook URL に
messageReplyOption=REPLY_MESSAGE_OR_FAIL
パラメータを追加します。この 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
フィールドのみが入力されます。 - Webhook には、スペースごとの 60 秒あたり 60 回のクエリの上限が適用されます。この上限は、スペース内のすべての Chat アプリで共有されます。
spaces.messages.create
Chat API の割り当ての詳細については、使用制限をご覧ください。