このページでは、Google Chat アプリがユーザー操作(Google Chat アプリの操作イベントとも呼ばれます)を受信して応答する方法について説明します。
このページでは、次の操作を行う方法について説明します。
- インタラクション イベントを受信するように Chat アプリを構成します。
- インフラストラクチャでインタラクション イベントを処理します。
- 必要に応じて、操作イベントに応答します。
前提条件
インタラクティブ機能を有効にする Google Chat アプリ。インタラクティブな Chat アプリを作成するには、使用するアプリのアーキテクチャに基づいて、次のいずれかのクイックスタートを完了します。
- Google Cloud Functions による HTTP サービス
- Google Apps Script
- Google Cloud Dialogflow CX
- Google Cloud Pub/Sub
インタラクション イベントの種類
Google Chat アプリの操作イベントは、Chat 用アプリへの名前リンクやスペースへの追加など、ユーザーが Chat 用アプリを呼び出したり操作したりするアクションを表します。
ユーザーが Chat アプリを操作すると、Google Chat は Chat アプリにインタラクション イベントを送信します。このイベントは、Chat API では Event
型で表されます。Chat アプリは、このイベントを使用してインタラクションを処理し、必要に応じてメッセージで応答できます。
Google Chat は、ユーザー操作の種類ごとに異なる種類のインタラクション イベントを送信します。これにより、Chat アプリは各イベント タイプに応じて処理できます。操作イベントの種類は、eventType
オブジェクトを使用して表されます。
たとえば、Google Chat では、ユーザーが Chat アプリをスペースに追加する操作に対してイベントタイプ ADDED_TO_SPACE
が使用されるため、Chat アプリはすぐにスペースでウェルカム メッセージを返信できます。
次の表に、一般的なユーザー操作、Chat アプリが受信するインタラクション イベントの種類、Chat アプリが通常どのように応答するかを示します。
ユーザー操作 | eventType |
Chat アプリからの一般的なレスポンス |
---|---|---|
ユーザーが Chat 用アプリを呼び出すには、@ 名前リンクを付けるか、スラッシュ コマンドを使用します。 | MESSAGE |
Chat アプリは、メッセージの内容に基づいて応答します。たとえば、Chat アプリは /about コマンドに、Chat アプリが実行できるタスクを説明するメッセージを返します。 |
ユーザーがスペースに Chat 用アプリを追加します。 | ADDED_TO_SPACE |
Chat アプリは、その機能とスペース内のユーザーがどのように操作できるかについて説明するオンボーディング メッセージを送信します。 |
ユーザーがスペースから Chat アプリを削除します。 | REMOVED_FROM_SPACE |
Chat アプリは、スペース用に構成された受信通知を削除し(Webhook の削除など)、内部ストレージを消去します。 |
ユーザーが Chat アプリのメッセージ、ダイアログ、ホームページからカードのボタンをクリックします。 | CARD_CLICKED |
チャットアプリは、ユーザーが送信したデータを処理して保存するか、別のカードを返します。 |
ユーザーが 1 対 1 のメッセージの [ホーム] タブをクリックして、Chat アプリのホームページを開きます。 | APP_HOME |
Chat アプリは、ホームページから静的またはインタラクティブなカードを返します。 |
ユーザーが Chat アプリのホームページからフォームを送信します。 | SUBMIT_FORM |
チャットアプリは、ユーザーが送信したデータを処理して保存するか、別のカードを返します。 |
サポートされているすべてのインタラクション イベントについては、EventType
リファレンス ドキュメントをご覧ください。
ダイアログからのインタラクション イベント
Chat アプリでダイアログを開いた場合、インタラクション イベントには、レスポンスの処理に使用できる次の追加情報が含まれます。
isDialogEvent
はtrue
に設定します。DialogEventType
は、インタラクションによってダイアログが開くのか、ダイアログから情報が送信されるのか、ダイアログが閉じられるのかを明確にします。
次の表に、ダイアログとの一般的なやり取り、対応するダイアログ イベントの種類、Chat アプリが通常どのように応答するかを示します。
ユーザーによるダイアログの操作 | ダイアログ イベントのタイプ | 一般的な回答 |
---|---|---|
ユーザーがダイアログ リクエストをトリガーします。たとえば、スラッシュ コマンドを使用するか、メッセージのボタンをクリックします。 | REQUEST_DIALOG |
Chat アプリでダイアログが開きます。 |
ユーザーがボタンをクリックして、ダイアログ内の情報を送信します。 | SUBMIT_DIALOG |
チャットアプリは、別のダイアログに移動するか、ダイアログを閉じて操作を完了します。 |
ユーザーが情報を送信する前にダイアログを終了または閉じる。 | CANCEL_DIALOG |
必要に応じて、Chat アプリは新しいメッセージで応答したり、ユーザーがダイアログを開いたメッセージまたはカードを更新したりできます。 |
詳細については、ダイアログを開いて応答するをご覧ください。
Chat アプリの操作イベントを受信する
このセクションでは、Chat 用アプリのインタラクション イベントを受信して処理する方法について説明します。
インタラクション イベントを受信するように Chat アプリを構成する
すべての Chat アプリがインタラクティブであるとは限りません。たとえば、受信 Webhook は送信メッセージのみ送信でき、ユーザーに応答することはできません。インタラクティブな Chat アプリを構築する場合は、Chat アプリがインタラクション イベントを受信、処理、応答できるようにするエンドポイントを選択する必要があります。Chat アプリの設計について詳しくは、Chat アプリの実装アーキテクチャをご覧ください。
作成するインタラクティブな機能ごとに、Google Chat が関連するインタラクション イベントを Chat アプリに送信できるように、Chat API の構成を更新する必要があります。
Google Cloud コンソールで Chat API ページに移動し、[構成] ページをクリックします。
[インタラクティブ機能] で設定を確認し、作成する機能に基づいて更新します。
フィールド 説明 機能 必須。Chat アプリがユーザーとやり取りする方法を決定する一連のフィールド: - 1 対 1 のメッセージを受信する: ユーザーは Google Chat で直接 Chat アプリを見つけてメッセージを送信できます。
- スペースとグループの会話に参加する: ユーザーは、スペースとグループの会話に Chat アプリを追加できます。
接続設定 必須。Chat アプリのエンドポイント。次のいずれかです。 - HTTP エンドポイント URL: Chat 用アプリの実装をホストする HTTPS エンドポイント。
- Apps Script: Chat アプリを実装する Apps Script プロジェクトのデプロイ ID。
- Cloud Pub/Sub トピック名: Chat アプリがエンドポイントとしてサブスクライブする Pub/Sub トピック。
- Dialogflow: Dialogflow 統合で Chat アプリを登録します。詳細については、自然言語を理解する Dialogflow Google Chat アプリを構築するをご覧ください。
スラッシュ コマンド 省略可。Google Chat 内でユーザーに表示できるコマンド。ユーザーは Google Chat 内で Chat 用アプリの主要なアクションを確認し、操作したい特定のアクションを選択できます。詳細については、Chat アプリとしてスラッシュ コマンドに応答するをご覧ください。 リンク プレビュー 省略可。チャットアプリが認識し、ユーザーがリンクを送信したときに追加コンテンツを提供できる URL パターン。詳細については、プレビュー リンクをご覧ください。 公開設定 省略可。Chat 用アプリを表示してインストールできる最大 5 人または 1 つ以上の Google グループ。このフィールドを使用して、Chat 用アプリをテストしたり、Chat 用アプリをチームと共有したりできます。詳細については、インタラクティブ機能をテストするをご覧ください。 [保存] をクリックします。Chat アプリの構成を保存すると、Google Workspace 組織内の指定したユーザーが Chat アプリを使用できるようになります。
これで、Google Chat からインタラクション イベントを受信するように Chat アプリが構成されました。
サービスへの HTTP 呼び出しの再試行を処理する
サービスへの HTTPS リクエストが失敗した場合(タイムアウト、一時的なネットワーク障害、2xx 以外の HTTPS ステータス コードなど)、Google Chat は数分以内に配信を数回再試行することがあります(ただし、配信を保証するものではありません)。そのため、特定の状況では、Chat アプリが同じメッセージを複数回受信することがあります。リクエストが正常に完了しても無効なメッセージ ペイロードが返された場合、Google Chat はリクエストを再試行しません。
インタラクション イベントを処理または応答する
このセクションでは、Google Chat アプリがインタラクション イベントを処理して応答する方法について説明します。
Chat アプリは、Google Chat からインタラクション イベントを受信すると、さまざまな方法で応答できます。多くの場合、インタラクティブな Chat アプリは、ユーザーにメッセージで応答します。Google Chat アプリは、データソースから情報を検索したり、インタラクション イベント情報を記録したりすることもできます。この処理動作が、基本的に Google Chat アプリを定義するものです。
同期的に応答するには、Chat アプリが 30 秒以内に応答し、やり取りが発生したスペースにレスポンスを投稿する必要があります。それ以外の場合、Chat アプリは非同期で応答できます。
インタラクション イベントごとに、Chat アプリはリクエスト本文を受け取ります。これは、イベントを表す JSON ペイロードです。この情報を使用してレスポンスを処理できます。イベント ペイロードの例については、Chat アプリのインタラクション イベントの種類をご覧ください。
次の図は、Google Chat アプリが通常、さまざまな種類のインタラクション イベントを処理または応答する方法を示しています。
リアルタイムで回答を表示
インタラクション イベントを使用すると、Chat アプリはリアルタイムまたは同期で応答できます。同期レスポンスでは認証は必要ありません。
Chat アプリがリアルタイムで応答するには、Message
オブジェクトを返す必要があります。スペースでメッセージで返信するには、Message
オブジェクトに text
、cardsV2
、accessoryWidgets
の各オブジェクトを含めることができます。他の種類のレスポンスで使用する場合は、次のガイドをご覧ください。
メッセージで応答
この例では、Chat アプリがスペースに追加されるたびにテキスト メッセージを作成して送信します。ユーザーのオンボーディングに関するベスト プラクティスについては、ユーザーに Chat 用アプリを紹介するをご覧ください。
ユーザーが Chat 用アプリをスペースに追加したときにテキスト メッセージを送信するには、Chat 用アプリが ADDED_TO_SPACE
インタラクション イベントに応答します。ADDED_TO_SPACE
インタラクション イベントにテキスト メッセージで応答するには、次のコードを使用します。
Node.js
/**
* Sends an onboarding message when the Chat app is added to a space.
*
* @param {Object} req The event object from Chat API.
* @param {Object} res The response object from the Chat app. An onboarding message that
* introduces the app and helps people get started with it.
*/
exports.onMessage = function onMessage(req, res) {
if (req.method === 'GET' || !req.body.message) {
res.send(
'Hello! This function is meant to be used in a Google Chat space.');
}
// Send an onboarding message when added to a Chat space
if (req.body.type === 'ADDED_TO_SPACE') {
res.json({
'text': 'Hi, Cymbal at your service. I help you manage your calendar
from Google Chat. Take a look at your schedule today by typing
`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To
learn what else I can do, type `/help`.'
});
}
};
Apps Script
/**
* Sends an onboarding message when the Chat app is added to a space.
*
* @param {Object} event The event object from Chat API.
* @return {Object} Response from the Chat app. An onboarding message that
* introduces the app and helps people get started with it.
*/
function onAddToSpace(event) {
return {
'text': 'Hi, Cymbal at your service. I help you manage your calendar
from Google Chat. Take a look at your schedule today by typing
`/checkCalendar`, or schedule a meeting with `/scheduleMeeting`. To learn
what else I can do, type `/help`.'
}
}
このコードサンプルは、次のテキスト メッセージを返します。
非同期で応答する
チャットアプリは、30 秒後にインタラクション イベントに応答したり、インタラクション イベントが生成されたスペースの外部でタスクを実行したりする必要がある場合があります。たとえば、長時間実行タスクの完了後にユーザーに応答する必要があるチャットアプリなどです。この場合、Chat アプリは Google Chat API を呼び出して非同期で応答できます。
Chat API を使用してメッセージを作成するには、メッセージを作成するをご覧ください。その他の Chat API メソッドの使用方法については、Chat API の概要をご覧ください。
関連トピック
- メッセージを送信する
- インタラクティブ ダイアログを開く
- プレビュー リンク
- カードでユーザーが入力したフォームデータを読み取る
- スラッシュ コマンドへの応答
- Chat アプリのホームページを作成する
- Chat からのリクエストを確認する
- Google Chat アプリのインタラクティブ機能をテストする