从意图中获取 Alexa Slot 值
Posted
技术标签:
【中文标题】从意图中获取 Alexa Slot 值【英文标题】:Getting an Alexa Slot value out of an intent 【发布时间】:2016-04-25 13:20:08 【问题描述】:我正在努力构建 Alexa 技能,但在将我的插槽值从意图对象中获取时遇到了障碍。意图对象 JSON 如下所示:
"intent":
"name": "string",
"slots":
"string":
"name": "string",
"value": "string"
我的问题是第一个“字符串”值是什么来识别插槽?文档有这个:
A map of key-value pairs that further describes what the user meant based on a predefined intent schema. The map can be empty.
The key is a string that describes the name of the slot. Type: string.
The value is an object of type slot. Type: object. See Slot Object.
这是否意味着获得槽的关键是我在交互模型中设置的名称?我犹豫不决的唯一原因是因为我们在插槽中已经有一个名称对象,这绝对是插槽的名称 - 所以如果访问特定插槽的方式是通过名称,名称参数将是多余的(您已经通过访问插槽知道名称。)
有人知道我如何访问 Alexa 技能中的各个插槽值吗?
顺便说一下,我正在使用 NodeJS 进行这项技能。
【问题讨论】:
【参考方案1】:由于我在这方面遇到了很多麻烦,因此(现在)更具体的答案是:
'PersonIntent': function ()
var text = 'Hello ' + this.event.request.intent.slots.FirstPerson.value;
this.emit(':tell', text);
,
使用此意图架构:
"intents": [
"intent": "PersonIntent",
"slots": [
"name": "FirstPerson",
"type": "AMAZON.DE_FIRST_NAME"
]
]
【讨论】:
this.emit()
和this.event...
等中的this
是什么类型?
this 关键字。在 javascript 中,称为 this 的东西是“拥有” JavaScript 代码的对象。当在函数中使用时,this 的值是“拥有”该函数的对象。当在对象中使用时,this 的值是对象本身。对象构造函数中的 this 关键字没有值。
如何在php中使用this.emit
。我正在用 php 编写代码,我需要执行此功能。【参考方案2】:
这是您的结构的意图示例:
"intent":
"name": "MovieIntent",
"slots":
"string":
"name": "Movie",
"value": "Titanic"
因此,这意味着您使用的 Intent 被命名为:Movie Intent(您在交互模型中设置的那个)。您将通过这种方式获得价值:
var movieSlot = intent.slots.Movie.value;
【讨论】:
【参考方案3】:截至 2019 年 7 月:您可以在您的意图处理程序中访问它,如下所示
if (handlerInput.requestEnvelope.request.intent.slots.SLOTNAME === undefined)
text = 'Hello! SLOTNAME not identified';
else
text = 'Hello!, SLOTNAME identified: ' + handlerInput.requestEnvelope.request.intent.slots.SLOTNAME.value;
将SLOTNAME
替换为您的插槽名称。
同样非常重要的是undefined
只是作为一个对象,而不是undefined
【讨论】:
【参考方案4】:假设我们在交互模型中有一个名为 create meeting request 的意图。
"intents": [
"name": "CreateMeetingRequest",
"slots": [
"name": "meetingdate",
"type": "AMAZON.DATE",
"samples": [
"meetingdate at meetingTime for duration",
"meetingdate at meetingTime",
"meetingdate and meetingTime",
"meetingdate"
]
,
"name": "meetingTime",
"type": "AMAZON.TIME",
"samples": [
"meetingTime for duration",
"meetingTime"
]
,
"name": "duration",
"type": "AMAZON.DURATION",
"samples": [
"duration"
]
,
"name": "subject",
"type": "AMAZON.SearchQuery",
"samples": [
"subject"
]
,
"name": "toName",
"type": "AMAZON.US_FIRST_NAME",
"samples": [
"toName"
]
],
"samples": [
"meeting invite",
"set up meeting",
"setup meeting",
"meetingdate at meetingTime",
"create meeting with toName",
"schedule a meeting with toName on meetingdate at meetingTime for duration",
"Setup meeting with toName",
"create meeting",
"Setup meeting on meetingdate at meetingTime",
"Setup new meeting",
"create meeting request"
]
]
你想在 lambda 代码中访问它。您可以使用以下几行。
'CreateMeetingRequest': function ()
const toName = (this.event.request.intent.slots.toName.value ? this.event.request.intent.slots.toName.value.toLowerCase() : null);
const subject = (this.event.request.intent.slots.subject.value ? this.event.request.intent.slots.subject.value.toLowerCase() : null);
const meetingdate = (this.event.request.intent.slots.meetingdate.value ? this.event.request.intent.slots.meetingdate.value : null);
const meetingTime = (this.event.request.intent.slots.meetingTime.value ? this.event.request.intent.slots.meetingTime.value : null);
const duration = (this.event.request.intent.slots.duration.value ? this.event.request.intent.slots.duration.value : null);
console.log("toName:",toName,", meetingdate:",meetingdate,", meetingTime:", meetingTime);
//your business logic
,
this
是包含来自 alexa 的完整 JSON 请求的对象。因此,您可以使用 slotname 访问任何插槽
例如:如果我们想访问subject slot
,那么我们可以使用this.event.request.intent.slots.subject.value
【讨论】:
以上是关于从意图中获取 Alexa Slot 值的主要内容,如果未能解决你的问题,请参考以下文章