サービスシミュレータを使用して自分のAlexaスキルをテストするのが難しいです。 appIdを設定した場合、スキルは機能しません。ここに関連するコードは次のとおりです。Node.jsを使用してAlexa AppIdを設定する
'use strict';
const Alexa = require('alexa-sdk');
var APP_ID = "amzn1.ask.skill.[my skill ID]";
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.appId = APP_ID;
alexa.registerHandlers(handlers);
alexa.execute();
}
私はサービスシミュレータでこのコードを実行すると、私は「リモートエンドポイントを呼び出すことができなかった、またはそれが返された応答が無効でした。」の応答を取得しますそしてCloudWatchのログのエラーメッセージ:私はコメントアウトした場合
The applicationIds don't match: applicationId and amzn1.ask.skill.[my skill id]
"errorMessage": "Invalid ApplicationId: amzn1.ask.skill.[my skill id]"
のAppID
//alexa.appId = APP_ID
を設定シミュレータは、有効な応答を返すように見えますが、私はログにこの警告を参照してください。
ここで
"Warning: Application ID is not set."
は、シミュレータにより送信されたラムダリクエストです:
{
"session": {
"sessionId": "SessionId.bb263d3e-2018-4aab-a0df-f945b3a25bf9",
"application": {
"applicationId": "amzn1.ask.skill.[my skill ID]"
},
"attributes": {},
"user": {
"userId": "amzn1.ask.account.[accountID]"
},
"new": true
},
"request": {
"type": "LaunchRequest",
"requestId": "EdwRequestId.d8b56c7f-63ea-48e8-8816-9b7c036d5816",
"locale": "en-US",
"timestamp": "2017-07-12T12:06:11Z"
},
"version": "1.0"
}
いくつかのオンラインの例はAPPIDプロパティがAPP_IDしなければならないことを示唆している:
alexa.APP_ID = APP_ID;
が、これは正しいことが表示されません。 alexa-sdkのソースコードによれば(とにかくそれを試してみてください)、プロパティは実装されたときにappIdする必要があります。
Amazonのシミュレータで作成されたjsonラムダリクエストに関連しているようです。これはAWSラムダテストイベントインターフェイスのテスト機能ではなく、Amazon Alexa開発者のポータルのシミュレータです。
AmazonのシミュレータからのラムダリクエストをカットアンドペーストしてAWSテストインターフェイスから実行すると、問題はありません。
はい、これは問題です。私はそれがずっとずっと落ちているとは信じられません。私は自分のコードに何か問題があると仮定しました。問題を修正したものを追加する: 'if(event.context && event.context.System.application.applicationId == 'applicationId'){ \t event.context.System.application.applicationId = event.session.application.applicationId; } ' – LaserCat