Help us understand the problem. What is going on with this article?

クリスマスプレゼントに、Amazon Echoはいかが?〜Alexaスキルを自作してみよう〜

More than 1 year has passed since last update.

diffeasyアドベントカレンダー11日目!

みなさん、AIスピーカー持ってますか?
僕はAmazon Echo(以下Echo) Dotが招待制のときに買って、現在de社で有意義に使ってもらってます:relaxed:

今回はそのEchoに内蔵されているAI、Alexaのスキル開発を自作してみて、クリスマスプレゼントにどう??って広めます:muscle:

やることざっくりと

前にLTしたときの「一回尋ねるだけで、ほしい情報を取得できるスキル」を作る上で何やったかを書いていきます。
"Hello, Alexa!" Alexaスキルを自作して、生活のちょっとしたことを簡単にしてみた

事前準備

  • amazon.co.jpのアカウント取得(Echoセットアップ及びAlexaコンソールeにログインするために使う)
  • AWSアカウント取得(AlexaスキルのエンドポイントでLambdaを使うため)

事前準備における注意点

上URLのスライドにもあるのですが、Alexaコンソールにはamazon.co.jpのアカウント情報でログインできます。
間違っても、Amazon Developerアカウント作成ボタンを押さないように!!!

Alexaスキル作成

Alexa開発者ポータルからAlexaコンソールにログイン
 ↓
「スキルの作成」を選択
 ↓
スキル名を入力し、スキルモデルにカスタムが選択されていることを確認し、スキルを作成をクリック
新しいスキルの作成
done

Alexaスキルの設定

スキルには、少なくとも以下の4つを設定する必要があります。

  • 呼び出し名
  • インテントとサンプル発音
  • モデルのビルド
  • エンドポイント

それぞれ説明していきます。

呼び出し名、インテントとサンプル発音

この2つはセットで覚えたほうがわかりやすいかなと思ってます。

  • 呼び出し名
    → 作ったスキルを起動させる言葉、呪文
  • インテントとサンプル発音
    → インテント:実行できるアクションの定義(function)
    → サンプル発音:インテントを呼び出すための呪文

って感じです。
例えば、ラジコでラジオ体操第一を聞きたい!って思ったとき、

「アレクサ、ラジコでラジオ体操第一を流して」

って言うと思うのですが、そのときの

  • 「ラジコ(で)」が呼び出し名
  • 「ラジオ体操第一を流して」が【ラジオを流すインテント(アクション定義)】と、そのアクションを【発火させるサンプル発音】

になります。

モデルのビルド

呼び出し名とインテント(+サンプル発音等)を作成後、スキルの対話モデルをビルドする必要があります。
ビルドは簡単で、モデルを保存後、「モデルをビルド」を選択すると、勝手にビルドしてくれます。
(ここでエラーが起こるときは、大抵呼び出し名かインテントが設定されていないときです)

エンドポイント

エンドポイントは、対話モデルがインテント発火後に行うアクションをどこでやるか設定する必要があります。
エンドポイントに設定できるのは

  • AWS Lambda
  • 自作のHTTPS Webサービス

です。

僕はLabmdaしか使ったことないんで、自作側はわかんないんですけど、Amazon側の要件を満たす必要があるので、こだわりがないならLambdaでいい気がします。

実際にやってみよう

用語もおさえたところで、実際にスキルを作ってみましょう!

呼び出し名の設定

まずは呼び出し名の設定ですね。
Alexaカスタム対話モデルメニュー

スキル作成後に遷移する画面だと、右側にでっかいボタンがあるんですが、ない場合は左側にメニューがあるので、そこから呼び出し名を選択して下さい。
出てきた画面で呼び出し名を設定します。
呼び出し名の設定

保存は上の「モデルを保存」でできます。

カスタムインテントとサンプル発音の追加

次に、カスタムインテントとサンプル発音を追加します。
左メニューの「インテント」の右にある「追加」を選択すると、カスタムインテント追加画面になります。
インテント作成

インテントの作成の後は、サンプル発音を設定します。
このサンプル発音は、このインテントを発火させるための言葉の数分入力します。
サンプル発音追加

モデルのビルド

ビルドボタンポチー
モデルのビルド

Lambdaでエンドポイント作成

1.Lambda関数作成

AWSコンソールにログインし、Lambda→「関数を作成」の順に選択します。
関数は一から作成を選択し、名前、ランタイム、ロールを設定します。
ロールはカスタムロールを作成すると、下画像みたいなのが勝手に設定されます。
Lambda関数作成
全部設定できたら関数を作成!

