本页面介绍了 Chat 应用如何打开对话框来响应用户。
对话框是基于卡片的窗口界面,可从 Chat 聊天室或消息中打开。对话框及其内容仅对打开它的用户可见。
Chat 应用可以使用对话框来请求和收集 Chat 用户的信息,包括多步表单。如需详细了解如何构建表单输入,请参阅收集和处理用户的信息。
前提条件
Node.js
一个接收和响应互动事件的 Google Chat 应用。如需使用 互动式 Chat 应用,请完成此 快速入门。
Python
一个接收和响应互动事件的 Google Chat 应用。如需使用 互动式 Chat 应用,请完成此 快速入门。
Java
一个接收和响应互动事件的 Google Chat 应用。如需使用 互动式 Chat 应用,请完成此 快速入门。
Apps 脚本
一个接收和响应互动事件的 Google Chat 应用。如需在 Apps 脚本中创建互动式 Chat 应用,请完成此 快速入门。
打开对话框
本部分介绍了如何通过执行以下操作来响应和设置对话框:
- 从用户互动触发对话框请求。
- 通过返回和打开对话框来处理请求。
- 用户提交信息后,通过关闭对话框或返回另一个对话框来处理提交的内容。
触发对话框请求
Chat 应用只能打开对话框来响应用户互动,例如命令或点击卡片中消息的按钮。
如需使用对话框响应用户,Chat 应用必须构建一个触发对话框请求的互动,例如:
- 响应命令。如需从命令触发请求, 您必须在 配置命令时选中打开对话框复选框。
- 响应
消息中的按钮点击
,可以是卡片的一部分,也可以位于消息底部。如需从消息中的按钮触发
请求,请将按钮的
onClick操作配置为将其interaction设置为OPEN_DIALOG。 - 响应 Chat 应用首页中的按钮点击 。 如需了解如何从首页打开对话框,请参阅 为 Google Chat 应用构建首页。
/addContact 斜杠命令。该消息还包含一个按钮,用户可以点击该按钮来触发命令。
以下代码示例展示了如何从卡片消息中的按钮触发对话框请求。如需打开对话框,请将
button.interaction
字段设置为 OPEN_DIALOG:
Node.js
Python
Java
Apps 脚本
此示例通过返回 卡片 JSON来发送卡片消息。 您还可以使用 Apps 脚本卡片服务。
打开初始对话框
当用户触发对话框请求时,Chat 应用
会收到一个互动事件,该事件在
event类型中表示为
Chat API。如果互动触发了对话框请求,则事件的 dialogEventType 字段会设置为 REQUEST_DIALOG。
如需打开对话框,Chat 应用可以通过响应
请求来返回
actionResponse
对象(其中 type 设置为 DIALOG 和
Message
对象)。如需指定对话框的内容,请添加以下对象:
- 一个
actionResponse对象,其type设置为DIALOG。 - 一个
dialogAction对象。body字段包含要在卡片中显示的 用户界面 (UI) 元素,包括一个或多个sectionswidget。 如需收集用户的信息,您可以指定表单输入微件和按钮微件。如需详细了解如何设计表单输入,请参阅 收集和处理用户的信息。
以下代码示例展示了 Chat 应用如何返回打开对话框的响应:
Node.js
Python
Java
Apps 脚本
此示例通过返回 卡片 JSON来发送卡片消息。 您还可以使用 Apps 脚本卡片服务。
处理对话框提交
当用户点击提交对话框的按钮时,您的
Chat 应用会收到
一个 CARD_CLICKED 互动
事件,其中 dialogEventType
为 SUBMIT_DIALOG。如需了解如何收集和处理
对话框中的信息,请参阅
收集和处理 Chat 用户的信息。
Chat 应用必须通过执行以下操作之一来响应互动事件:
- 返回另一个对话框以填充其他卡片 或表单。
- 验证用户提交的数据后关闭对话框,并 可以选择发送确认消息。
可选:返回另一个对话框
用户提交初始对话框后,Chat 应用可以返回一个或多个其他对话框,以帮助用户在提交之前查看信息、填写多步表单或动态填充表单内容。
如需处理用户输入的数据,Chat 应用
会使用
event.common.formInputs
对象。如需详细了解如何从输入 widget 检索值,请参阅
收集和处理用户的信息。
如需跟踪用户从初始对话框输入的任何数据,您必须向打开下一个对话框的按钮添加参数。如需了解详情,请参阅 将数据转移到另一张卡片。
在此示例中,Chat 应用会打开一个初始对话框,该对话框会在提交之前引导用户进入第二个对话框进行确认:
Node.js
Python
Java
Apps 脚本
此示例通过返回 卡片 JSON来发送卡片消息。 您还可以使用 Apps 脚本卡片服务。
关闭对话框
当用户点击对话框中的按钮时,Chat 应用会执行其关联的操作,并向事件对象提供以下信息:
eventType为CARD_CLICKED。dialogEventType为SUBMIT_DIALOG。
Chat 应用应返回一个
ActionResponse
对象,其 type 设置为 DIALOG,并且填充了 dialogAction。如果操作未失败,则 dialogAction.actionStatus 应为 OK,如以下示例所示:
Node.js
Python
Java
Apps 脚本
此示例通过返回 卡片 JSON来发送卡片消息。 您还可以使用 Apps 脚本卡片服务。
可选:显示临时通知
关闭对话框时,您还可以向与应用互动的用户显示临时文本通知。
Chat 应用可以通过返回设置了 actionStatus 的 ActionResponse 来响应成功或错误
通知。
以下示例会检查参数是否有效,并在参数无效时关闭对话框并显示文本通知:
Node.js
Python
Java
Apps 脚本
此示例通过返回 卡片 JSON来发送卡片消息。 您还可以使用 Apps 脚本卡片服务。
如需详细了解如何在对话框之间传递参数,请参阅 将数据转移到另一张卡片。
可选:发送确认 Chat 消息
关闭对话框时,您还可以发送新的 Chat 消息,或更新现有消息。
如需发送新消息,请返回
ActionResponse
对象,并将 type 设置为 NEW_MESSAGE。以下示例会关闭对话框并显示确认文本消息:
Node.js
Python
Java
Apps 脚本
此示例通过返回 卡片 JSON来发送卡片消息。 您还可以使用 Apps 脚本卡片服务。
如需更新消息,请返回包含更新后的消息并将其 type 设置为以下值之一的 actionResponse 对象:
UPDATE_MESSAGE:更新触发对话框请求的消息。UPDATE_USER_MESSAGE_CARDS:更新 链接预览中的卡片。
问题排查
当 Google Chat 应用或 卡片返回错误时, Chat 界面会显示一条消息,指出“出了点问题。” 或“无法处理您的请求。”有时,Chat 界面 不会显示任何错误消息,但 Chat 应用或 卡片会产生意外结果;例如,卡片消息可能不会 显示。
虽然 Chat 界面中可能不会显示错误消息, 但如果为 Chat 应用启用了错误日志记录,您可以使用描述性错误消息和日志数据来帮助您修复错误 。如需获得有关查看、 调试和修复错误的帮助,请参阅 排查和修复 Google Chat 错误。
相关主题
- 查看通讯录管理器示例, 这是一个使用对话框收集 联系信息的 Chat 应用。
- 从 Google Chat 应用首页打开对话框。
- 响应 Google Chat 应用命令
- 处理用户输入的信息