Dialogflow ES中如何将一个意图的参数值传递到另一个意图?
Dialogflow 跨意图参数传递解决方案
默认情况下Dialogflow的意图参数为单意图作用域,不会自动继承前序意图的参数值,因此跨意图调用时会出现参数读取为undefined的问题,可通过以下三种方案解决:
方法1:输出上下文传递(最推荐)
- 在
Buy-Car意图的输出上下文配置栏新增自定义上下文,命名为buy_car_info,设置有效期≥2轮,保证覆盖到触发TriggerBot的对话轮次 Buy-Car收集到的所有参数会自动挂载到该输出上下文的参数列表中- 修改TriggerBot的fulfillment代码,从上下文中读取参数:
function TriggerBot(agent) { // 上下文名称大小写敏感,需和配置完全一致 const buyCarContext = agent.context.get('buy_car_info'); const color = buyCarContext.parameters.color; const size = buyCarContext.parameters.size; const region = buyCarContext.parameters.region; }
- 可选优化:在TriggerBot意图的输入上下文配置栏绑定
buy_car_info,只有上下文存在时才会触发该意图,避免参数缺失异常。
方法2:会话级全局参数存储
如果需要跨多个意图长期传递参数,可将参数存入长有效期的全局上下文:
- 在
Buy-Car意图的fulfillment中添加参数存储逻辑:
function BuyCarHandler(agent) { agent.setContext({ name: 'global_session_params', lifespan: 99, // 覆盖整个会话周期 parameters: { color: agent.parameters.color, size: agent.parameters.size, region: agent.parameters.region } }); }
- TriggerBot读取方式和方法1一致,读取
global_session_params上下文的参数即可。
方法3:Followup Event主动传参
如果是在Buy-Car的fulfillment中主动触发TriggerBot,可通过事件携带参数:
- 先在TriggerBot意图的事件配置栏新增事件
trigger_bot_event - 在
Buy-Car的fulfillment中触发事件并传参:
function BuyCarHandler(agent) { agent.setFollowupEvent({ name: 'trigger_bot_event', parameters: { color: agent.parameters.color, size: agent.parameters.size, region: agent.parameters.region } }); }
- 在TriggerBot意图中定义和传入参数同名的参数项,即可直接通过
agent.parameters读取参数值。
排查注意事项
- 上下文名称大小写完全匹配,配置和代码中的名称不能有拼写错误
- 上下文有效期不能设置过短,触发TriggerBot时上下文需未过期
- 事件传参时,参数名需要和TriggerBot中定义的参数名完全一致
内容的提问来源于stack exchange,提问作者Bill Software Engineer
相关产品推荐
相关产品推荐

