如何在Dialogflow CX中实现聊天机器人发送用户超时未响应提醒
结论先行
这个需求完全没法只靠Dialogflow CX界面配置实现,必须搭配自定义代码开发。
为什么原生界面做不到
- Dialogflow CX原生仅支持调整Session超时时长(默认30分钟,最长可设为24小时),没有内置“用户N分钟无操作自动触发消息”的配置项,界面里找不到对应的设置入口。
- Dialogflow CX的默认交互逻辑是被动响应式的:只有用户主动发消息过来,平台才会走意图匹配、流程跳转、返回回复的逻辑,平台本身不会主动监控会话的空闲时长,也不会主动向外推送空闲事件。
代码实现的具体逻辑
首先先明确一个认知:不存在所谓“用户未响应的intent”。Intent的作用是匹配用户主动发送的文本/事件输入,用户没有发任何消息的时候,根本不会有输入进入Dialogflow,自然也不可能触发任何intent。
具体实现步骤如下:
- 第一步:在你自己的业务服务端维护活跃会话列表,每个会话绑定和Dialogflow CX一致的Session ID,同时记录这个会话最后一次收到用户消息的时间戳。
- 第二步:实现定时巡检逻辑,可以用定时任务、延迟消息队列等方案,固定周期扫描所有未结束的活跃会话:
- 当检测到某会话当前时间距最后一条用户消息的间隔刚好到20分钟、且会话还没到30分钟超时阈值时,主动调用Dialogflow CX的
sessions.detectIntent接口,请求里传入自定义事件(比如命名为20min_inactivity_remind),触发平台返回预设的提醒话术。 - 拿到Dialogflow返回的提醒内容后,通过你自己的消息下发通道(APP推送、短信、聊天窗口消息、公众号模板消息等)发送给终端用户。
- 若检测到会话距最后用户消息已经超过30分钟,直接把该会话标记为已结束,从活跃列表中移除即可。
- 当检测到某会话当前时间距最后一条用户消息的间隔刚好到20分钟、且会话还没到30分钟超时阈值时,主动调用Dialogflow CX的
- 第三步:在Dialogflow CX侧做简单的配合配置:新建对应事件触发的路由,匹配你自定义的
20min_inactivity_remind事件,路由关联的回复就是你要给用户发送的引导作答提醒内容。
注意:不要尝试依赖Dialogflow CX自身的Session超时逻辑做判断,Session超时只是平台侧的会话资源回收机制,超时后再调用相同Session ID的接口会直接创建全新会话,丢失之前的上下文,所有空闲时长的统计逻辑必须放在你自己的业务服务端实现。
内容的提问来源于stack exchange,提问作者crowlek
相关产品推荐
相关产品推荐

