このガイドでは、カードベースのインターフェースでフォーム入力を作成して、Google Chat アプリがユーザーから情報を収集して処理する方法について説明します。
Chat アプリは、Chat の内外でアクションを実行するために、次のような方法でユーザーに情報をリクエストします。
- 設定を構成します。たとえば、ユーザーが通知設定をカスタマイズしたり、Chat アプリを 1 つ以上のスペースに構成して追加したりできるようにします。
- 他の Google Workspace アプリケーションで情報を作成または更新します。たとえば、ユーザーが Google カレンダーの予定を作成できるようにします。
- ユーザーが他のアプリやウェブサービスの利用可能なリソースにアクセスして更新できるようにします。たとえば、Chat アプリを使用すると、ユーザーは Chat スペースから直接サポート チケットのステータスを更新できます。
前提条件
Node.js
インタラクション イベントを受信して応答する Google Chat アプリ。HTTP サービスを使用してインタラクティブな Chat アプリを作成するには、この クイックスタートを完了してください。
Python
インタラクション イベントを受信して応答する Google Chat アプリ。HTTP サービスを使用してインタラクティブな Chat アプリを作成するには、この クイックスタートを完了してください。
Java
インタラクション イベントを受信して応答する Google Chat アプリ。HTTP サービスを使用してインタラクティブな Chat アプリを作成するには、この クイックスタートを完了してください。
Apps Script
インタラクション イベントを受信して応答する Google Chat アプリ。Apps Script でインタラクティブな Chat アプリを作成するには、このクイックスタートを完了してください。
カードを使用してフォームを作成する
情報を収集するために、Chat アプリはフォームとその入力を設計し、カードに組み込みます。カードをユーザーに表示するために、Chat アプリは次の Chat インターフェースを使用できます。
- 1 つ以上のカードを含むメッセージ
- [ホームページ]。Chat アプリとのダイレクト メッセージの [**ホーム**] タブに表示されるカードです。
- ダイアログ。メッセージとホームページから新しいウィンドウで開くカードです。
Chat アプリは、次のウィジェットを使用してカードを作成できます。
ユーザーに情報をリクエストするフォーム入力ウィジェット。必要に応じて、フォーム入力ウィジェットに 検証 を追加して、ユーザーが情報を正しく入力してフォーマットできるようにします。Chat アプリは、次のフォーム入力ウィジェットを使用できます。
- テキスト入力
(
textInput)自由形式または候補のテキスト用。 - 選択入力
(
selectionInput)は、チェックボックス、 ラジオボタン、プルダウン メニューなどの選択可能な UI 要素です。選択入力ウィジェットは、静的データソースまたは動的データソースから項目を入力することもできます。たとえば、ユーザーはメンバーになっている Chat スペースのリストから選択できます。 - 日付と時刻のピッカー
(
dateTimePicker)は、日付と時刻のエントリに使用します。
- テキスト入力
(
ユーザーがカードに入力した値を送信できるようにするボタン ウィジェット ユーザーがボタンをクリックすると、Chat アプリは受信した情報を 処理できます。
次の例では、カードはテキスト入力、日時ピッカー、選択入力を使用して連絡先情報を収集します。
この連絡先フォームを使用する Chat アプリの例については、次のコードをご覧ください。
Node.js
Python
Java
Apps Script
情報を収集するために使用できるインタラクティブ ウィジェットのその他の例については、 インタラクティブなカードやダイアログを設計するをご覧ください。
インタラクティブ ウィジェットからデータを受信する
ユーザーがボタンをクリックすると、Chat アプリはボタンの場所に応じてインタラクション イベントを受信します。
ボタンがメッセージまたはダイアログにある場合、Chat アプリは インタラクション イベント
CARD_CLICKEDを受信します。CARD_CLICKEDインタラクション イベントのペイロードには、ユーザーが入力した値を含むcommon.formInputsオブジェクトが含まれています。値は、オブジェクト
common.formInputs.WIDGET_NAMEから取得できます。ここで、 WIDGET_NAME はウィジェットに指定したnameフィールドです。 値は、ウィジェットの特定のデータ型( オブジェクトとして表される)として返されます。Inputs次は、ユーザーが各ウィジェットに値を入力した
CARD_CLICKEDインタラクション イベントの一部を示しています。HTTP
{ "type": "CARD_CLICKED", "common": { "formInputs": { "contactName": { "stringInputs": { "value": ["Kai 0"] }}, "contactBirthdate": { "dateInput": { "msSinceEpoch": 1000425600000 }}, "contactType": { "stringInputs": { "value": ["Personal"] }} }} }Apps Script
{ "type": "CARD_CLICKED", "common": { "formInputs": { "contactName": { "": { "stringInputs": { "value": ["Kai 0"] }}}, "contactBirthdate": { "": { "dateInput": { "msSinceEpoch": 1000425600000 }}}, "contactType": { "": { "stringInputs": { "value": ["Personal"] }}} }} }ボタンがホームページにある場合、 Chat アプリは
SUBMIT_FORMインタラクション イベントを受信します。 インタラクション イベントのペイロードには、ユーザーが入力した値を含むcommonEventObject.formInputsオブジェクトが含まれています。値は、オブジェクト
commonEventObject.formInputs.WIDGET_NAMEから取得できます。ここで、 WIDGET_NAME はウィジェットに指定したnameフィールドです。 値は、ウィジェットの特定のデータ型( オブジェクトとして表される)として返されます。Inputs次は、ユーザーが各ウィジェットに値を入力した
SUBMIT_FORMインタラクション イベントの一部を示しています。HTTP
{ "type": "SUBMIT_FORM", "commonEventObject": { "formInputs": { "contactName": { "stringInputs": { "value": ["Kai 0"] }}, "contactBirthdate": { "dateInput": { "msSinceEpoch": 1000425600000 }}, "contactType": { "stringInputs": { "value": ["Personal"] }} }} }Apps Script
{ "type": "SUBMIT_FORM", "commonEventObject": { "formInputs": { "contactName": { "": { "stringInputs": { "value": ["Kai 0"] }}}, "contactBirthdate": { "": { "dateInput": { "msSinceEpoch": 1000425600000 }}}, "contactType": { "": { "stringInputs": { "value": ["Personal"] }}} }} }
データを受信するには、Chat アプリがインタラクション イベントを処理して、ユーザーがウィジェットに入力した値を取得します。次の表に、特定のフォーム入力ウィジェットの値を取得する方法を示します。ウィジェットごとに、ウィジェットが受け入れるデータ型、インタラクション イベントに値が保存される場所、値の例を示します。
| フォーム入力ウィジェット | 入力データのタイプ | インタラクション イベントからの入力値 | 値の例 |
|---|---|---|---|
textInput |
stringInputs |
event.common.formInputs.contactName.stringInputs.value[0] |
Kai O |
selectionInput |
stringInputs |
最初または唯一の値を取得するには、event.common.formInputs.contactType.stringInputs.value[0] |
Personal |
日付のみを受け入れる dateTimePicker。 |
dateInput |
event.common.formInputs.contactBirthdate.dateInput.msSinceEpoch。 |
1000425600000 |
データを別のカードに転送する
ユーザーがカードから情報を送信した後、次のいずれかを行うために追加のカードを返す必要がある場合があります。
- 個別のセクションを作成して、ユーザーが長いフォームを入力できるようにします。
- ユーザーが最初のカードの情報をプレビューして確認できるようにします。これにより、ユーザーは送信前に回答を確認できます。
- フォームの残りの部分を動的に入力します。たとえば、ユーザーに予約の作成を促すために、Chat アプリは、予約の理由をリクエストする最初のカードを表示し、予約タイプに基づいて利用可能な時間を提供する別のカードを入力できます。
最初のカードから入力されたデータを転送するには、次の例に示すように、ウィジェットの name とユーザーが入力した値を含む actionParameters
を使用して button
を作成します。
Node.js
Python
Java
Apps Script
ユーザーがボタンをクリックすると、Chat アプリは
CARD_CLICKED インタラクション イベントを受信し、そこから
データを受信できます。
フォームの送信に応答する
カード メッセージまたはダイアログからデータを受信すると、Chat アプリは受信を確認するか、エラーを返して応答します。
次の例では、Chat アプリはテキスト メッセージを送信して、ダイアログまたはカード メッセージから送信されたフォームを正常に受信したことを確認します。
Node.js
Python
Java
Apps Script
ダイアログを処理して閉じるには、確認メッセージを送信するか、元のメッセージまたはカードを更新するか、ダイアログを閉じるだけかを指定する
ActionResponse
オブジェクトを返します。手順については、
ダイアログを閉じるをご覧ください。
トラブルシューティング
Google Chat アプリまたは カードがエラーを返すと、 Chat インターフェースに「問題が発生しました」というメッセージが表示されます。 または「リクエストを処理できませんでした」Chat UI にエラー メッセージが表示されない場合でも、Chat アプリまたは カードで予期しない結果が生成されることがあります。たとえば、カード メッセージが表示されないことがあります。
Chat UI にエラー メッセージが表示されない場合でも、 Chat アプリのエラー ロギングが有効になっている場合は、エラーの修正に役立つ説明的なエラー メッセージとログデータを使用できます。 エラーの表示、 デバッグ、修正については、 Google Chat エラーのトラブルシューティングと修正をご覧ください。
関連トピック
- 連絡先管理ツールのサンプルをご覧ください。これは、カード メッセージとダイアログから連絡先フォームの入力を求める Chat アプリです。
- インタラクティブなダイアログを開く