HTTP.request を使用して値を REST サーバーに投稿する Alexa スキル (JS/Lambda) を取得しようとしています。私は仕事を成し遂げる簡単なものを一緒にハックしようとしています。明らかな何かが欠けていると思います。
理想的なスキルの使い方
- 私は、「アレクサ、ポスティング テスト 5 と言って」と言います。
- Alexa は、コードで指定された URL の値を 5 に更新します。
- Alexa が「値を 5 に更新しました」と言います。
問題
2 つの問題があります。
音声発話と入力発話。Amazon Service Simulator でスロット値 (「5」) を入力すると、その値がサーバーに送信されます。しかし、私が同じ言葉を発すると、Alexa は単語を正しく認識しますが (アプリ内のカードを見て確認)、値が投稿されず、「質問に対する答えが見つかりません」と言われます。
出力関数を呼び出す場所と方法。以下の 2 行のようなものを追加する必要があると思いますが、現在のコードのどこに追加するかによって、Alexa はノードを更新せずに応答するか、何もしません。
var text = 'I have updated the value to' + targetSlot; output( text, context );
呼び出し名
posting test
インテント スキーマ
{
"intents": [ {
"intent": "writeTarget",
"slots": [ {
"name": "Target",
"type": "NUMBER"
} ]
}]
}
サンプル発話
writeTarget {Target}
AlexaSkill.js と index.js
ここで各例にある AlexaSkill.js ファイルを使用しています。
私のindex.jsは次のようになります。URL、req.write 文字列などは **** に置き換えられます。
exports.handler = function( event, context ) {
var APP_ID = undefined;
const http = require( 'http' );
var AlexaSkill = require('./AlexaSkill');
var options = {
host: '****.com',
path: '/****',
port: '****',
method: 'PUT'
};
callback = function(response) {
var str = ''
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
};
var targetSlot = event.request.intent.slots.Target.value;
var req = http.request(options, callback);
req.write("****");
req.end();
};
function output( text, context ) {
var answer = {
outputSpeech: {
type: "PlainText",
text: text
},
card: {
type: "Simple",
title: "System Data",
content: text
},
shouldEndSession: true
};
context.succeed( { answer: answer } );
}
現在の使用状況: A
- Service Simulator で「5」と入力します。
- ノードは更新されますが、Alexa は何も言いません。
現在の使用状況: B
- Alexa に「Tell Posting Test two」と伝えます。
- Alexa は、「質問に対する答えが見つかりません」と言います。カードは、彼女が私のことを正しく聞いていることを確認しました。
- 何も更新されません。
助けてくれてありがとう。
更新: ログ
ログを追加するために投稿を更新しています:
エラーメッセージ
{
"errorMessage": "Process exited before completing request"
}
ログ出力エラー
TypeError: Cannot read property 'intent' of undefined
at exports.handler (/var/task/index.js:24:35)
ラムダ応答
The response is invalid