事前準備
Alexaとスマートフォンのペアリング
- スマホアプリをインストール
- アプリ内から設定
- 2.5GHz帯のWi-Fiに接続
※一斉にやると混線するので、各テーブル1人ずつやりましょう!
AWSアカウントの登録
- Amazon.co.jp(お買い物アカウント)とは違うよ
- クレカ登録、電話認証が必要(5分くらい)
- Lambdaを使わない場合はAWSアカウントなくてOK
Alexaのスキル開発について
そもそもAlexaのスキルって?
- 「スキル」= 開発者によって追加されたAlexaの機能
- カスタムスキル(汎用)
- スマートホームスキル(家電制御など)
- フラッシュブリーフィングスキル(読み上げ)
- ゲームとトリビアのスキル
- カスタムスキル -> Alexaスキルストアで公開できる
どうやってスキルを開発できる?
- 「音声インターフェース」と「処理ロジック」
- 処理ロジック -> エンドポイントを用意する or AWS Lambdaを使う
- Alexa Skills Kit for Node.js(Alexa SDK)
音声インターフェースをつくる
Amazon developerに登録
Amazon developerページ
Amazon.co.jp(お買い物アカウント)でログイン・登録
Alexaスキルを新規作成
「保存」 -> 「次へ」
対話モデルを作成
- 「発話」をAlexaが認識・解釈し、処理ロジックに渡すプロセス
「Save Model」 ->「Build Model」が完了したら「Configuration」に移動して一旦放置
- スキルのIDを確認
処理ロジックをつくる
- AWSアカウントにログイン
サービスから「Lambda」を選択し、リージョンを「東京」にして「関数の作成」
「alexa」を検索して「alexa-skill-kit-sdk-factskill」を選択
関数名、ロール名を設定、「テンプレートから〜」を選び「シンプルなマイクロハーネスのアクセス権限」を選択 -> 「関数の作成」
トリガーにAlexa Skills Kitないよ!!って人はリージョンが東京になっているか確認してください!
「トリガーの設定足りてないよ」など言われるので先ほどの「スキルID」を貼り付けて「追加」-> 「保存」
「Greet」をクリックして処理の内容を以下のコードに書き換える
'use strict';
const Alexa = require('alexa-sdk');
exports.handler = function(event, context, callback) {
const alexa = Alexa.handler(event, context);
alexa.registerHandlers(handlers);
alexa.execute();
};
const handlers = {
'Unhandled': function () {
this.emit(':tell', 'こんにちは、はじめてのスキル開発おめでとうございます。');
}
};
- コード解説!
音声インターフェースとロジックを紐付ける
Amazon developer画面に戻る
「設定」の「エンドポイント」で「AWS Lambda」を選択し、ARNを貼り付けて保存
ひもづけ完了!
試してみよう!
シミュレーターでテスト
- 解説!
デバイスでテスト
実機で試してみよう!
- 「・」を押すと受付モードになるよ
質問に応答させてみる
ここまでは「開いたら終わってしまう」スキル
'use strict';
const Alexa = require('alexa-sdk');
exports.handler = function(event, context, callback) {
const alexa = Alexa.handler(event, context, callback);
alexa.registerHandlers(handlers);
alexa.execute();
};
const handlers = {
'GreetIntent': function () {
var intent = this.event.request.intent;
const speechOutput = 'こんにちは、はじめてのスキル開発へようこそ。';
const reprompt = 'どうしますか?';
this.emit(':ask', speechOutput, reprompt);
},
'AMAZON.HelpIntent': function () {
const speechOutput = '今日はどうしますか?';
this.emit(':ask', speechOutput, speechOutput);
},
'AMAZON.CancelIntent': function () {
this.emit('AMAZON.StopIntent');
},
'AMAZON.StopIntent': function () {
this.emit(':tell', 'また明日。');
},
'Unhandled': function () {
const speechOutput = 'すみません。うまく理解できませんでした。';
const reprompt = 'もう一度おっしゃってください。';
this.emit(':ask', speechOutput, reprompt);
}
};