Google Chat API Dialog异步响应更新方法及实现示例咨询
Google Chat Slash Command 异步更新Dialog实现方案
核心实现逻辑
异步更新Dialog不需要特殊的响应格式,整体流程拆分为两个独立步骤,和当前已跑通的同步Dialog更新逻辑完全兼容:
- 触发Slash Command后,立刻同步返回加载态Dialog,不等待搜索任务执行
- 后端异步执行搜索任务,完成后主动调用接口更新原有Dialog内容,替换为最终搜索结果
步骤1:同步返回加载提示态Dialog
用户触发带Dialog配置的Slash Command时,不要阻塞等待搜索结果,直接在3秒响应窗口内返回标准Dialog响应即可,内容配置为加载提示文案,示例响应体如下:
{ "action_response": { "type": "DIALOG", "dialog_action": { "dialog": { "body": { "sections": [ { "widgets": [ { "textParagraph": { "text": "*请稍候,正在执行搜索操作...*" } } ] } ] } } } } }
注意:返回该响应后,会收到Chat平台返回的消息回执,务必保存回执中的
message_id字段,后续更新Dialog需要用该ID定位目标消息。
步骤2:异步更新Dialog为搜索结果
搜索任务执行完成后,调用spaces.messages.patch接口更新之前返回的加载态消息即可,不需要额外适配特殊消息格式:
- 接口路径:
PATCH https://chat.googleapis.com/v1/spaces/{space_id}/messages/{message_id} - 必传查询参数:
updateMask=dialog,用于指定本次更新目标为消息绑定的Dialog内容 - 请求体结构和同步返回Dialog的结构完全一致,只需要把内容替换为最终搜索结果即可,示例:
{ "action_response": { "type": "DIALOG", "dialog_action": { "dialog": { "body": { "header": { "title": "对象搜索结果" }, "sections": [ { "widgets": [ // 此处填充搜索结果对应的卡片组件 ] } ] } } } } }
常见注意事项
- Slash Command的同步响应窗口只有3秒,超过窗口后无法再通过同步响应通道返回内容,所有耗时超过3秒的操作都必须走上述异步更新流程
- 接口鉴权逻辑和普通发消息接口一致,使用有权限编辑对应空间消息的服务账号或用户OAuth凭证即可
- 如果搜索任务执行失败,可使用完全相同的调用逻辑,将Dialog内容替换为错误提示即可
- 不需要为异步更新配置特殊的消息字段,和已正常运行的同步Dialog消息结构100%兼容
内容的提问来源于stack exchange,提问作者Anatoliy Botov
相关产品推荐
相关产品推荐

