如何借助EventHandler与Dialogflow CX实现无请求下的会话结束提醒?
无需用户主动请求触发Dialogflow CX会话结束提醒的方法
嘿,我之前也碰到过类似的需求,确实有几种靠谱的方式能实现不用等用户主动发消息就触发会话结束提醒,下面给你详细拆解下:
1. 利用Dialogflow CX原生的会话计时器(Session Timer)
这是最直接的原生方案,不需要额外依赖外部服务,配置起来也简单:
- 控制台手动配置:进入你的页面流(Flow)设置,找到「会话参数」模块,添加
sessionInfo.parameters.sessionTimer参数,值设为你想要的超时时长(比如300s代表5分钟)。当用户超过这个时长没有互动,Dialogflow CX会自动触发你预先绑定的动作——比如跳转到专门的「会话即将结束」页面,直接推送提醒消息;或者调用webhook处理更复杂的逻辑(比如记录用户行为)。 - 通过Webhook动态调整:如果需要根据用户互动情况灵活重置计时器(比如用户刚发消息就把超时时间延长),可以在webhook的响应里返回
sessionInfo对象,更新sessionTimer的值。示例代码如下:
{ "sessionInfo": { "parameters": { "sessionTimer": "600s" } }, "fulfillmentResponse": { "messages": [ { "text": { "text": ["好的,我再等你10分钟~"] } } ] } }
当计时器到期时,CX会自动触发当前流的「超时事件」,你只需要在流的事件配置里绑定对应的提醒逻辑就行。
2. 结合外部定时服务主动调用CX API
如果原生计时器满足不了你的灵活需求(比如需要按特定时段触发提醒,或者跨会话追踪用户),可以用外部定时服务配合Dialogflow CX的API来主动推送消息:
- 步骤1:保存会话标识:在用户和CX互动的过程中,通过webhook获取并保存用户的
sessionID(格式一般是projects/[PROJECT_ID]/locations/[LOCATION]/agents/[AGENT_ID]/sessions/[SESSION_ID]),同时记录用户的渠道信息(比如聊天平台的用户ID)。 - 步骤2:设置定时任务:用云函数(比如Google Cloud Functions)或者定时调度服务(比如Cloud Scheduler),在指定时间触发任务,调用CX的
sendResponseAPI直接给用户发送提醒。示例请求体如下:
{ "fulfillmentResponse": { "messages": [ { "text": { "text": ["你的会话即将结束啦,有需要随时喊我哦~"] } } ] } }
- 注意渠道限制:不是所有聊天渠道都支持主动推送,比如WhatsApp要求用户在24小时内有过互动,部分Web插件也需要特定配置才能接收主动消息,你得先确认目标渠道的规则。
关键注意事项
- 会话有效期:Dialogflow CX的会话默认有最长存活时间(一般30分钟到24小时,可配置),如果超过这个时间会话会被销毁,就无法再触发提醒了。
- 权限配置:调用CX API需要给服务账号配置
dialogflow.sessions.sendResponse权限,确保定时服务能正常调用接口。 - 用户体验:不要过度发送主动消息,避免打扰用户,最好在提醒里给用户提供重新激活会话的入口(比如回复「继续」就能回到之前的对话)。
内容的提问来源于stack exchange,提问作者Luis Lius
相关产品推荐
相关产品推荐

