Alexa Skill - 如何检索Lambda函数中的槽值

时间:2017-01-16 21:45:32

标签: aws-lambda alexa alexa-skills-kit

我正在开发一个带有一个Intent的Alexa技能,其中包含一个带有几个可能值的Slot。

我的广告位定义为"name" : "Channel""type" : "LIST_OF_CHANNELS"和值

  1. iqram
  2. ingrid
  3. phil
  4. 克莱德
  5. 如何检索要在我的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 
    

6 个答案:

答案 0 :(得分:12)

var c = this.event.request.intent.slots.slotname.value

这应该会给你你想要的东西。

答案 1 :(得分:4)

如果你的lambda收到你可以在这里找到它......

{
  "request": {
    "type": "IntentRequest",
    "intent": {
      "name": "YourIntentName",
      "slots": {
        "slotname": {
          "name": "slotname",
          "value": "HERE!"
        }
      }
    },
    "locale": "en-US"
  },
} 

该事件将传递给您的lambda处理程序。

答案 2 :(得分:0)

var c = this.event.request.intent.slots.Channel.value;

答案 3 :(得分:0)

对我来说,以下工作:

event.currentIntent.slotDetails.<slot-name>.originalValue

其中slot-nameChannel

答案 4 :(得分:0)

让我们说你对alexa说,&#34; 硬币&#34;并且您将其编程为比特币(主要对象名称)的同义词。

现在你可以得到2个结果。

首先:您获得原始值&#34;比特币&#34;,这是原始值/匹配值

或者第二:你得到了口头价值&#34;硬币&#34;

首先(比特币):

this.event.request.intent.slots.<yourslotname>.resolutions.resolutionsPerAuthority[0].values[0].value.name

秒(硬币):

this.event.request.intent.slots.<yourslotname>.value

小心:yourslotname不是Slottype!它的名字是

答案 5 :(得分:0)

仅查看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;
   }
}