LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

Node.jsでAlexaスキル開発ハンズオン #node_girls

Last updated at Posted at 2018-02-01

事前準備

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ページ

Developer Consoleへ
スクリーンショット 2018-02-01 17.18.53.png

Amazon.co.jp(お買い物アカウント)でログイン・登録

収益化はいったん「いいえ」(後から変更できます)
スクリーンショット 2018-02-01 17.20.26.png

ALEXAページへ
スクリーンショット 2018-02-01 17.21.37.png

「Alexa Skills Kit」を「始める」
スクリーンショット 2018-01-30 13.01.25.png

Alexaスキルを新規作成

スクリーンショット 2018-02-01 17.23.07.png

スクリーンショット 2018-02-01 12.50.25.png

「保存」 -> 「次へ」

対話モデルを作成

  • 「発話」をAlexaが認識・解釈し、処理ロジックに渡すプロセス
  • JSONファイルで記述するところ、「スキルビルダー」でGUIで設定できる
    スクリーンショット 2018-01-30 13.10.23.png

  • インテントを追加(今回は「GreetIntent」)
    スクリーンショット 2018-02-01 20.43.31.png

  • 認識させたい言葉を登録(6個以上30個くらいが望ましい)
    スクリーンショット 2018-02-01 12.52.17.png

「Save Model」 ->「Build Model」が完了したら「Configuration」に移動して一旦放置

  • スキルのIDを確認

スクリーンショット 2018-02-01 20.36.58.png

処理ロジックをつくる

  • AWSアカウントにログイン

サービスから「Lambda」を選択し、リージョンを「東京」にして「関数の作成」
スクリーンショット 2018-01-30 15.25.08.png

「設計図」から作成
スクリーンショット 2018-01-30 15.30.48.png

「alexa」を検索して「alexa-skill-kit-sdk-factskill」を選択
スクリーンショット 2018-01-30 15.32.35.png

関数名、ロール名を設定、「テンプレートから〜」を選び「シンプルなマイクロハーネスのアクセス権限」を選択 -> 「関数の作成」
スクリーンショット 2018-02-01 18.21.47.png

こんな感じになります
スクリーンショット 2018-01-30 15.38.40.png

トリガーに「Alexa Skills Kit」をセット
スクリーンショット 2018-01-30 18.04.36.png

トリガーにAlexa Skills Kitないよ!!って人はリージョンが東京になっているか確認してください!

「トリガーの設定足りてないよ」など言われるので先ほどの「スキルID」を貼り付けて「追加」-> 「保存」
スクリーンショット 2018-02-01 13.01.53.png

「Greet」をクリックして処理の内容を以下のコードに書き換える
スクリーンショット 2018-02-01 13.04.51.png

app.js
'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', 'こんにちは、はじめてのスキル開発おめでとうございます。');
    }
};
  • コード解説!

「保存」してARNをコピー
スクリーンショット 2018-02-01 13.13.04.png

音声インターフェースとロジックを紐付ける

Amazon developer画面に戻る

「設定」の「エンドポイント」で「AWS Lambda」を選択し、ARNを貼り付けて保存
スクリーンショット 2018-02-01 13.13.48.png

ひもづけ完了!

試してみよう!

シミュレーターでテスト

「テスト」タブからページ下の「サービスシミュレータ」へ
スクリーンショット 2018-02-01 13.20.00.png

なにか話しかけてみる
スクリーンショット 2018-02-01 18.25.36.png

  • 解説!

デバイスでテスト

スマホアプリのタブから「スキル」
IMG_7812.PNG

「有効なスキル」を選択
IMG_7813.PNG

「DEVスキル」の中にあるはず -> 「有効」に
IMG_7814.PNG

実機で試してみよう!

  • 「・」を押すと受付モードになるよ

質問に応答させてみる

ここまでは「開いたら終わってしまう」スキル

app.js
'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);
    }
};

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