You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Alexa与AWS Lambda集成问题:如何处理重提示并捕获用户输入?

解决Alexa技能重提示后捕获用户输入的问题

嘿,作为刚接触Node.js和Alexa技能开发的新手,你遇到的这个问题其实是Alexa会话交互里的常见场景——要捕获重提示后的用户输入,核心是要靠**意图(Intent)**来实现,我给你一步步拆解:

1. 先在Alexa开发者控制台配置交互模型

Alexa需要知道用户可能会说什么来回应你的重提示,所以得先在交互模型里定义对应的意图:

  • 用内置意图:Alexa提供了预定义的内置意图,比如AMAZON.YesIntent(识别用户的肯定回答,比如“是的”“好的”)和AMAZON.NoIntent(识别否定回答,比如“不用了”“退出”),直接启用这些就能覆盖大部分基础回应。
  • 自定义意图:如果用户可能说特定内容(比如“给我一个美国事实”),可以创建你代码里提到的GetmyFactIntent,并添加足够的样本语句(比如“我想要新事实”“给我一个美国小知识”),让Alexa能准确识别。

2. 在Lambda代码里添加意图处理函数

接下来要在你的Lambda代码里,为这些意图编写处理逻辑,这样当用户回应后,Alexa会把对应的意图发送到Lambda,你就能捕获并处理了。结合你现有的代码,调整后大概是这样:

// 你的LaunchRequest保持基础逻辑,调整reprompt更自然
'LaunchRequest': function () {
  const speechOutput = HELP_MESSAGE;
  console.log("Inside launch");
  // 重提示语句更明确,引导用户回应
  const reprompt = "你想要一个新的美国事实吗?";
  this.response.speak(speechOutput).listen(reprompt);
  this.emit(':responseReady');
},

// 处理用户的肯定回答
'AMAZON.YesIntent': function () {
  // 直接跳转到获取事实的意图
  this.emit('GetmyFactIntent');
},

// 处理用户的否定回答
'AMAZON.NoIntent': function () {
  const speechOutput = "好的,下次再见!";
  this.response.speak(speechOutput);
  this.emit(':responseReady');
},

// 你的自定义获取事实的意图处理
'GetmyFactIntent': function () {
  // 这里写获取美国事实的逻辑,比如从数组随机选一个
  const usFacts = [
    "美国的首都是华盛顿特区",
    "美国共有50个州",
    "美国的国鸟是白头海雕"
  ];
  const randomFact = usFacts[Math.floor(Math.random() * usFacts.length)];
  const speechOutput = `${randomFact}。还要再来一个吗?`;
  const reprompt = "你还想要更多美国事实吗?";
  // 说完事实后继续保持会话,等待用户回应
  this.response.speak(speechOutput).listen(reprompt);
  this.emit(':responseReady');
}

3. 关键注意点

  • 确保你的Lambda函数已经正确注册了这些意图处理函数(如果是用v1 SDK,就是把这些函数放在Skill的handler对象里;如果是v2 SDK,要把每个意图做成单独的RequestHandler并添加到SkillBuilder)。
  • 重提示的语句要清晰,引导用户说出你配置的意图对应的内容,这样Alexa才能准确识别。

内容的提问来源于stack exchange,提问作者Justin

火山引擎 最新活动