AWS Lex V2澳英文意图填完必填槽未切换FulfillmentCodeHook排查
Lex V2 澳区英语环境FulfillmentCodeHook未触发排查方案
按优先级从高到低排查,美区逻辑正常说明核心流程代码无通用问题,故障点集中在澳区独立配置、分支代码匹配两个维度:
1. 核对澳区Intent的Fulfillment基础配置
Lex V2不同语言locale下的Intent配置完全独立,复制Intent时不会同步所有开关,优先检查以下配置:
- 进入英语(澳大利亚)语言包下的
Eligibility_Determination_AUIntent编辑页,拉到Fulfillment板块,确认主动开启了Fulfillment Lambda触发开关:这个开关未开启时,控制台会正常提示「Intent is ready for fulfillment」,但Lex永远不会向Lambda发送FulfillmentCodeHook类型的请求,只会持续触发DialogCodeHook。 - 同页面检查DialogCodeHook规则,确认未勾选「所有必填槽位收集完成后委托DialogCodeHook全权处理」选项,该选项开启后会直接拦截Fulfillment流程跳转。
2. 排查Lambda澳区分支的DialogCodeHook返回格式问题
两个locale绑定同一个Lambda,美区正常说明通用handler逻辑无问题,故障大概率出在澳区独立模块的返回值:
- 在Lambda公共分发层加临时日志,打印澳区场景下,用户回复最后一个必填槽位后,Lambda接收到的完整请求体、以及返回给Lex的完整响应体。
- 重点核对:DialogCodeHook阶段收齐所有必填槽位时,澳区模块是否正确返回
Delegate类型的dialogAction。标准返回格式参考:
{ "sessionState": { "dialogAction": { "type": "Delegate" }, "intent": { "name": "Eligibility_Determination_AU", "state": "InProgress", "slots": {/* 收齐的必填槽位值 */} } } }
如果澳区分支这里错误返回了ElicitSlot、ConfirmIntent等其他类型的dialogAction,或者返回的槽位值格式不符合Lex要求、intent名称拼写错误,Lex就不会推进流程到Fulfillment阶段,会持续停留在DialogCodeHook循环。
- 逐字符核对代码分支判断的Intent名称、槽位名称拼写:问题描述中写的澳区Intent名是
Eligiblity_Determination_AU(Eligibility漏写了第二个i),要确保代码里的判断字符串和控制台的Intent实际命名完全一致,避免大小写、拼写偏差导致请求走到错误分支,返回无效响应。
3. 核对澳区Intent的槽位配置差异
- 逐个检查
Eligibility_Determination_AU下的6个槽位的必填属性,确认2个非必填槽位没有被误标记为必填:Lex控制台的「ready for fulfillment」提示存在1-2秒的缓存延迟,如果有隐藏的必填槽位未收集,会出现提示已就绪但实际不触发Fulfillment的情况,直接和美区同Intent的槽位配置逐个对比即可。 - 检查所有必填槽位的值确认开关:如果澳区某个必填槽位开启了用户输入二次确认,就算槽位已经赋值,没走完确认流程也不会跳转Fulfillment,和美区配置对齐关闭多余的确认规则即可。
4. 快速隔离定位方法
临时关闭澳区Eligibility_Determination_AU Intent的DialogCodeHook开关,直接模拟对话走完所有必填槽位:
- 如果此时能正常触发FulfillmentCodeHook,故障100%出在Lambda澳区模块的DialogCodeHook返回逻辑
- 如果此时仍然无法触发FulfillmentCodeHook,故障点就是控制台Intent的Fulfillment相关开关配置错误
内容的提问来源于stack exchange,提问作者Karan Katle
相关产品推荐
相关产品推荐

