Alexaスキル-Lambda関数でスロット値を取得する方法
いくつかの可能な値を持つスロットを含む1つのインテントでAlexaスキルを開発しています。
私のスロットは"name" : "Channel"
、"type" : "LIST_OF_CHANNELS"
、および値で定義されています
- iqram
- ingrid
- フィル
- クライド
発声されたスロット値を取得して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
var c = this.event.request.intent.slots.slotname.value
これはあなたが探しているものをあなたに与えるはずです。
ラムダが受信した場合は、ここで見つけることができます...
{
"request": {
"type": "IntentRequest",
"intent": {
"name": "YourIntentName",
"slots": {
"slotname": {
"name": "slotname",
"value": "HERE!"
}
}
},
"locale": "en-US"
},
}
イベントはラムダハンドラーに渡されます。
私にとって、以下はうまくいきました:
event.currentIntent.slotDetails.<slot-name>.originalValue
どこ slot-name
はChannel
です。
あなたが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ではありません!名前です
単に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;
}
}
var c = this.event.request.intent.slots.Channel.value;