2.Lambdaの設定

まず、LambdaのトリガーにAlexa Skills Kitがあるので追加します。
AlexaSkillsKit選択

次に、myTodayをクリックすると、下側に関数をインラインで編集できるエディタが現れるので、コードエントリタイプを.zipファイルをアップロードに変更します。
コードエントリタイプの変更

アップロードするファイル達は、下のGithubに入れてるので、ダウンロードして使って下さい。
https://github.com/tk07Sky/alexa-lambda-sample
ちなみに、index.jsの下の部分をAlexaが話してくれるので、名前とかその後の言葉とか、自由に変えて下さい!

index.js
// 一日と書くと「ついたち」と読んじゃうので、ひらがなで「いちにち」って書いてます
TODAYS_MESSAGE = "たいくん、おはようございます!今日は平和ないちにちが過ごせそうですよ!"

編集が終わったら、フォルダ名をmyTodayに変更して、zip化して、Lambdaの画面からアップロードしてください。
アップロードしたら、ファイルを指定するために、ハンドラをmyToday/index.handlerに書き換えてください。

3.APP_IDの設定

AlexaとLambdaを繋ぐには、AlexaのAPP_IDを設定する必要があります。
AlexaのAPP_IDはAlexaコンソールの左メニュー→エンドポイントから、AWS Lambdaを選択すると出てきます。
AlexaのAPP_ID取得

これをコピーしたら、次の2箇所に貼り付けます

  • Lambda関数の環境変数
    Lambda関数の環境変数

  • Lambdaに設定したAlexa Skills KitのスキルID
    Lambdaに設定したAlexaSkillsKitのスキルID

4.Lambda関数のテスト

Lambdaの仕上げは、関数のテストです。
テストのコードはテンプレートがあるのでそれを使います。
Lambdaのコンソール右上のテストを選択すると、以下の画面が出てくるので、イベントテンプレートを「Amazon Alexa Start Session」にし、イベント名を設定したら、一番下までスクロールして保存します。
テスト設定
保存後、もう一度テストを選択すると、テンプレートの内容でテストが走ります。
こうなったら成功です!
テスト成功

エンドポイントの設定

Lambdaで作ったエンドポイントを、対話モデルに紐づけます。
Lambdaコンソールの右上にARN - arn:aws:lambda:ap-northeast-1:ほにゃらら:function:myTodayとありますが、これのarn:~以下をコピーし、Alexaコンソールのエンドポイントの「デフォルトの地域」欄に貼り付けます。
エンドポイントの設定

⭐️完⭐️成⭐️😤😤😤😤😤

さっそく試してみよう

スキルが完成したので、さっそく試してみましょう。

Alexaコンソールで試す

Alexaコンソールの「テスト」タブを選択すると、以下の画面になります。
 Alexaのテスト

左側にある入力ボックスに「今日の一日で今日がどうなるか教えて」と入力し、Enterを押しましょう!

Alexaスキルテスト成功

こんな表示になれば成功です!
ここで失敗してたら、Lambda側で環境変数のAPP_IDが設定されていないか、Alexa Skills KitのトリガーにスキルIDが設定されていないか、もしくはAlexaコンソールのエンドポイントの設定忘れだと思うので、確認してみて下さい。
(変更したけど、Lambdaの保存し忘れとか、ね)

実機で試す

EchoのセットアップにAmazon Alexaアプリを使ったと思うのですが、自作したスキルをEchoで有効にするには、そのアプリを使います。
 
メニュー一覧から「スキル・ゲーム」を選んで
IMG_6473.jpeg
スキルメニューから「有効なスキル」を選択
IMG_6474.jpeg
「すべてのスキル」タブを選択したら、自作したスキルがあると思うので選んで
IMG_6475.jpeg
「有効にする」を選択すると、使えるようになります!
IMG_6476.jpeg

Enjoy😆

まとめ

実際に自分で作ってみて、Alexaスキルって結構簡単に作れるんだなーって感じでした。
そんな感じしないですか?

今回作った機能はまだほんの一部で、これにスロット(インテントの引数)とか、ピカチュウスキルのような、指定したボイスとの会話とか、色んなものが作れます(スキルに対して色んなインテントを用意するとかね)
今後も、時間のあるときには便利なAlexaスキルを作れたらなーって思ってます👍

学習する上で参考にしたサイト

Alexaスキル開発トレーニングシリーズ 第1回 初めてのスキル開発

次回のアドベントカレンダー

次回は、@00ryoma00さんのデザインを勉強し始めたお話です!

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away