LoginSignup
1
2

More than 3 years have passed since last update.

Alexaスキルの配信コンテンツをSlackから更新できるようにしてみた(後編)

Last updated at Posted at 2018-07-03

おさらい

全体図

※本稿は「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開発者アカウントでサインインしてください。

Alexaスキル

スキル作成

  • 「スキルの作成」をクリック
  • 「スキル名」に任意の名前を入力
  • 「デフォルトの言語」で日本語を選択
  • 「スキルに追加するモデルを選択」でカスタムが選択済みであることを確認
  • 「スキルを作成」をクリック

スキル作成

モデルのビルド

  • 左ペインで「呼び出し名」を選択
  • 「呼び出し名」に任意の文字列を入力
  • 左ペインで「インテント(3)」を選択
  • 「AMAZON.StopIntent」をクリック
  • 「サンプル発話(0)」にダミー文字列を入力して「+」をクリック(最低1つ入力しないとビルド不可)
  • 「モデルの保存」をクリック
  • 「モデルのビルド」をクリック

モデルのビルド

スキルIDの取得

  • 左ペインで「エンドポイント」を選択
  • 「AWS LambdaのARN」を選択
  • 「エンドポイントの保存」をクリック
  • 「スキルID」をコピー(AWS Lambdaの設定時に使用する)

スキルIDの取得

4.2. AWS Lambda

AWS Lambdaマネジメントコンソールにアクセスして、AWSアカウントでサインインしてください。

AWS Lambda

関数の作成

  • 「関数の作成」をクリック
  • 「設計図」を選択
  • 「alexa-skill-kit-sdk-factskill」を検索して表示された結果をクリック
  • 「名前」に任意の関数名を入力
  • 「ロール」に「AmazonS3ReadOnlyAccess」ポリシーをアタッチしたロールを設定
  • 「関数の作成」をクリック

関数の作成

関数の設定

  • 「トリガーの追加」から「Alexa Skills Kit」を選択
  • 「スキルID」を入力して「追加」をクリック
  • 「保存」をクリック

関数の設定

関数の実装

  • index.jsを以下のコードに変更して「保存」をクリック
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:[関数名]")

ARNの取得

4.3. Alexaスキル(続き)

Alexa Skills Kit開発者コンソールに戻ってください。

エンドポイントの設定

  • 左ペインの「エンドポイント」を選択
  • 「デフォルトの地域」に作成したAWS LambdaでコピーしたARNを貼り付け
  • 「エンドポイントを保存」をクリック

エンドポイントの設定

4.4. テスト

※事前にコンテンツ投稿機能でAmazon S3にコンテンツを保存しておいてください

Alexa Skills Kit開発者コンソールの「テスト」タブで以下を入力すると、コンテンツが返答として表示されます。

[呼び出し名]をひらいて

テスト

また、Amazon Echoがあれば「公開」タブからベータテストを設定して実機テストすることもできます。

おわりに

本稿では、SlackとAlexaスキルの連携としてコンテンツ配信機能について紹介しました。
Amazon Echoをお持ちであれば、Alexaスキル「1分間セキュリティ」もよろしくお願いします。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2