如何让Amazon LEX主动发起对话?特定SMS场景技术咨询
能否让Amazon Lex主动发起对话?可行方案与建议
当然可以实现!Amazon Lex本身是被动响应式的,但结合AWS生态里的其他服务,完全能构建出主动触发的SMS跟进对话流程。下面是针对你的场景的具体实现方案和关键建议:
核心思路
Lex本身不直接支持主动发起对话,但我们可以通过Lambda + 消息服务(如Amazon SNS)+ 会话上下文持久化的组合,先主动给用户发送带布尔问题的SMS提醒,再把用户的回复接入Lex继续对话。
具体实现步骤
1. 准备Lex Bot与会话上下文存储
- 先在Lex控制台创建好处理布尔型问题的意图:比如定义一个
FollowUpConfirmation意图,配置布尔型槽位(比如ConfirmationStatus),并训练它识别“是/对/没错”“否/不对/没有”这类回复,甚至可以添加同义词提升识别准确率。 - 用Amazon DynamoDB创建一个会话表,用来存储用户的关键信息:比如
userId(唯一标识用户)、sessionId(Lex会话ID)、followUpQuestion(要发送的跟进问题)、conversationState(对话状态,比如“等待用户回复”)。
2. 主动触发SMS提醒并初始化Lex会话
- 用Lambda函数作为触发源:可以通过CloudWatch Events定时触发(比如订单创建后24小时),或者由你的业务系统直接调用Lambda(比如当某个业务事件发生时)。
- Lambda函数里完成两件事:
- 调用Amazon SNS的SMS功能(或集成Twilio等第三方短信服务),给用户发送预设的布尔型跟进问题,比如:
"您好,请问您已完成订单确认吗?请回复是/否。" - 调用Lex的
CreateSessionAPI,初始化一个针对该用户的会话,把followUpQuestion等上下文信息存入会话属性(sessionAttributes),并将生成的sessionId和用户信息存入DynamoDB。
- 调用Amazon SNS的SMS功能(或集成Twilio等第三方短信服务),给用户发送预设的布尔型跟进问题,比如:
3. 处理用户SMS回复并接入Lex对话
- 当用户回复SMS后,需要把回复内容转发给Lex:
- 如果用Amazon SNS,可以配置SNS把收到的SMS消息转发到另一个Lambda函数;如果用Twilio,可以设置Webhook指向Lambda。
- 这个Lambda函数从DynamoDB中取出该用户对应的
sessionId和会话上下文,调用Lex的RecognizeTextAPI,传入用户的回复内容和会话ID。 - Lex会根据你定义的意图解析用户回复,返回对应的对话响应(比如用户回复“是”,Lex返回“感谢您的确认!”;回复“否”,Lex返回“请您尽快完成确认,如有疑问可联系客服。”)。
- Lambda再把Lex的响应通过SMS发送给用户,完成对话闭环。
关键注意事项与建议
- 会话上下文一致性:一定要确保每个用户的会话信息准确存储,避免不同用户的对话混淆。DynamoDB的
userId作为主键是最优选择。 - 意图识别优化:针对布尔型回复,在Lex意图里配置足够的样本 utterance,比如“是的”“对”“没错”“Y”都映射到
true,“否”“不对”“没有”“N”映射到false,提升识别准确率。 - 错误处理:在Lex意图里配置错误分支,当用户回复非布尔内容时,返回引导性消息,比如:“抱歉,我没理解您的回复,请回复是或否来确认。”
- 权限配置:确保Lambda拥有调用Lex API、发送SNS SMS、读写DynamoDB的IAM权限,避免因权限不足导致流程中断。
- 合规性:如果发送的是营销类提醒,要确保用户已同意接收此类短信,符合当地的通信合规要求。
内容的提问来源于stack exchange,提问作者felipeclopes
相关产品推荐
相关产品推荐

