おさらい
※本稿は「Alexaスキルの配信コンテンツをSlackから更新できるようにしてみた(前編)」の後編です
Alexaスキル「1分間セキュリティ」の運用機能として実装したSlack連携を紹介しています。
前編ではSlackに投稿された内容をAmazon S3に保存するコンテンツ投稿機能を説明しました。
後編である本稿では、Amazon S3内のコンテンツをAmazon Echoに配信するコンテンツ配信機能について説明します。
前提条件(再掲)
- Amazon開発者アカウント
- AWSアカウント
- Slackアカウント
4. コンテンツ配信機能
Amazon S3内のコンテンツをAmazon Echoへ音声配信する機能です。
Alexaスキルの呼び出しによってAWS Lambdaを起動し、Amazon S3に保存されたコンテンツを取得してAmazon Echoへ返却します。
4.1. Alexaスキル
Alexa Skills Kit開発者コンソールにアクセスして、Amazon開発者アカウントでサインインしてください。
スキル作成
- 「スキルの作成」をクリック
- 「スキル名」に任意の名前を入力
- 「デフォルトの言語」で日本語を選択
- 「スキルに追加するモデルを選択」でカスタムが選択済みであることを確認
- 「スキルを作成」をクリック
モデルのビルド
- 左ペインで「呼び出し名」を選択
- 「呼び出し名」に任意の文字列を入力
- 左ペインで「インテント(3)」を選択
- 「AMAZON.StopIntent」をクリック
- 「サンプル発話(0)」にダミー文字列を入力して「+」をクリック(最低1つ入力しないとビルド不可)
- 「モデルの保存」をクリック
- 「モデルのビルド」をクリック
スキルIDの取得
- 左ペインで「エンドポイント」を選択
- 「AWS LambdaのARN」を選択
- 「エンドポイントの保存」をクリック
- 「スキルID」をコピー(AWS Lambdaの設定時に使用する)
4.2. AWS Lambda
AWS Lambdaマネジメントコンソールにアクセスして、AWSアカウントでサインインしてください。
関数の作成
- 「関数の作成」をクリック
- 「設計図」を選択
- 「alexa-skill-kit-sdk-factskill」を検索して表示された結果をクリック
- 「名前」に任意の関数名を入力
- 「ロール」に「AmazonS3ReadOnlyAccess」ポリシーをアタッチしたロールを設定
- 「関数の作成」をクリック
関数の設定
- 「トリガーの追加」から「Alexa Skills Kit」を選択
- 「スキルID」を入力して「追加」をクリック
- 「保存」をクリック
関数の実装
- index.jsを以下のコードに変更して「保存」をクリック
'use strict';
const Alexa = require('alexa-sdk');
const Aws = require('aws-sdk');
const s3 = new Aws.S3();
var handlers = {
'LaunchRequest': function() {
var obj = this;
s3.getObject(
{
Bucket: '# bucket name #',
Key: '# key name #'
},
function(err, data) {
if (err) {
console.error(err);
obj.emit(':tell', '# error message #');
}
else {
obj.emit(':tell', data.Body.toString());
}
}
);
},
'Unhandled': function() {
this.emit(':responseReady');
},
'SessionEndedRequest': function() {
// noop
}
};
exports.handler = function(event, context, callback) {
var alexa = Alexa.handler(event, context);
alexa.appId = '# app id #';
alexa.registerHandlers(handlers);
alexa.execute();
};
※「# ~ #」で囲んだ部分は以下の値に書き換えてください。
項目 | 値 |
---|---|
bucket name | コンテンツ投稿機能と同じバケット名 |
key name | コンテンツ投稿機能と同じキー名 |
error message | 任意のエラーメッセージ |
app id | AlexaスキルのアプリケーションID(スキルID) |
ARNの取得
- 作成した関数のARNをコピー(画面右上の"arn:aws:lambda:[リージョン名]:[数字列]:function:[関数名]")
4.3. Alexaスキル(続き)
Alexa Skills Kit開発者コンソールに戻ってください。
エンドポイントの設定
- 左ペインの「エンドポイント」を選択
- 「デフォルトの地域」に作成したAWS LambdaでコピーしたARNを貼り付け
- 「エンドポイントを保存」をクリック
4.4. テスト
※事前にコンテンツ投稿機能でAmazon S3にコンテンツを保存しておいてください
Alexa Skills Kit開発者コンソールの「テスト」タブで以下を入力すると、コンテンツが返答として表示されます。
[呼び出し名]をひらいて
また、Amazon Echoがあれば「公開」タブからベータテストを設定して実機テストすることもできます。
おわりに
本稿では、SlackとAlexaスキルの連携としてコンテンツ配信機能について紹介しました。
Amazon Echoをお持ちであれば、Alexaスキル「1分間セキュリティ」もよろしくお願いします。