web-dev-qa-db-ja.com

Alexaスキル-Lambda関数でスロット値を取得する方法

いくつかの可能な値を持つスロットを含む1つのインテントでAlexaスキルを開発しています。

私のスロットは"name" : "Channel""type" : "LIST_OF_CHANNELS"、および値で定義されています

  1. iqram
  2. ingrid
  3. フィル
  4. クライド

発声されたスロット値を取得して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
Ingrid

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

これはあなたが探しているものをあなたに与えるはずです。

12
Pseudope

ラムダが受信した場合は、ここで見つけることができます...

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

イベントはラムダハンドラーに渡されます。

4
Tom

私にとって、以下はうまくいきました:

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

どこ slot-nameChannelです。

0
Bharat Anand

あなたがAlexaに「coin "」という単語を言ったとしましょう。これをbitcoin(メインオブジェクト名)の同義語としてプログラムしました。

これで、2つの結果を得ることができます。

最初に:元の値/一致した値である元の値「ビットコイン」を取得します

または2番目:あなたは話された価値「コイン」を手に入れます

最初の(ビットコイン):

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

2番目(コイン):

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

注意:yourslotnameはSlottypeではありません!名前です

0
chainstair

単に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;
   }
}
0
user10112683
var c = this.event.request.intent.slots.Channel.value;
0
Caleb Gates