Dialogflow for Actions on Google实现Alexa ElicitSlot类功能的方法问询
在Dialogflow for Actions on Google中实现类似Alexa
elicitSlot的槽位收集功能 嘿,我懂你在Alexa里用elicitSlot一步步收集槽位的爽感,现在想在Dialogflow for Actions on Google里复刻这个逻辑对吧?其实Dialogflow也有对应的实现方式,分两种场景给你拆解:
一、简单场景:用内置的自动槽位填充
如果你的需求就是按顺序收集固定的必填槽位,不用复杂的自定义逻辑,那Dialogflow的内置功能就能搞定,步骤超简单:
- 创建意图并添加槽位:先建一个主意图(比如
BookHotel),把需要收集的槽位(比如checkInDate、checkOutDate、roomType)添加进去。 - 标记槽位为必填:在每个槽位的设置里,勾选「必填」选项,然后在「槽位填充」模块里设置提示短语——就是当用户没提供这个槽位时,机器人要问的问题(比如“请问你打算哪天入住呢?”)。
- 开启自动填充:确保意图的「自动填充槽位」选项是开启的,这样Dialogflow会自动依次请求每个必填槽位,直到所有信息收集完成,才会触发后续的业务逻辑。
这种方式和Alexa的默认槽位收集逻辑几乎一致,不用写额外代码,适合常规的信息收集场景。
二、复杂场景:用Webhook手动控制槽位收集(类似elicitSlot)
如果需要自定义逻辑(比如根据用户已提供的信息动态调整下一个要收集的槽位,或者修改提示语),那就要用Webhook来手动触发槽位请求,这就和Alexa的elicitSlot功能完全对应了。
核心思路
在Webhook响应里,明确告诉Dialogflow「接下来要收集哪个槽位」,同时返回对应的提示语,还可以用上下文保存已收集的信息。下面用Node.js的Dialogflow Fulfillment库举个例子:
const { WebhookClient } = require('dialogflow-fulfillment'); exports.dialogflowFirebaseFulfillment = (request, response) => { const agent = new WebhookClient({ request, response }); // 处理酒店预订的槽位收集逻辑 function handleHotelBooking(agent) { // 先检查入住日期槽位是否已填充 if (!agent.parameters.checkInDate) { // 请求用户提供入住日期 agent.add('请问你计划哪天入住呀?'); // 设置上下文保存会话状态,生命周期设为5轮足够覆盖收集流程 agent.setContext({ name: 'hotel-booking-followup', lifespan: 5 }); // 关键:指定接下来要收集的槽位 agent.elicitSlot('checkInDate'); } else if (!agent.parameters.checkOutDate) { // 入住日期已收集,请求退房日期 agent.add(`好的,入住日期是${agent.parameters.checkInDate},那你打算哪天退房呢?`); agent.elicitSlot('checkOutDate'); } else if (!agent.parameters.roomType) { // 日期都齐了,请求房型 agent.add('请问你需要什么类型的房间呢?比如大床房、双床房?'); agent.elicitSlot('roomType'); } else { // 所有槽位收集完成,执行业务逻辑 agent.add(`没问题!我已经帮你预订了${agent.parameters.roomType},入住${agent.parameters.checkInDate},退房${agent.parameters.checkOutDate}。`); } } // 绑定意图到处理函数 const intentMap = new Map(); intentMap.set('BookHotel', handleHotelBooking); agent.handleRequest(intentMap); };
关键点说明
agent.elicitSlot('slotName'):这就是对应AlexaelicitSlot的核心方法,它会告诉Dialogflow接下来要收集指定的槽位,同时自动维护会话上下文。- 上下文(Context):用来保存已收集的槽位值,确保后续的请求能获取到之前的信息,避免重复询问。
- 动态提示语:可以根据已收集的槽位值生成个性化的提示(比如上面例子里用入住日期来生成退房日期的提问),比内置填充更灵活。
总结
- 简单固定流程用内置必填槽位自动填充,零代码搞定;
- 复杂自定义流程用Webhook的
elicitSlot方法,完全对应Alexa的实现逻辑,自由度更高。
内容的提问来源于stack exchange,提问作者AkshayM
相关产品推荐
相关产品推荐

