このページでは、Google Chat アプリが Google Chat でユーザー インタラクションを受信して応答する方法について説明します。
Chat 用アプリのインタラクティブなインターフェースを構築するには、次のコンポーネントを使用します。
- トリガー: Google Chat ユーザーが Chat 用アプリを呼び出す方法(スペースへの追加、メッセージの送信など)。
- イベント オブジェクト: Chat 用アプリがトリガーまたは UI インタラクションから受信するデータ。
- アクション: Chat 用アプリがインタラクションに応答する方法(メッセージの送信、カードベースのユーザー インターフェースの返却など)。
Chat 用アプリは、次の方法でインターフェースを構築して表示できます。
- メッセージ。テキスト、静的カードまたはインタラクティブ カード、アクセサリー ボタンを含めることができます。
- Chat アプリとの 1 対 1 のダイレクト メッセージの [ホーム] タブに表示されるホームページ(アプリホーム)。
- ダイアログ。新しいウィンドウで開くカードで、通常はユーザーに情報の送信を促します。
- リンク プレビュー。外部サービスに関する情報をプレビューするカードです。
前提条件
- Google Chat へのアクセス権を持つ Business または Enterprise の Google Workspace アカウント。
- Google Cloud プロジェクトを作成します。
- OAuth 同意画面を構成する。
- Google Chat API を有効にして構成する。
ユーザー インタラクションの仕組み
ユーザーが Chat 用アプリを操作すると、Google Chat は構成済みのトリガーを呼び出し、Chat 用アプリのエンドポイントまたは関数にイベント オブジェクトを送信します。Chat アプリはイベント オブジェクトを処理し、30 秒以内にアクションを同期的に返すか、Chat API を使用して非同期的に応答できます。
次の図は、Google Chat 用アプリがユーザー インタラクションを処理して応答する方法を示しています。
トリガー
トリガーは、ユーザーが Chat UI を使用して Chat 用アプリを呼び出す特定の方法です。たとえば、@メンションやアプリコマンドを使用します。
次の表に、Chat トリガー、説明、Chat アプリの一般的な応答を示します。
| トリガー | 説明 | 一般的な回答 |
|---|---|---|
| スペースへの追加 |
ユーザーがスペースに Chat アプリを追加するか、Google Workspace 管理者が組織内のユーザーのダイレクト メッセージ スペースに Chat アプリをインストールします。管理者がインストールした Chat 用アプリについて詳しくは、Google Workspace 管理者用ヘルプ ドキュメントのドメインに Marketplace アプリをインストールするをご覧ください。 |
Chat 用アプリは、その機能とスペース内のユーザーがアプリを操作する方法を説明するオンボーディング メッセージを送信します。 |
| メッセージ |
ユーザーが次のいずれかの方法でメッセージ内の Chat 用アプリを操作します。
|
Chat 用アプリは、メッセージの内容に基づいて応答します。たとえば、Chat アプリはメッセージで返信したり、リンク プレビュー カードを添付したり、複数選択メニューでアイテムを提案したりします。 |
| スペースからの削除 |
ユーザーがスペースから Chat 用アプリを削除するか、Google Workspace 管理者が組織内のユーザーの Chat 用アプリをアンインストールします。 管理者がインストールした Chat 用アプリをユーザーが削除することはできません。ユーザーが以前に Chat 用アプリをインストールしていた場合、Google Workspace 管理者がアンインストールしようとしても、Chat 用アプリはインストールされたままになります。 |
Chat 用アプリは、スペースに設定されている受信通知を削除し(ウェブフックの削除など)、内部ストレージをクリアします。Chat 用アプリはスペースのメンバーではなくなったため、このトリガーにメッセージで応答することはできません。 |
| アプリコマンド |
ユーザーが Chat アプリのコマンド(スラッシュ コマンド、クイック コマンド、メッセージ アクションなど)を呼び出します。 |
Chat 用アプリがコマンドに応答します。たとえば、メッセージで返信したり、ダイアログを開いたりします。 |
| アプリのホーム |
ユーザーが Chat アプリとの 1 対 1 のダイレクト メッセージ(DM)スペースで [ホーム] タブを開くか、ホームページ カードのウィジェットを操作します。 |
Chat 用アプリは、ホームページ カードをプッシュする(pushCard)か、表示されているホームページ カードを更新する(updateCard)RenderActions オブジェクトを返します。 |
これらのトリガーのエンドポイントまたはコールバック関数は、Google Cloud コンソールの Chat API の [構成] ページで構成します。手順については、Google Chat API を構成するをご覧ください。
スターター プロンプトを構成する
スターター プロンプトは、ユーザーがアプリとの空の 1 対 1 のダイレクト メッセージを開いたときに、Chat アプリの機能を検出するのに役立ちます。スターター プロンプトは最大 3 つ構成できます。
スターター プロンプトを追加して構成するには:
Google Cloud コンソールで、Chat API の [構成] ページに移動します。
[インタラクティブ機能] で [スターター プロンプト] を見つけ、[プロンプトを追加] をクリックします。
[Rank (1-3)] フィールドに、
1から3までの数値を入力して、表示順を指定します。[タイプを選択] で、プロンプトの動作を選択します。
- テキスト プロンプト: ユーザーがプロンプト チップをクリックすると、事前定義されたテキストが入力バーに入力されます。
- コマンド プロンプト: クリックすると、登録済みのスラッシュ コマンドまたはクイック コマンドが実行されます。追加の引数が必要なコマンドは選択できません。
選択したタイプに基づいてプロンプトを構成します。
[テキスト プロンプト] を選択した場合:
- [タイトル] に、チップに表示されるプロンプトのタイトルを入力します(最大 30 文字)。
- [プロンプト テキスト] に、入力バーに表示されるテキストを入力します(最大 60 文字)。
- 省略可: 他の言語のユーザー向けに、ローカライズされたタイトルとテキストを追加します。
- [ローカライズされたプロンプト] で、[言語を追加] をクリックします。
- [言語] で、プルダウンからサポートされている言語を選択します。
- [ローカライズされたタイトル] に、ローカライズされたタイトルを入力します(30 文字以内)。
- [ローカライズされたプロンプト テキスト] に、ローカライズされたプロンプト テキスト(最大 60 文字)を入力します。
- 必要に応じて、この操作を繰り返して言語を追加します。
[コマンド プロンプト] を選択した場合:
- [スラッシュ コマンド / クイック コマンド] で、プルダウンからコマンドを選択します。
[完了] をクリックし、ページの下部にある [保存] をクリックします。
サービスへの HTTP 呼び出しの再試行を処理する
サービスへの HTTPS リクエストが失敗した場合(タイムアウト、一時的なネットワーク障害、2xx 以外の HTTPS ステータス コードなど)、Google Chat は数分以内に数回配信を再試行することがあります(ただし、これは保証されていません)。そのため、状況によっては、Chat 用アプリが同じイベントを複数回受信することがあります。リクエストが正常に完了しても、無効なレスポンス ペイロードが返された場合、Google Chat はリクエストを再試行しません。
イベント オブジェクト
Chat 用アプリは、Chat トリガーが実行されたとき、または Chat ユーザーが Chat 用アプリの UI を操作したとき(ボタンのクリックやダイアログの送信など)にイベント オブジェクトを受け取ります。イベント オブジェクトを使用すると、インタラクション データを使用して UI を応答または更新できます。
2025 年に、Google Chat アプリはアドオン イベントをサポートするように拡張されました。これは、2025 年 7 月以降、新しい Chat アプリのデフォルトになっています。Chat のドキュメント全体で、アドオン イベントはガイドとコードサンプルに示されている標準のイベントタイプです。Chat イベント(Google Workspace アドオンではない Chat アプリの場合)のドキュメントは、折りたたみ可能なセクション(アドオンではない Chat アプリ: インタラクション イベントを受信して応答するなど)に分かれています。
イベントとレスポンスのタイプを決定する
Chat アプリがイベント オブジェクトを受信すると、ペイロードの構造と応答方法は、Chat アプリが Google Workspace アドオンとして構成されているかどうかによって異なります。
アプリが受信するイベント オブジェクトの種類と、アプリがどのように応答する必要があるかを確認するには、次の表を使用してアプリの構成を確認します。
| アプリの種類 | アドオン イベントを受信する (2025 年 7 月以降に作成された新しいアプリのデフォルト) |
Chat イベントを受信する (2025 年 7 月より前のデフォルト) |
|---|---|---|
| Apps Script アプリ マニフェスト ファイル( appsscript.json)を確認します。 |
chat オブジェクトは addOns 内で構成されます。 |
chat オブジェクトは、マニフェストのルートで構成されます。 |
| その他のアプリ Google Chat API の構成ページを確認する |
[Build this Chat app as a Google Workspace add-on] チェックボックスがオンになっている。 | [この Chat アプリを Google Workspace アドオンとして構築する] チェックボックスがオフになっている。 |
| ドキュメントの入手先 | ガイドとコードサンプル全体 イベント リファレンス ドキュメント: アドオン イベント オブジェクト |
折りたたまれたセクション(例: アドオンではない Chat 用アプリ: インタラクション イベントを受信して応答する) イベント リファレンス ドキュメント: Chat API インタラクション イベント |
| 対応方法 | DataActions や RenderActions などのアクションを返します。アクションで応答する方法を確認する |
Message リソースを返します。メッセージで返信する方法を確認する |
イベント オブジェクトのペイロード
各アドオン イベント オブジェクトには、ホストとプラットフォームの詳細(hostApp: "CHAT"、clientPlatform、userLocale、userTimezone、parameters、formInputs)を含む commonEventObject と、Chat 固有のコンテキストを含む chat オブジェクトが含まれます。
- アプリホーム トリガー(ユーザーが Chat アプリとの 1 対 1 のダイレクト メッセージで [ホーム] タブを開いたとき)の場合、
chatオブジェクトには、ユニオンpayloadフィールドなしでchat.userとchat.eventTimeが含まれます。ユーザーがホームページ カードのボタンをクリックすると、イベント オブジェクトにはcommonEventObject.parameters(およびカードにフォーム入力が含まれている場合はcommonEventObject.formInputs)とともにchat.buttonClickedPayloadが含まれます。 - スペースとメッセージのインタラクション(スペースに追加、メッセージ、スペースから削除、アプリコマンド、ボタンとウィジェットのインタラクション)の場合、
chatオブジェクトにはchat.user、chat.space、chat.eventTime、対応するインタラクション ペイロードが含まれます。messagePayload: ユーザーがメッセージを送信したときのspace、message、configCompleteRedirectUriが含まれます。addedToSpacePayload: Chat アプリがスペースに追加されたときのspace、interactionAdd、configCompleteRedirectUriが含まれます。removedFromSpacePayload: Chat 用アプリがスペースから削除されたときのspaceが含まれます。buttonClickedPayload: ユーザーがカードまたはダイアログのボタンをクリックしたときに、space、message、isDialogEvent、dialogEventTypeが含まれます。widgetUpdatedPayload: ユーザーがウィジェットを操作したときのspaceが含まれます。たとえば、外部データソースを含む複数選択メニューに入力した場合などです。appCommandPayload: ユーザーがアプリコマンドを呼び出したときのspace、message、appCommandMetadata、isDialogEvent、dialogEventType、configCompleteRedirectUriが含まれます。
Chat やその他の Google Workspace アプリケーション内のアドオン イベント オブジェクトについては、イベント オブジェクトをご覧ください。
回答を提示する
このセクションでは、Chat 用アプリがアクションを使用してユーザー インタラクションに同期的に応答する方法について説明します。
アクションで応答するには、Chat 用アプリは 30 秒以内に応答する必要があります。また、応答は、インタラクションが発生したスペースに適用される必要があります。これらの同期レスポンスには認証は必要ありません。Chat アプリが 30 秒以上かかる場合や、スペース外で動作する必要がある場合は、認証を設定し、Google Chat API を使用して非同期で応答します。
ユーザー操作に同期的に応答するには、Chat 用アプリが受信イベント オブジェクトを処理し、次のいずれかの JSON オブジェクトを返します。
DataActions:chatDataActionMarkupを使用して、チャット メッセージ(CreateMessageAction、UpdateMessageAction)を作成または更新するか、リンク プレビュー(UpdateInlinePreviewAction)を添付します。RenderActions: ホームページまたはダイアログ(pushCard、updateCard、endNavigation: "CLOSE_DIALOG")を作成、更新、または閉じます。または、複数選択メニュー(modifyCard)に動的な入力候補を提供します。AuthorizationError: 基本的な承認カード(basic_authorization_prompt)を使用して、外部サービスへのログインまたは認証をユーザーに求めます。
次の表に、Chat 用アプリがアクションで応答する方法を示します。Chat 用アプリは、JSON オブジェクトを直接返すか、Apps Script の AddOnResponseService と CardService を使用してレスポンスを構築できます。
| Chat アプリのレスポンス | 返すために必要なアクション(JSON) | 返品に必要な対応(Apps Script) |
|---|---|---|
| メッセージを送信する、またはメッセージを更新する。 | DataActions(createMessageAction または updateMessageAction) |
DataActionsResponse |
| Chat ユーザーがスペースで送信したメッセージ内のリンクをプレビューする。 | DataActions(updateInlinePreviewAction) |
DataActionsResponse |
| ダイレクト メッセージの [ホーム] タブでホームページをレンダリングまたは更新する。 | RenderActions(pushCard または updateCard) |
ActionResponse |
| ダイアログを開く、更新する、閉じる。 | RenderActions(pushCard、updateCard、または endNavigation: "CLOSE_DIALOG") |
ActionResponse |
| カードまたはダイアログから情報を収集するには、ユーザーが複数選択メニューに入力した内容に基づいて選択項目を提案します。 | RenderActions(modifyCard) |
ActionResponse |
| 外部サービスの構成または承認をリクエストします。 | AuthorizationError(basic_authorization_prompt) |
AuthorizationException |
メッセージで応答
Chat 用アプリは、次のいずれかのトリガーまたはインタラクションに対してメッセージを返すことができます。
- メッセージ トリガー。ユーザーが Chat 用アプリに @メンションまたはダイレクト メッセージを送信した場合など。
- スペースに追加トリガー。たとえば、ユーザーが Google Workspace Marketplace から Chat 用アプリをインストールしたり、スペースに追加したりした場合。
- ユーザーがスラッシュ コマンドやクイック コマンドを呼び出したときなどのアプリコマンド トリガー。
- メッセージまたはダイアログのカードのボタンクリック。たとえば、ユーザーが情報を入力して [送信] をクリックしたときです。
Chat 用アプリは、メッセージに次のいずれかを含めることができます。
- ハイパーリンク、@メンション、絵文字を含むテキスト。メッセージの書式を設定するをご覧ください。
- 1 つ以上のカード。メッセージに表示されるか、ダイアログとして新しいウィンドウで開きます。Google Chat アプリ用のカードを作成するをご覧ください。
- 1 つ以上のアクセサリー ウィジェット。メッセージ内のテキストまたはカードの後に表示されるボタンです。
メッセージで返信するには、CreateMessageAction オブジェクトを含む DataActions を返します。
{
"hostAppDataAction": {
"chatDataAction": {
"createMessageAction": {
"message": <var>MESSAGE</var>
}
}
}
}
MESSAGE は、Chat API の Message リソースに置き換えます。
次の例では、Chat 用アプリがスペースに追加されるたびに、DataActions を使用して [スペースに追加] トリガーに応答することで、オンボーディング テキスト メッセージを作成して送信します。
Node.js
/**
* Sends an onboarding message when the Chat app is added to a space.
*
* @param {Object} req The request object from Google Chat.
* @param {Object} res The response object from the Chat app.
*/
exports.cymbalApp = function cymbalApp(req, res) {
const chatEvent = req.body.chat;
// Send an onboarding message when added to a Chat space
if (chatEvent.addedToSpacePayload) {
res.json({ hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
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`.'
}}}}});
}
};
Python
from flask import Flask, request, json
app = Flask(__name__)
@app.route('/', methods=['POST'])
def cymbal_app():
"""Sends an onboarding message when the Chat app is added to a space.
Returns:
Mapping[str, Any]: The response object from the Chat app.
"""
chat_event = request.get_json()["chat"]
if "addedToSpacePayload" in chat_event:
return json.jsonify({ "hostAppDataAction": { "chatDataAction": {
"createMessageAction": { "message": {
"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`.'
}}
}}})
Java
@SpringBootApplication
@RestController
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
/*
* Sends an onboarding message when the Chat app is added to a space.
*
* @return The response object from the Chat app.
*/
@PostMapping("/")
@ResponseBody
public GenericJson onEvent(@RequestBody JsonNode event) throws Exception {
JsonNode chatEvent = event.at("/chat");
if (!chatEvent.at("/addedToSpacePayload").isEmpty()) {
return new GenericJson() { {
put("hostAppDataAction", new GenericJson() { {
put("chatDataAction", new GenericJson() { {
put("createMessageAction", new GenericJson() { {
put("message", new Message().setText(
"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`."
));
} });
} });
} });
} };
}
return new GenericJson();
}
}
Apps Script
/**
* Sends an onboarding message when the Chat app is added to a space.
*
* @param {Object} event The event object from Google Chat.
* @return {Object} Response from the Chat app.
*/
function onAddedToSpace(event) {
return { hostAppDataAction: { chatDataAction: { createMessageAction: { message: {
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`.'
}}}}};
}
このコードサンプルは、次のテキスト メッセージを返します。
メッセージを更新する
Chat 用アプリは、送信したメッセージを更新することもできます。たとえば、Chat 用アプリは、ユーザーがダイアログを送信したり、メッセージ内のカードのボタンをクリックしたりした後に、メッセージを更新できます。
インタラクションに応じて Chat アプリのメッセージを更新するには、UpdateMessageAction を含む DataActions を返します。
{
"hostAppDataAction": {
"chatDataAction": {
"updateMessageAction": {
"message": <var>MESSAGE</var>
}
}
}
}
MESSAGE は、Chat API の Message リソースに置き換えます。
Chat 用アプリは、updateInlinePreviewAction を使用して、ユーザーが送信したメッセージを更新し、リンク プレビュー カードを添付することもできます。詳細については、リンクをプレビューするをご覧ください。
Google Chat API を使用して非同期で応答する
Chat 用アプリは、アクションを同期的に返すのではなく、Google Chat API を呼び出してインタラクションに応答したり、プロアクティブ メッセージを送信したりする必要がある場合があります。たとえば、Chat 用アプリは、次のいずれかを行うために Google Chat API を呼び出す必要があります。
- 30 秒後にインタラクションに応答する(長時間実行タスクの完了後など)。
- スケジュールに沿ってメッセージを送信したり、外部リソースの変更に関する通知を送信したりします。
- やり取りが行われたスペースの外でタスクを実行する。
- スペースの一覧表示やスペースへのメンバーの追加など、同期アクションとして利用できないタスクを Chat で実行する。
- Chat ユーザーに代わってタスクを実行する(ユーザー認証が必要)。
30 秒後にインタラクションに応答する場合、Chat アプリが応答していないというユーザー向けのエラー メッセージが表示されないようにするには、空のレスポンスを返すことで、30 秒以内にイベント オブジェクトの受信を確認する必要があります。
Node.js
async function onEvent(req, res) {
// Trigger asynchronous job that will respond using the Google Chat API.
...
// Respond with an empty response to the Google Chat platform.
return res.send({});
};
Python
def on_event(event) -> dict:
# Trigger asynchronous job that will respond using the Google Chat API.
...
// Respond with an empty response to the Google Chat platform.
return {}
Java
public String onEvent(JsonNode event) {
// Trigger asynchronous job that will respond using the Google Chat API.
...
// Respond with an empty response to the Google Chat platform.
return "{}";
}
Apps Script
function onEvent(event) {
// Trigger asynchronous job that will respond using the Google Chat API.
...
// Respond with an empty response to the Google Chat platform.
return null;
}
Chat API を使用してメッセージを送信するには、認証を設定して spaces.messages.create メソッドを呼び出します。手順については、メッセージを送信するをご覧ください。その他の Chat API メソッドの使用方法については、Chat API の概要をご覧ください。
関連トピック
- Google Chat API を構成する
- メッセージを送信する
- コマンドに応答する
- インタラクティブなダイアログをサポートする
- ユーザーがカードに入力したフォームデータを読み取る
- プレビュー リンク
- Chat 用アプリのホームページを作成する
- Chat からのリクエストを確認する
- Google Chat 用アプリのインタラクティブ機能をテストする
アドオンではない Chat 用アプリ: ユーザー インタラクションを受け取って応答する
Google Workspace アドオンではない Chat 用アプリは、Google Workspace アドオンのイベント オブジェクト(EventObject)ではなく、Chat API のインタラクション イベント(Event)を受け取り、アクションではなく Message リソースを返して応答します。
アドオンではない Chat アプリを Google Workspace アドオン フレームワークにアップグレードするには、Google Chat アプリを Google Workspace アドオンに変換するをご覧ください。
インタラクション イベントの種類
ユーザー操作の種類ごとに、Google Chat はアドオンではない Chat 用アプリに Event オブジェクトを送信します。このオブジェクトのタイプは eventType フィールドで表されます。
| ユーザーの操作 | eventType |
アドオンではない Chat 用アプリからの一般的なレスポンス |
|---|---|---|
| ユーザーが Chat 用アプリにメッセージを送信します。たとえば、Chat 用アプリに @ メンションを付けたり、スラッシュ コマンドを使用したりします。 | MESSAGE |
Chat 用アプリは、メッセージの内容に基づいて応答します。たとえば、チャットアプリは、スラッシュ コマンド /about に、チャットアプリが実行できるタスクを説明するメッセージを返します。 |
| ユーザーが Chat アプリをスペースに追加した。 | ADDED_TO_SPACE |
Chat 用アプリは、その機能と、スペース内のユーザーがどのように操作できるかを説明するオンボーディング メッセージを送信します。 |
| ユーザーがスペースから Chat 用アプリを削除した。 | REMOVED_FROM_SPACE |
Chat 用アプリは、スペースに構成されている受信通知を削除し(ウェブフックの削除など)、内部ストレージをクリアします。 |
| ユーザーが Chat アプリのメッセージ、ダイアログ、またはホームページのカードのボタンをクリックします。 | CARD_CLICKED |
Chat 用アプリは、ユーザーが送信したデータを処理して保存するか、別のカードを返します。 |
| ユーザーが 1 対 1 のメッセージで [ホーム] タブをクリックして、Chat 用アプリのホームページを開きます。 | APP_HOME |
Chat アプリは、ホームページから静的カードまたはインタラクティブ カードを返します。 |
| ユーザーが Chat アプリのホームページからフォームを送信します。 | SUBMIT_FORM |
Chat 用アプリは、ユーザーが送信したデータを処理して保存するか、別のカードを返します。 |
| ユーザーがクイック コマンドを使用してコマンドを呼び出します。 | APP_COMMAND |
Chat 用アプリは、呼び出されたコマンドに基づいて応答します。たとえば、Chat 用アプリは、About コマンドに対して、Chat 用アプリが実行できるタスクを説明するメッセージを返します。 |
サポートされているすべてのインタラクション イベントと JSON ペイロードの例については、Chat 用アプリのインタラクション イベントの種類と EventType リファレンス ドキュメントをご覧ください。
ダイアログからのインタラクション イベント
アドオンではない Chat アプリがダイアログを開くと、インタラクション イベントには、レスポンスの処理に使用できる次の追加情報が含まれます。
isDialogEventフィールドはtrueに設定されています。DialogEventType(REQUEST_DIALOG、SUBMIT_DIALOG、CANCEL_DIALOG)は、インタラクションによってダイアログが開くか、ダイアログから情報が送信されるか、ダイアログが閉じるかを明確にします。
アドオンではない Chat 用アプリを構成して、インタラクション イベントを受信する
Google Cloud コンソールで、Chat API の [構成] ページに移動します。
[インタラクティブ機能] で、[この Chat アプリを Google Workspace アドオンとしてビルドする] をオフにし、[機能]、単一の [接続設定] エンドポイント(HTTP エンドポイント URL、Apps Script、Cloud Pub/Sub トピック名、Dialogflow)、[コマンド]、[スターター プロンプト]、[リンク プレビュー]、[公開設定] を構成します。
[保存] をクリックします。
アドオンではない Chat 用アプリでメッセージを返信する
アドオンではない Chat 用アプリで同期的に応答するには、Message オブジェクトを直接返します。次の例では、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.
*/
exports.cymbalApp = function cymbalApp(req, res) {
// 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`.'
});
}
};
Python
from flask import Flask, request, json
app = Flask(__name__)
@app.route('/', methods=['POST'])
def cymbal_app():
"""Sends an onboarding message when the Chat app is added to a space.
Returns:
Mapping[str, Any]: The response object from the Chat app.
"""
event = request.get_json()
if event['type'] == 'ADDED_TO_SPACE':
return json.jsonify({
'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`.'
})
return json.jsonify({})
Java
@SpringBootApplication
@RestController
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
/*
* Sends an onboarding message when the Chat app is added to a space.
*
* @return The response object from the Chat app.
*/
@PostMapping("/")
@ResponseBody
public Message onEvent(@RequestBody JsonNode event) {
switch (event.get("type").asText()) {
case "ADDED_TO_SPACE":
return new Message().setText(
"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`.");
default:
return new Message();
}
}
}
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.
*/
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`.'
};
}