如何为Dialogflow ES代理配置指定时段响应功能?
Dialogflow ES 按指定时段响应的实现方案
方案一:在Dialogflow意图层级做时间拦截
通过Fulfillment代码统一判断当前时间是否在允许的服务时段内,拦截非时段的请求:
- 核心逻辑:获取当前日期的星期、时分,分别匹配工作日/周末的时段规则
- 实现步骤:
- 打开代理的Fulfillment页面,启用内联编辑器(或部署自己的webhook服务)
- 在默认回退意图(或专门创建的全局拦截意图)中绑定检查函数,确保所有用户请求先经过该函数判断
- 编写时间判断代码,示例(Node.js):
function checkServiceTime(agent) { const now = new Date(); const day = now.getDay(); // 0=周日,1=周一,6=周六 const totalMins = now.getHours() * 60 + now.getMinutes(); let isAllowed = false; // 工作日(周一至周五) if (day >= 1 && day <= 5) { // 22:00(1320分钟) 至次日09:00(540分钟) isAllowed = totalMins >= 1320 || totalMins <= 540; } // 周末(周六、周日) else { // 20:00(1200分钟) 至次日11:00(660分钟) isAllowed = totalMins >= 1200 || totalMins <= 660; } if (!isAllowed) { agent.add("当前非服务时段,请在工作日22:00-次日09:00、周末20:00-次日11:00咨询。"); return; } // 符合时段,继续执行后续意图逻辑 } // 绑定到默认回退意图,确保所有请求都经过检查 const intentMap = new Map(); intentMap.set('Default Fallback Intent', checkServiceTime); // 若需要其他意图也触发检查,可添加更多绑定
方案二:在聊天平台侧做中转拦截
如果Dialogflow的Fulfillment拦截不够灵活,可以在聊天平台和Dialogflow之间加一层中转服务:
- 中转服务接收用户的消息请求后,先执行时间判断逻辑
- 仅当符合服务时段时,才将请求转发给Dialogflow处理;否则直接返回非服务时段提示
- 这种方式适用于所有集成的聊天平台,无需改动Dialogflow内部配置
方案三:迁移至Dialogflow CX(备选)
如果可以接受代理迁移,Dialogflow CX支持全局会话流的时间规则配置:
- 可直接在CX控制台中设置全局触发条件,根据时段自动拦截请求并返回提示
- 无需编写大量代码,配置更直观,但需要重新迁移代理的意图、实体等内容
内容的提问来源于stack exchange,提问作者Protocole
相关产品推荐
相关产品推荐

