2017-12-29 40 views
2

私は、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" 
} 
  • アミット

答えて

1

Amazon's documentationで指定されているように、ダイアログインタフェースは、特定の意図のすべての必要なスロットを埋めるためのものです:

質問と回答を収集するために意図されていますすべてのインテントの必要なスロットの値を確認します。インテントに必要なすべてのスロットが満たされて確認されるまで、会話は続きます。

あなたの場合、ユーザーのリクエストは意図していません(IntentRequestタイプ)が、LaunchRequestです。そのため、インタラクションモデルはなく、インテントハンドラによって処理されても、引き出すスロットはありません。

深い呼び出しに意図したようにあなたは私にサンドイッチ意図場合、またはあなたのサンドイッチ

を(作るために、XYZのスキルを教え、

アレクサのように、あなたのスキルは、仕事を得る必要がありますfooIntentの場合は、WHENスロットが得られます)。

希望すると便利です。

+0

ありがとうございます。私はlaunchrequestから呼び出す意図で 'this.event.request.intent.slots.foo.value'が利用可能であるとは思わない。上記の私の質問は、コンソールに表示されるリクエストと、ハンドラ用のコードで更新されました。 – Amit

+0

こんにちは@amit、私はあなたのケースをカバーするように、私の答えを拡大しました。あなたのスキルの行動が説明されているかどうか教えてください! –

+0

お返事ありがとうございました。私は昨日文書を読んだ後も同じことを推測しました。今すぐLaunchRequestの中からインテントを簡単なウェルカムメッセージで呼び出すように求めています。しかし、 'request'から' intent'を呼び出す能力がある方がいいでしょう。私はDialogとDelegationモデルが好きだと言わなければならない。 – Amit

関連する問題