Amazon Alexaのスキルを作成したいのですが、音声コマンドによってトリガーされると、HTTPSリクエストを介してAPIから情報を取得し、その結果をAlexaユーザーへの音声応答として使用します。
Node.jsのイベント駆動型の概念と Node.js用のAlexaスキルキット の内部のために、ここでは(特にnode.jsの初心者にとって)少し課題があります。また、ユーザーからパラメーターを入手することもそれほど簡単ではありません。
誰かが最初にいくつかのサンプルコードを提供できますか?
最初のAlexaSkillを作成したとき、私は新しいnode.js、Lambda、およびAlexa SkillsSDKでした。それで私はいくつかの問題に遭遇しました。同じ問題に遭遇した次の人のために、ここで解決策を文書化したいと思います。
次のコードスニペットがあれば、2時間のデバッグを簡単に節約できたでしょう。 :-)
私のサンプルでは、ラムダスクリプトはすでにAPIからフォーマット済みのテキストを取得しています。 XML/JSONまたはその他のAPIを呼び出す場合は、答えをもう少し処理する必要があります。
'use strict';
const Alexa = require('Alexa-sdk');
var https = require('https');
const APP_ID = ''; // TODO replace with your app ID (OPTIONAL).
const handlers = {
'functionwithoutdata': function() {
var responseString = '';
var mythis = this;
https.get('**YOURURL**?**yourparameters**', (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
responseString += d;
});
res.on('end', function(res) {
const speechOutput = responseString;
console.log('==> Answering: ', speechOutput);
mythis.emit(':tell', 'The answer is'+speechOutput);
});
}).on('error', (e) => {
console.error(e);
});
},
'functionwithdata': function() {
var mydata = this.event.request.intent.slots.mydata.value;
console.log('mydata:', mydata);
var responseString = '';
var mythis = this;
https.get('**YOURURL**?**yourparameters**&mydata=' + mydata, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
responseString += d;
});
res.on('end', function(res) {
const speechOutput = responseString;
console.log('==> Answering: ', speechOutput);
mythis.emit(':tell', 'The answer is'+speechOutput);
});
}).on('error', (e) => {
console.error(e);
});
}
};
exports.handler = (event, context) => {
const Alexa = Alexa.handler(event, context);
Alexa.APP_ID = APP_ID;
Alexa.registerHandlers(handlers);
Alexa.execute();
};
Alexa音声対応ボットを作成する方法をお探しの場合は、適切な場所にいます。
ローカルホストで実行され、ngrokを介してトンネリングされたノードサーバーを使用して、AmazonAlexaボットを最初から作成しましょう。
Amazon開発者アカウントをお持ちでない場合は、サインアップしてください
Alexa開発者ページに移動します
Alexaコンソールに移動します
[スキルの作成]をクリックします
スキルに名前を付けます。私は自分の名前をTestSkillにして、[次へ]をクリックします。
スキルに追加するモデルを選択してください。実験用にカスタムを選択しました
[スキルの作成]をクリックします
このようにして、Alexaスキルダッシュボードにアクセスします
呼び出し名を入力します。「givemepizza」という名前を付けて、[モデルの保存]をクリックします。
エンドポイントをクリックします
ここで、エンドポイントをAlexaコンソールに提供する必要がありますが、最初にエンドポイントをセットアップする必要があります。
デフォルトの場所、つまり「/」でPOSTリクエストを受け入れることができるサーバーを作成します。
サーバーを作成するためのテクニックはたくさんありますが、私は個人的にノードを好みます。
Node、npm、Visualstudioコードがすでにインストールされていると思います
このチュートリアルの特定の要件については、以下の手順に従ってHelloWorldノードアプリを作成します。
npm init
を実行し、パッケージ名Alexaを求められたらcd Alexa
を実行しますpackage.json
ファイル内npm i express http -save
を実行すると、package.json
ファイルに次のエントリが追加されます。
「依存関係」:{「エクスプレス」:「4.16.3」、「http」:「0.0.0」}
index.js
ファイルのメインキーのpackage.json
に値を設定します
index.js
を追加します次のコードをindex.js
ファイルに追加します。
const express = require( 'express'); const app = express(); app.post( '/'、(req、res)=> res.send({version: '1.0'、response:{shouldEndSession:false、outputSpeech:{type: 'SSML'、text: 'Hello World!'、 ssml: 'Hello World!'}}})); app.listen(8080、()=> console.log( 'ポート8080でリッスンしているアプリの例!'));
scripts
の値を{ “start”: “node index.js” }
に設定します
npm start
を実行します以下の手順に従って、ngrokを使用してノードサーバーを実行しているPORT 8080
のローカルホストにトンネルを追加します。
ngrok http 8080
を実行します私の開発エンドポイントは、認証局からのワイルドカード証明書を持つドメインのサブドメインです
[エンドポイントの保存]をクリックします
JSONエディターをクリックして、次のモデルを提供します。
{
"interactionModel": {
"languageModel": {
"invocationName": "get me pizza",
"intents": [
{
"name": "PizzaOrderIntent",
"slots": [],
"samples": [
"Give me a pizza"
]
},
{
"name": "Amazon.FallbackIntent",
"samples": [
"I didn't understand"
]
},
{
"name": "Amazon.CancelIntent",
"samples": [
"cancel plz"
]
},
{
"name": "Amazon.HelpIntent",
"samples": [
"help"
]
},
{
"name": "Amazon.StopIntent",
"samples": [
"stop"
]
}
],
"types": []
}
}
}
スキルモデルが構築されたら、それをテストする必要があります。 [テスト]タブをクリックし、[このスキルのテストが有効になっています]をオンに切り替えます。
これで、ローカルで実行されているノードプロジェクトに接続されたAlexaボットが作成されました。
質問?コメント? [email protected]で私に連絡してください
これは、awsLambdaを使用する必要がなく、エクスプレスの純粋なnodejsサーバーで動作するAlexa sdkを使用するサンプルコード(私のものではありません)です。