首页 文章

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

提问于
浏览
5

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

我的插槽定义为 "name" : "Channel""type" : "LIST_OF_CHANNELS" 和值

  • iqram

  • ingrid

  • phil

  • 克莱德

如何检索在我的Lambda函数中使用的发音 slot value ?这是"retrieve value of slot from utterance part"我希望得到回答 . 非常感谢 .

// 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

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

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

  • 3

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

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

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

  • 0
    var c = this.event.request.intent.slots.Channel.value;
    
  • -1

    对我来说,以下工作:

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

    其中 slot-nameChannel .

  • 11

    简单地看 this.event.request.intent.slots.<yourslot>.value 是不安全的

    这个值只有'话语',可能不是你想要的

    我不得不深入到对象并查看resolution对象并检查状态为 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;
       }
    }
    
  • 0

    让我们说你对alexa说“ coin ”这个词,你把它编程为 bitcoin (主要对象名)的同义词 .

    现在你可以获得2个结果 .

    第一:你得到原始值“比特币”,这是原始值/匹配值

    或者第二:你得到口语 Value “硬币”

    First (bitcoin):

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

    Second (coin):

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

    小心:yourslotname不是Slottype!这是名字

相关问题