是否可以向Dialogflow会话主动推送消息?
Dialogflow 后端主动推送异步消息实现方案
核心实现步骤
Dialogflow 原生支持后端主动向已有会话发送消息,无需用户主动触发输入,可按以下流程落地需求:
- 第一步:用户发起对话并完成事件订阅时,你的后端需要留存该用户的会话核心参数:
session ID、所属的项目ID,同时记录用户订阅的事件类型、最后一次用户交互的时间戳,建议将 session ID 和你自有账号体系的用户 ID 做映射存储,方便后续调用。
提示:Dialogflow 的 session ID 支持自定义生成,只要和用户唯一绑定即可,你可以用长期有效的用户唯一标识作为 session ID 延长会话可用周期。
- 第二步:后端部署定时巡检任务,按你需要的时间间隔扫描所有已订阅事件的活跃会话:
- 校验会话距离上一次用户输入是否已经达到你设定的静默间隔阈值
- 校验是否有匹配用户订阅类型的待推送事件内容
- 第三步:同时满足上述两个触发条件时,调用 Dialogflow 的 REST API 或者官方 SDK 向指定会话发送消息即可,无需用户端发起请求:
- 若使用 Node.js SDK 调用,核心参考代码如下:
const { SessionsClient } = require('@google-cloud/dialogflow'); const sessionClient = new SessionsClient(); async function sendPushMessage(projectId, sessionId, pushContent) { const sessionPath = sessionClient.projectAgentSessionPath(projectId, sessionId); const request = { session: sessionPath, queryInput: { // 使用事件触发,不会被识别为用户正常输入,不干扰现有会话逻辑 event: { name: 'CUSTOM_PUSH_TRIGGER', languageCode: 'zh-CN', parameters: { push_content: pushContent } }, }, }; await sessionClient.detectIntent(request); }- 你需要提前在 Dialogflow 控制台创建一个对应推送触发的事件
CUSTOM_PUSH_TRIGGER,绑定对应的响应消息即可,也可以直接在调用接口时自定义要推送的文本、卡片等富媒体内容,无需走意图匹配流程。
注意事项
- 会话有效期:Dialogflow CX 版本会话默认有效期为24小时,ES 版本默认有效期为30分钟,如果你需要更长的推送窗口,建议在用户订阅后定期调用接口延长会话有效期,或使用自定义的长期 session ID。
- 重复推送校验:后端需要给每个推送事件加已发送标记,避免重复给用户推送相同内容。
- 交互冲突校验:每次推送前必须确认会话在间隔期内确实没有新的用户输入,避免打断用户正在进行的对话。
内容的提问来源于stack exchange,提问作者broncode
相关产品推荐
相关产品推荐

