両方の質問に該当します。 6つの異なるカスタムスロットを使用して応答をまとめることができます。 "ユーザ:私の数字は{num1}、{num2}、{num3}、{num4}、{num5}、{num6}"です。しかし、ユーザーが適切な答えを語らず、Alexaが各番号を取得するためにフォローアップの質問をしなければならない場合は、かなり悪いユーザーエクスペリエンスになります。最後に問題になるのは、カスタムスロットが1〜50の数字を含むように定義できるのに対し、アレクサは通常、カスタムスロットで提供される値(50〜99など)と同様の値を認識することです。受け取った値が1から50の間であることを確認するのはあなた次第です。そうでない場合は、適切な範囲内で別の番号を入力するように求めます。
結論:ユーザーが一度に1つの番号を入力する個別のやりとりが必要になります。
Alexa:"you will be prompted for 6 numbers between 1 and 50 please state them one at a time. Choose your first number."
User:"50"
Alexa:"Your First number is 50, Next number."...
これは単一のインテントで実装できます。その意図をGetNumberIntent
と名づけましょう。 GetNumberIntentは{数値}がカスタムスロットタイプ又は単にAMAZON.NUMBERある
{number}
pick {number}
choose {number}
の線に沿ってサンプルuterancesを有するであろう。番号が1から50の間であることを確認するまであなたに任せます。
SDKを使用してNode.jsにプログラムします。実装は、言語の選択に応じて異なる場合があります。
私は6つの異なる状態ハンドラを定義します。各ハンドラにはGetNumberIntentが必要です。スロット値が正しい場合にGetNumberIntentが返されると、セッションデータおよび/またはdynamodbに値を格納し、次の状態に進みます。スロット値が良好な値が受信されるまで、次の「NumberInputSixStateHandlers」
var NumberInputFiveStateHandlers = Alexa.CreateStateHandler(states.NUMFIVEMODE, {
'NewSession': function() {
this.emit('NewSession'); // Uses the handler in newSessionHandlers
},
//Primary Intents
'GetNumberIntent': function() {
let message = ` `;
let reprompt = ` `;
let slotValue = this.event.request.intent.slots.number.value;
if(parseInt(slotValue) >= 1 && parseInt(slotValue) <= 50){
this.handler.state = states.NUMSIXMODE;
this.attributes['NUMBERFIVE'] = this.event.request.intent.slots.number.value;
message = ` Your fifth number is `+slotValue+`. please select your sixth value. `;
reprompt = ` please select your sixth value. `;
}else{
message = ` The number `+slotValue)+` is not in the desired range between 1 and 50. please select a valid fifth number. `;
reprompt = ` please select your fifth value. `;
}
this.emit(':ask',message,reprompt);
},
//Help Intents
"InformationIntent": function() {
console.log("INFORMATION");
var message = ` You've been asked to choose a lottery number between 1 and 50. Please say your selection.`;
this.emit(':ask', message, message);
},
"AMAZON.StopIntent": function() {
console.log("STOPINTENT");
this.emit(':tell', "Goodbye!");
},
"AMAZON.CancelIntent": function() {
console.log("CANCELINTENT");
this.emit(':tell', "Goodbye!");
},
'AMAZON.HelpIntent': function() {
var message = `You're playing lottery. you'll be picking six numbers to play the game. For help with your current situation say Information. otherwise you may exit the game by saying quit.`;
this.emit(':ask', message, message);
},
//Unhandled
'Unhandled': function() {
console.log("UNHANDLED");
var reprompt = ' That was not an appropriate response. Please say a number between 1 and 50.';
this.emit(':ask', reprompt, reprompt);
}
});
に状態を変更する状態「NumberInputFiveStateHandlers」で例えば無効滞在がある場合、この第五の要求の一例です。このような6つの同じ状態があります。最終的に6つのセッション値になります。
this.attributes['NUMBERONE']
this.attributes['NUMBERTWO']
this.attributes['NUMBERTHREE']
this.attributes['NUMBERFOUR']
this.attributes['NUMBERFIVE']
this.attributes['NUMBERSIX']
これらの値をゲームに使用できます。あなたがあなたの状態のハンドラを登録してstates
変数に自分のモードを追加するために覚えておく必要があります前に、あなたはアレクサ-SDKを使用していない場合は
。
alexa.registerHandlers(newSessionHandlers, NumberInputOneStateHandlers, ... NumberInputSixStateHandlers);
var states = {
NUMONEMODE: '_NUMONEMODE',
...
...
NUMSIXMODE: '_NUMSIXMODE',
}
この回答は、Alexas-SDKを使用したコーディングの基礎をカバーするものではありません。そのトピックに関するより具体的な質問のための他のリソースがあります。また
あなたの意図は、[GetNumberIntent]と同じですので、あなたは、配列が所望の長さになるまで、アレイ上に新しい有効な番号をプッシュ単一StateHandlerとによって得ることができるかもしれません。これは、Intent Handler内でより多くのロジックを必要とするだけで、配列の長さが6になると状態を抜ける条件を必要とします。 異なる状態を見るのが簡単であるため、上記のコードを最初に試してください。
{number} {number} {number} {number} {number} {number}はできませんか?私はランダムな単語のリストのために同様に使用しました。そしてその方法では、ユーザが6語を言ったら、それはただ一つの意図を送るだけです。次に、あなたが探している範囲内にすべてがあることを確認するだけです。 – ialexander