AWS Lex技术咨询:首次打开及Node.js独立Bot欢迎消息实现
AWS Lex 欢迎消息配置与 Node.js 集成方案
问题1:如何在首次打开AWS Lex时显示欢迎消息?
AWS Lex本身没有自带默认的欢迎触发逻辑,得咱们自己配置,分两种场景说:
Lex控制台测试/直接Bot交互场景:
你可以创建一个专属的WelcomeIntent,把它设为Bot的启动意图就行:- 在Lex构建器里新建一个意图,命名比如
WelcomeIntent。 - 不用加样本 utterance,直接在「Response」里写好欢迎文本,或者关联Lambda返回动态内容。
- 去Bot的「设置」页面,找到「初始化与终止」选项,把
WelcomeIntent设为默认启动意图。这样用户首次打开控制台测试窗口,Bot就会自动弹出欢迎消息。
- 在Lex构建器里新建一个意图,命名比如
自定义应用集成场景:
如果是在自己的应用里调用Lex,那首次加载完成后,不用等用户输入,主动调用Lex API触发欢迎逻辑就行,具体实现看下面的问题2。
问题2:Node.js独立应用中能否实现Lex欢迎消息?怎么弄?
当然可以!而且有两种实用方案,结合你的需求(构建器配意图,Node.js前端调用,iframe嵌入),我给你详细说:
方案1:Lex侧配置意图,前端主动触发(推荐)
这种方式把欢迎消息的管理放在Lex里,后续改文案不用动代码,和你后续的交互逻辑也统一:
- 先按照问题1的步骤,在Lex里建好
WelcomeIntent,设置好返回内容(静态文本或Lambda动态生成都可以)。 - 你的Node.js应用里,当iframe加载完成后,立即调用Lex的
postText()API,触发这个欢迎意图。
给你贴个AWS SDK v3的示例代码:
import { LexRuntimeV2Client, PostTextCommand } from "@aws-sdk/client-lex-runtime-v2"; // 初始化Lex客户端 const lexClient = new LexRuntimeV2Client({ region: "你的AWS区域,比如us-east-1" }); // iframe加载完成后调用这个函数发送欢迎消息 async function triggerWelcomeMessage() { const requestParams = { botId: "你的Bot ID", botAliasId: "你的Bot别名ID", localeId: "zh_CN", // 根据你的Bot语言调整,比如en_US sessionId: "用户唯一标识", // 可以用UUID生成,每个用户一个 text: "" // 如果WelcomeIntent设为了启动意图,空字符串就能触发 }; try { const command = new PostTextCommand(requestParams); const lexResponse = await lexClient.send(command); // 把返回的欢迎消息展示给用户 console.log("欢迎消息内容:", lexResponse.messages[0].content); } catch (error) { console.error("发送欢迎消息失败:", error); } }
如果用Lambda处理WelcomeIntent的 fulfillment,Lambda代码可以这么写:
exports.handler = async (event) => { // 可以根据event里的用户信息生成动态欢迎语 const welcomeContent = "嗨!欢迎使用咱们的Bot,有什么我能帮你的吗?"; const response = { sessionState: { dialogAction: { type: "Close" // 关闭当前意图,等待用户下一步输入 } }, messages: [ { contentType: "PlainText", content: welcomeContent } ] }; return response; };
方案2:前端直接展示静态欢迎消息
如果你的欢迎消息是固定不变的,也可以不用调用Lex API,在iframe加载完成后,直接在前端页面把欢迎消息渲染出来,等用户输入后再调用Lex处理请求。这种方式少一次API调用,更简单,适合静态文案的场景。
最佳方案建议
结合你的需求(Bot嵌入iframe,后续调用Lex返回槽位),方案1是最优选择:
- 欢迎消息的配置和修改都在Lex构建器里,不用动前端代码,维护起来更方便。
- 和后续的用户交互逻辑统一,都是通过Lex API处理,代码结构更清晰。
内容的提问来源于stack exchange,提问作者Chris O
相关产品推荐
相关产品推荐

