AWS Lex对接WhatsApp Bot异常:重复问候且无法跳转意图
听起来你在AWS Lex Bot和WhatsApp集成的过程中遇到了两个棘手的问题,我来帮你一步步排查和解决:
问题1:Bot重复发送Intro Message,不响应任何Utterances/Intents
这个问题通常和意图触发逻辑、会话状态或者集成链路有关,你可以按以下步骤排查:
检查欢迎意图的优先级和触发条件
很多时候是欢迎意图(Welcome Intent)的配置太宽泛,导致每次用户发消息都触发它。确认:- 欢迎意图的样本utterances有没有包含过于通用的词汇(比如"hi"、"hello"之外的内容);
- 是否开启了"Always prompt first"这类强制触发欢迎意图的选项;
- 其他意图的样本utterances是否足够明确,能和欢迎意图区分开。
验证会话状态是否正确更新
如果你的Bot依赖Lambda来管理会话,要检查Lambda返回的响应格式是否符合Lex要求。比如,当用户触发某个意图后,Lambda需要返回ElicitIntent、ConfirmIntent或Close等dialogAction指令,来推进会话。如果返回格式错误,Lex会停留在初始状态,重复发送intro消息。确认Bot和意图的版本匹配
你提到把所有意图设为$Latest,但要确保Bot本身的版本(或别名)也关联了包含这些最新意图的Bot版本。去Bot的「Versions」页面,检查当前使用的别名(比如$LATEST)是否指向了最新的Bot构建版本,旧版本不会应用新的意图配置。排查WhatsApp集成的消息传递链路
检查Webhook是否正确将用户的消息转发给Lex,并且消息格式符合Lex的要求。可以通过CloudWatch日志查看Lex收到的请求内容,确认用户的utterance是否被正确传递。如果消息格式不匹配,Lex无法解析,就会fallback到欢迎意图。
问题2:无法将Lambda函数添加至Lex Fulfillment
这个问题大多和权限配置或资源兼容性有关,试试这些方案:
配置Lambda的资源-based权限
Lex需要获得调用Lambda的权限。进入你的Lambda函数页面,在「Configuration」→「Permissions」→「Resource-based policy statements」中,添加一条信任策略,允许lex.amazonaws.com执行lambda:InvokeFunction动作。示例策略如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lex.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:你的区域:你的账号ID:function:你的Lambda函数名" } ] }确认Lex和Lambda在同一区域
Lex Bot和Lambda函数必须位于同一个AWS区域,否则无法关联。比如如果你的Bot部署在us-east-1,Lambda也得在us-east-1。检查Lambda的返回格式
Lex要求Lambda返回特定结构的JSON响应,必须包含dialogAction字段。如果你的Lambda代码返回的格式不符合规范,Lex会拒绝关联。可以先在Lambda控制台测试函数,确保返回的响应符合Lex的要求。验证IAM角色权限
如果你使用IAM角色来让Lex调用Lambda,确保该角色拥有lambda:InvokeFunction权限,并且信任关系中包含lex.amazonaws.com作为可信实体。
额外调试建议
- 开启CloudWatch日志:给Lex Bot启用日志记录,查看每个请求的详细处理流程,包括意图触发情况、slot填充状态、Lambda调用日志等,这能帮你快速定位问题根源。
- 单独测试Lex Bot:先脱离WhatsApp集成,用Lex的内置测试控制台直接测试Bot的对话流程。如果控制台正常,说明问题出在WhatsApp集成环节;如果控制台也有问题,就聚焦在Bot本身的配置上。
内容的提问来源于stack exchange,提问作者Jose'

