Alexa スキル開発で外部Json定義からIntentHandlerを生成する。
やりたいこと、
- WordPressから発話を更新
- Lambda関数にJsonを自動デプロイ
- Lambda関数ではJsonデータを読み込みそれからIntenteHandlerを生成
今回はの3の部分をメモ。
データのJson
{
"CheckOutIntent": {
"speechText":"チェックアウトは11:00です。"
},
"WifiIntent": {
"speechText":"SSIDはn,a,m,u,r,a,です。パスワードは、g,u,e,s,tです。"
}
}
汎用的にIntenteHandlerを生成する関数類を準備
var isCanIntentName = function(handlerInput,name){
return handlerInput.requestEnvelope.request.type === 'IntentRequest'
&& handlerInput.requestEnvelope.request.intent.name === name;
};
var simpleResponce = function(handlerInput,speechText,repromptText){
if(typeof repromptText == 'undefined'){
return handlerInput.responseBuilder
.speak(speechText)
.getResponse();
}else{
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(repromptText)
.getResponse();
}
};
var makeSimpleHnaler = function(intentName,speechText,repromptText){
return {
canHandle(handlerInput) {
return isCanIntentName(handlerInput,intentName);
},
handle(handlerInput) {
return simpleResponce(handlerInput, speechText,repromptText);
}
};
};
メイン処理
//データ読み込み
var data = require('./data.json');
//builderにわたすインテントを入れる配列 : 優先の高いLaunchRequestHandler入れておく。
var intents = [
LaunchRequestHandler
];
//dataをループにしてintentsにpush()する。
_.each(data,(intent,key)=>{
let i = makeSimpleHnaler(key,intent.speechText);
intents.push(i);
});
//優先度の低いEnd,SessionEnded,Errorなどのハンドラー追加
intents = [...intents,EndHandler, SessionEndedRequestHandler, ErrorHandler];
//builderにわたす
exports.handler = Alexa.SkillBuilders.standard()
.addRequestHandlers(...intents)
.lambda();
コメントを残す