Dialogflow新手求助:获取上一意图参数失败,agent.context.get返回null
解决Dialogflow中获取上一意图参数返回null的问题
嘿,作为Dialogflow新手碰到这种参数获取问题确实挺闹心的,我来帮你捋清楚问题出在哪,以及怎么解决!
问题根源分析
你之前用的angerEmotionCapture-followup是Dialogflow自动生成的followup上下文,但这个上下文有两个致命问题:
- 存活时间太短:默认情况下,自动followup上下文的存活轮数只有1,当用户发送“谢谢你的倾听”触发
angerEmotionClosure意图时,这个上下文已经过期消失了,自然拿不到参数。 - 仅绑定followup意图:这个上下文是为引导用户进入对应的followup意图设计的,而你的
angerEmotionClosure是独立意图,并不在这个上下文的触发范围内,所以上下文不会保留到这个意图触发时。
具体解决步骤
1. 给angerEmotionCapture意图添加自定义输出上下文
打开angerEmotionCapture意图的编辑页面,找到「输出上下文」区域:
- 添加一个自定义上下文,比如命名为
angry_context - 设置「存活时间(轮数)」为2或更高(比如设为3,确保用户后续1-2轮对话内触发关闭意图时上下文还存在)
- 重点:在这个上下文的参数列表里,把你需要传递的
father参数(对应实体angryDirectedTo)添加进去,确保参数名和意图里的参数名完全一致。
2. 修改Fulfillment代码获取参数
把你原来的代码替换成以下内容,通过自定义上下文获取参数:
// 获取自定义的上下文 const angryContext = agent.context.get('angry_context'); if (angryContext) { // 这里的参数名要和你在angerEmotionCapture里设置的参数名一致,也就是father const targetPerson = angryContext.params.father; agent.add(`不用客气呀~我知道你刚才在气${targetPerson}呢😉`); } else { // 处理上下文不存在的情况(比如用户直接触发关闭意图) agent.add("不用客气!"); }
额外注意事项
- 确认参数名:一定要检查
angerEmotionCapture意图里的参数名称是father还是angryDirectedTo,代码里的参数名必须和意图中定义的完全匹配。 - 测试上下文:可以在Dialogflow的测试控制台里,触发
angerEmotionCapture后,查看右侧「上下文」面板,确认angry_context存在且包含father参数,再触发angerEmotionClosure测试效果。
内容的提问来源于stack exchange,提问作者Agustinus Benyamin Prasetyo
相关产品推荐
相关产品推荐

