作成中のAlexaカスタム・スキルで、不可解な現象に悩まされています。
解決策の分かる方、いらっしゃらないでしょうか?
環境: Echo show 5
1: >> スキルを開く (アレクサ、〇〇を開いて)
2: << speakに指定したメッセージが発話される
3: (放置)
4: >> repromptに指定したメッセージが発話される
5: (放置)
6:(ブルーのライトが消える/スキルが表示した画面のメッセージはそのまま)
7: >> スキルを開く (アレクサ、◯◯を開いて)
8: 意図しないインテントでスキルが呼び出される (<-ここが問題の現象)
期待する動作: スキルが再度呼び出される (LaunchRequestを受け取る)
この現象が起きるのは、#6のあと、SessionEndedの呼び出しを受け取る前に、#7のスキルの呼び出しを行った時です。#6のあとSessionEndedを受け取るまで15秒程度あります。この間に#7の呼び出しをすると、#8のような現象になるようです。
SessionEndedの呼び出しを受け取るまで待つと、画面がクリアされ、正しくスキルが呼び出されます。
#7の発話内容をアレクサ・アプリで確認すると、音声フィードバックの内容は正しい内容(アレクサ、◯◯を開いて)でした。
#8で受け取るインテントはスキルで定義しているものですが、発話内容とはおよそ関係のなさそうなものです。(誤認識とは思えない)
Echo dotではこの現象は発生しません。#6のあと、直ぐにSessionEndedを受け取っています。
#5で放置せずに発話をすると正しいインテントで呼び出されます。
#7で「アレクサ、今日の天気は」と発話すると、ブルーのライトが点灯して発話は受け取っている様に見えますが、その後はライトが消えて何の反応もありません。スキルが表示した画面もそのままです。やがて画面はクリアされますが、SessionEndedは受け取りません。
#7で「アレクサ、XXして」(XXはスキルのコマンド)と発話すると、XXに該当するインテントが正しく伝わります。
#7で「アレクサ」を付けないと反応しません。
因みに#1に対するレスポンスは下記のようなコードになっています。
withSimpleCard()をコメント・アウトすると、#6の直後にSessionEndedを受け取り、問題の現象は発生しません。
const response = handlerInput.responseBuilder
.speak('…')
.withSimpleCard('…', '…')
.reprompt('…')
.withShouldEndSession(false)
.getResponse();
return response;
下記の質問内容が関係ありそうに見えます。
回答ではshouldEndSessionをtrueに設定するとなっていますが、LaunchRequestに対するレスポンスなので、ユーザからの応答を期待していて、セッションは継続する必要があります。
画面表示付きのskillを作成したが、対話が終了しても画面が消えない。