Dialogモデルでの会話インタラクション
起動するだけのスキルならば簡単なのですが、たとえば「5個の2ケタ数字を足す計算問題を出して!」というような変数付きスキルの場合、ユーザーが全ての情報をスムースに発話してくれるとは限りません。
『「何桁」の数字を「何個」足す』と指定する場合には次のような状態が発生します。
・ユーザーが桁数しか指定しない
・ユーザーが個数しか指定しない
・ユーザーが何も指定しない
このようにアレクサに指示を出す時の変数(スロット)が複数の場合、ユーザーから足らない情報を聞き出すための会話はとても複雑になります。そんな時に便利なのが、この記事の「Dialogモデル」です。
Node.js側のハンドラは以下のようになり、見通しの良いプログラムになります。
// ゲームレベルを指定してもらう「○桁を△個」
const askLevelStateHandlers = Alexa.CreateStateHandler(STATES.WAITING_FOR_GAMELEVEL, {
'LevelSetIntent': function () {
if (this.event.request.dialogState === 'STARTED') {
var updatedIntent = this.event.request.intent;
・・・ここでupdatedIntentのスロットにデフォルト値を入れることもできる・・・
this.emit(':delegate', updatedIntent);
return;
} else if (this.event.request.dialogState !== 'COMPLETED'){
this.emit(':delegate'); // スロットに値が入るまでAlexaに任せる
return;
} else {
// 全て必要なスロット値が揃った時は、以降の処理が走る
}
var ketasuu = intent.slots.ketasuu.value;
var kosuu = intent.slots.kosuu.value;
・・・ここでゲームスタートの準備・・・
this.handler.state = STATES.EXECUTE;
this.emitWithState('GameStartIntent', true);
},
'AMAZON.HelpIntent': function () {・・・・・・},
'AMAZON.CancelIntent': function () {・・・・・・},
'AMAZON.StopIntent': function () {・・・・・・},
'Unhandled': function () {・・・・・・},
});
DialogモデルについてのAmazon本家のASKリファレンスはこちら。
#alexa #skill #dialogmodel #code
この記事が気に入ったらサポートをしてみませんか?