Webページを呼び出すための単純なLambda関数を作成しました。これは、関数ページからテストすると正常に機能しますが、この関数を呼び出すスキルを作成しようとすると、「リモートエンドポイントを呼び出せなかったか、または返された応答は無効でした。」エラー。
ラムダ関数
var http = require('http');
exports.handler = function(event, context) {
console.log('start request to ' + event.url)
http.get(event.url, function(res) {
console.log("Got response: " + res.statusCode);
context.succeed();
}).on('error', function(e) {
console.log("Got error: " + e.message);
context.done(null, 'FAILURE');
});
console.log('end request to ' + event.url);
}
テストイベントコードは次のようになります。
{
"url": "http://mywebsite.co.uk"
}
「Alexaスキルキット」のトリガーを追加しました。
この関数のARNは次のように表示されます。
arn:aws:lambda:us-east-1:052516835015:function:CustomFunction
Alexaスキル(開発者ポータル)
次に、単純な意図でスキルを作成しました。
{
"intents": [
{
"intent": "CustomFunction"
}
]
}
そして、次のように発話を作成しました:
CustomFunction execute my custom function
自分のスキルの[Configuration]セクションで、[AWS Lambda ARN(Amazon Resource Name)]オプションを選択し、北米のボックスにARNを入力しました。
Test-> Service Simulatorセクションで、テキストとして「execute my custom function」を追加しました。これにより、Lambdaリクエストが次のように変更されます。
{
"session": {
"sessionId": "SessionId.a3e8aee0-acae-4de5-85df-XXXXXXXXX",
"application": {
"applicationId": "amzn1.ask.skill.XXXXXXXXX"
},
"attributes": {},
"user": {
"userId": "amzn1.ask.account.XXXXXXXXX"
},
"new": true
},
"request": {
"type": "IntentRequest",
"requestId": "EdwRequestId.445267bd-2b4a-45ef-8566-XXXXXXXXX",
"locale": "en-GB",
"timestamp": "2016-11-27T22:54:07Z",
"intent": {
"name": "RunWOL",
"slots": {}
}
},
"version": "1.0"
}
しかし、テストを実行すると、次のエラーが発生します。
リモートエンドポイントを呼び出すことができなかったか、リモートエンドポイントが返した応答が無効でした。
スキルが機能に接続できない理由について誰かが何か考えを持っていますか?
ありがとう
Amazon Alexa DeveloperConsoleに組み込まれているServiceSimulatorには既知の問題があります。シミュレーターによって生成されたJSONをコピーして、ラムダ関数のテストイベントに貼り付けてみてください。ラムダのテストイベントにアクセスするには、最初に青い[テスト]ボタンを見つけます。そのボタンの横にある([アクション]ドロップダウンメニュー)->([テストイベントの構成])->提供されたJSONをコード領域に貼り付け->([保存してテスト])を選択します。 Lambdaの組み込みテスト機能は、Alexaよりもはるかに信頼性があります。
これで問題が解決しない場合、ラムダのテストイベントは完全なstackTraceとエラーコードを返します。すべてのエラーが「リモートエンドポイントを呼び出すことができなかったか、返された応答が無効であった」ではない場合、トラブルシューティングがはるかに簡単になります。
{
"session": {
"sessionId": "SessionId.a3e8aee0-acae-4de5-85df-XXXXXXXXX",
"application": {
"applicationId": "amzn1.ask.skill.XXXXXXXXX"
},
"attributes": {},
"user": {
"userId": "amzn1.ask.account.XXXXXXXXX"
},
"new": true
},
"request": {
"type": "IntentRequest",
"requestId": "EdwRequestId.445267bd-2b4a-45ef-8566-XXXXXXXXX",
"locale": "en-GB",
"timestamp": "2016-11-27T22:54:07Z",
"intent": {
"name": "RunWOL",
"slots": {}
}
},
"version": "1.0"
}
.Zip
をアップロードしている間は、フォルダを.Zipに圧縮しないでください。
代わりに、フォルダに移動し、package.json
、index.js
、およびnode modules
を選択し、それらを圧縮してから.Zip
をアップロードします。
このエラーメッセージは非常に広範囲であり、さまざまな問題を示唆している可能性があります。このエラーが発生していましたが、私の場合はタイムアウトの問題でした。あなたがpingしているそのウェブサイトが応答するのにどれくらい時間がかかりますか?タイムアウトが適切に文書化されていないようです。ここで私の元の質問を参照してください: AmazonのAlexaスキルキット(ASK)ラムダインタラクションのトラブルシューティング