请求基于Dialogflow实现带日历选期的预约机器人教程
嘿,刚好之前帮朋友折腾过类似的预订机器人,完全对标酒店演示机器人的日历功能,给你整理了一套Dialogflow的实操步骤,跟着来就行:
第一步:搞定日期识别的核心实体
不用自己从零造日期识别的轮子,直接用Dialogflow内置的**@sys.date**系统实体就够了——它能自动识别用户说的各种自然语言日期,比如“明天”、“下周五”、“2024年5月20日”,完美覆盖预订场景的需求。
如果需要限制日期范围(比如只能选未来30天内的日期),可以在实体的参数设置里加简单校验,不过更灵活的方式是后面在业务逻辑里处理。
第二步:创建预订意图并绑定日期参数
- 新建一个意图,比如命名为
Booking_Set_Date,触发词可以设成“我要预订”、“选个日期”、“哪天能订”这类用户常用的话术。 - 进入“参数”板块,添加参数
booking_date,实体直接选**@sys.date**,把它设为“必填”——这样用户没说日期时,Dialogflow会自动追问,你还可以在“默认追问提示”里写更友好的引导,比如“麻烦告诉我你想要的预订日期哦,比如明天或者5月20日~”
第三步:添加可视化日历选择器(还原酒店机器人的交互感)
要是想让用户不用打字,直接点选日期(就像酒店演示机器人那样的日历控件),就得用到Dialogflow的富响应(Rich Responses):
- 在意图的“响应”标签页,切换到“Google Assistant”响应类型(如果你的机器人是面向Assistant渠道的话),添加「日期选择器(Date Picker)」组件。
- 给选择器设置提示文本,比如“请选择你的预订日期”,还能配置最小日期(比如设为今天)和最大日期(比如90天后),避免用户选过去的无效日期。
- 如果是其他渠道(比如网页、微信),可以在fulfillment里返回自定义指令,让前端渲染日历组件就行。
第四步:用Fulfillment处理日期业务逻辑(可选但推荐)
要是你需要对选好的日期做进一步处理(比如查当天有没有空房、发日历提醒),就得用上Dialogflow的Fulfillment了:
- 先开启Fulfillment(可以用Cloud Functions或者自己搭的Webhook),然后在
Booking_Set_Date意图里勾选「启用webhook调用用于意图」。 - 用户选好日期后,Dialogflow会把
booking_date参数传给你的webhook,你可以在代码里做这些操作:- 日期格式转换:把Dialogflow返回的ISO格式日期(比如
2024-05-20)转成用户友好的格式,比如“2024年5月20日 星期一”。 - 有效性校验:检查日期是否在允许范围内、当天是否已被订满。
- 流程衔接:确认日期后,继续问用户预订的时间段、人数之类的信息。
- 日期格式转换:把Dialogflow返回的ISO格式日期(比如
- 给你贴个简单的Node.js代码片段参考:
function handleBookingDate(agent) { const bookingDate = agent.parameters.booking_date; // 转换为中文友好的日期格式 const formattedDate = new Date(bookingDate).toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' }); // 模拟检查空房的逻辑 const isAvailable = checkAvailability(bookingDate); if (isAvailable) { agent.add(`好的,已为你锁定${formattedDate}的预订名额!接下来需要告诉我你的预订人数吗?`); } else { agent.add(`抱歉,${formattedDate}已经被订满了,换个日期试试吧?`); } } // 模拟空房检查函数 function checkAvailability(date) { // 这里可以对接你的数据库或者预订系统 return true; }
第五步:测试优化,打磨细节
- 用Dialogflow的测试控制台模拟用户交互,比如输入“我要预订”,看看机器人是不是会弹出日期选择器或者追问日期,选完后能不能正确返回处理结果。
- 针对用户可能的模糊输入(比如“下周”、“月底”),测试系统实体的识别准确率,要是有漏网的情况,就加些自定义训练短语补全场景。
内容的提问来源于stack exchange,提问作者The Dead Man
相关产品推荐
相关产品推荐

