私は、LaunchRequest経由でスキルを開くと、ユーザーを1つのインテントにリダイレクトしたいAlexaスキルに取り組んでいます。LaunchRequest内から別のAlexaインテントを呼び出す
- ユーザーがLaunchRequestがこれを受信して、別の意図に要求を転送
Open xyz skill
- 言います。
this.emit('AnotherIntent')
AnotherIntent
は、機能するために必要なSLOTを有する。- 必要に応じてSLOTをセットアップしました。
AnotherIntent
は、単独で呼び出されたときに完全に正常に動作します。
ただし、スキルを起動して上記の手順2で述べたようにAnotherIntent
を呼び出すと、Alexaスキルが起動しません。
もう1つ注意すべき点は、このシナリオのスキルビルダーから同じAlexaスキルをテストすると、出力jsonが正しくSLOTが抽出されたことがわかります。エコーデバイスから実行しようとしているときに何が起こっているのか分かりません。
私はNodeJSとLambdaを使用して自分のAlexaハンドラを配備しています。
ご協力いただければ幸いです。
ハンドラ - - コメントに基づいて
また参照
var handlers = {
'LaunchRequest': function() {
console.log("LaunchRequest::" + JSON.stringify(this.event.request));
this.emit('fooIntent');
},
'SessionEndedRequest': function() {
console.log('session ended!');
},
'fooIntent': function() {
const intentObj = this.event.request.intent;
if (!intentObj || (intentObj && !intentObj.slots.WHEN.value)) {
console.log('fooIntent::UserId' + this.event.session.user.userId);
const slotToElicit = 'WHEN';
const speechOutput = 'Ask a question here ?';
const repromptSpeech = speechOutput;
console.log("emitting elict now");
this.emit(':elicitSlot', slotToElicit, speechOutput, repromptSpeech);
} else {
// SLOT is filled, let's query the database to get the value for the slot.
console.log("fooIntent intent:something is requested for " + this.event.request.intent.slots.WHEN.value);
// All the slots are filled (And confirmed if you choose to confirm slot/intent)
fooIntentFunction(this,this.event.request.intent.slots.WHEN.value);
}
},
'AMAZON.HelpIntent': function() {
var speechOutput = "Need to come up with one.";
var reprompt = "What can I help you with?";
this.emit(':ask', speechOutput, reprompt);
},
'AMAZON.CancelIntent': function() {
this.emit(':tell', 'Goodbye!');
},
'AMAZON.StopIntent': function() {
this.emit(':tell', 'Goodbye!');
}
}。 LaunchRequest
{
"type": "LaunchRequest",
"requestId": "amzn1.echo-api.request.972bb705-d181-495e-bf60-991f2bd8fbb1",
"timestamp": "2017-12-30T21:35:21Z",
"locale": "en-US"
}
にLaunchRequestから呼び出されたときにインテントに捕捉JSONリクエストを捕捉
JSONリクエスト。 intent
が設定されていないことを示しています。私はこれが、上記のような重要な実装を引き出しようとすると失敗し続ける理由だと考えています。
{
"type": "LaunchRequest",
"requestId": "amzn1.echo-api.request.972bb705-d181-495e-bf60-991f2bd8fbb1",
"timestamp": "2017-12-30T21:35:21Z",
"locale": "en-US"
}
- アミット
ありがとうございます。私はlaunchrequestから呼び出す意図で 'this.event.request.intent.slots.foo.value'が利用可能であるとは思わない。上記の私の質問は、コンソールに表示されるリクエストと、ハンドラ用のコードで更新されました。 – Amit
こんにちは@amit、私はあなたのケースをカバーするように、私の答えを拡大しました。あなたのスキルの行動が説明されているかどうか教えてください! –
お返事ありがとうございました。私は昨日文書を読んだ後も同じことを推測しました。今すぐLaunchRequestの中からインテントを簡単なウェルカムメッセージで呼び出すように求めています。しかし、 'request'から' intent'を呼び出す能力がある方がいいでしょう。私はDialogとDelegationモデルが好きだと言わなければならない。 – Amit