Dialogflow必填参数缺失时自定义提示未触发问题求助
搞定Dialogflow必填参数缺失时自定义提示不触发的问题
嘿,我之前也碰到过这个坑!当Intent设置了必填参数,但缺参数时自定义提示没出来,反而弹出默认的“sorry, I didn't get that”,大概率是参数收集逻辑被打断或者配置没到位,咱们一步步来捋:
先查Intent的基础配置
- 首先确认你给每个必填参数都加了专属的提示短语!就在参数编辑区的"Prompts"栏里,得填至少一句引导用户补充参数的话,比如“能告诉我你的年龄吗?”
- 然后看Intent的Fulfillment开关:如果开了
Enable webhook call for this intent,别担心,正常情况下Dialogflow会先把参数收齐再调webhook,但如果你的代码逻辑有问题,就会提前返回响应,打断这个流程。
再改你的Fulfillment代码
你现在的代码直接去取agent.parameters.age.amount,要是参数没收集到,这个值就是undefined,搞不好会触发代码错误,直接让Dialogflow返回默认错误。咱们改改代码,先判断参数是否存在:
function test(agent) { // 先检查age参数有没有被正确收集到 if (!agent.parameters.age || !agent.parameters.age.amount) { // 啥也别返回,让Dialogflow自己触发你设置的参数提示 return; } let age = agent.parameters.age.amount; let conv = agent.conv(); conv.ask('This is from the backend: ' + age); return agent.add(conv); }
这样一来,只要参数没齐,代码就不会强行返回响应,Dialogflow就会乖乖触发你预先设置的提示啦。
额外的排查点
- 看看Intent的训练短语够不够全面:得包含一些不带参数的请求,比如“我要测试年龄功能”,这样Dialogflow才知道用户发起了请求但缺参数,才会触发提示。
- 清一下模拟器的上下文:有时候之前的上下文残留会搞乱参数收集,点模拟器右上角的垃圾桶图标清掉,再重新测。
- 检查参数类型:比如
age设置成数字类型,别选自由文本,这样Dialogflow能更准确识别参数,也更容易触发提示。
内容的提问来源于stack exchange,提问作者ffritz
相关产品推荐
相关产品推荐

