You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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'):这就是对应Alexa elicitSlot的核心方法,它会告诉Dialogflow接下来要收集指定的槽位,同时自动维护会话上下文。
  • 上下文(Context):用来保存已收集的槽位值,确保后续的请求能获取到之前的信息,避免重复询问。
  • 动态提示语:可以根据已收集的槽位值生成个性化的提示(比如上面例子里用入住日期来生成退房日期的提问),比内置填充更灵活。

总结

  • 简单固定流程用内置必填槽位自动填充,零代码搞定;
  • 复杂自定义流程用Webhook的elicitSlot方法,完全对应Alexa的实现逻辑,自由度更高。

内容的提问来源于stack exchange,提问作者AkshayM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:25:41