Alexa Skill - 如何在 Lambda 函数中检索槽值
Posted
技术标签:
【中文标题】Alexa Skill - 如何在 Lambda 函数中检索槽值【英文标题】:Alexa Skill - How to Retrieve Slot Value in Lambda Function 【发布时间】:2017-05-31 19:53:37 【问题描述】:我正在开发一种具有一个 Intent 的 Alexa 技能,其中包括一个具有多个可能值的 Slot。
我的插槽是用"name" : "Channel"
、"type" : "LIST_OF_CHANNELS"
和值定义的
-
iqram
网格
菲尔
克莱德
如何检索说出的 槽值 以在我的 Lambda 函数中使用?这是“从话语部分中检索槽的值”,我正在寻找答案。非常感谢。
// retrieve value of slot from utterance
var c = intent.slots.Channel.value;
// append value to end of URL that references API
fetchEnseParse("/channel/" + c, function(body)
// continuation of this function is below
【问题讨论】:
【参考方案1】:var c = this.event.request.intent.slots.slotname.value
这应该会给你你正在寻找的东西。
【讨论】:
谢谢。那段小代码让我畅通无阻!您能否提供一些文档链接,我可以在其中阅读更多信息?谢谢!【参考方案2】:如果您的 lambda 接收到,您可以在这里找到它...
"request":
"type": "IntentRequest",
"intent":
"name": "YourIntentName",
"slots":
"slotname":
"name": "slotname",
"value": "HERE!"
,
"locale": "en-US"
,
事件被传递给您的 lambda 处理程序。
【讨论】:
【参考方案3】:var c = this.event.request.intent.slots.Channel.value;
【讨论】:
【参考方案4】:对我来说,以下工作:
event.currentIntent.slotDetails.<slot-name>.originalValue
其中slot-name
是Channel
。
【讨论】:
【参考方案5】:假设你对 alexa 说“coin”这个词,并且你将它编程为 bitcoin(主要对象名称)的同义词。
现在你可以得到 2 个结果。
首先:你得到原值“比特币”,即原值/匹配值
或者第二个:你得到口语价值“硬币”
第一个(比特币):
this.event.request.intent.slots.<yourslotname>.resolutions.resolutionsPerAuthority[0].values[0].value.name
秒(硬币):
this.event.request.intent.slots.<yourslotname>.value
小心:yourslotname 不是 Slottype!这是名字
【讨论】:
不确定这里为什么是-1?我现在也有同样的cse。我扩展了其中一个 AMAZON 列表 (AMAZON.Room),并添加了一些“小房间”的同义词(“电脑室”、“游戏室”),因此当 Alexa 为我的 Lambda 提供价值时,它可以提供“电脑室”和我不打算在 Lambda 级别实现同义词匹配,所以我会尝试从“resolutionsPerAuthority”中获取价值 谢谢@MariuszKarpicki 我真的不知道为什么我在这里收到-1,但我很幸运能提供帮助✌ 这里我找到了更详细的描述,以防其他人可能想阅读更多:developer.amazon.com/blogs/alexa/post/…【参考方案6】:单纯看this.event.request.intent.slots.<yourslot>.value
是不安全的
这个值只有“话语”,它可能不是你要找的
我不得不更深入地查看对象并查看解决方案对象并检查状态为code=="ER_SUCCESS_MATCH"
的权限对象
这是我的 java 代码,你几乎可以在 Nodejs 中做同样的事情
private String getSlotValue(JSONObject s)
String utterance="";
String choice ="NA";
try
if(s.has("option"))
JSONObject optionObject =s.getJSONObject("option");
utterance =optionObject.getString("value");
JSONObject resolutionsObject =optionObject.getJSONObject("resolutions");
JSONArray resolutionsPerAuthority =resolutionsObject.getJSONArray("resolutionsPerAuthority");
for (int i = 0; i < resolutionsPerAuthority.length(); ++i)
JSONObject auth = resolutionsPerAuthority.getJSONObject(i);
if (auth.getJSONObject("status").getString("code").equals("ER_SUCCESS_MATCH") )
if(auth.has("values"))
JSONArray values = auth.getJSONArray("values");
choice=values.getJSONObject(0).getJSONObject("value").getString("id");
return choice;
catch (Exception e)
choice="Error "+e.getMessage();
return choice;
【讨论】:
以上是关于Alexa Skill - 如何在 Lambda 函数中检索槽值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用从 Alexa Smart Home Skill Directive 收到的 BearerToken 来识别使用 AWS Lambda 和 NodeJS 的用户电子邮件和个人资料?
Alexa Skill - 如何获取要求 Alexa 的完整声明文本