Alexa Skillsを開発するための情報を整理してみた

AWS運用自動化サービス「Cloud Automator」
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。

こんにちは、技術4課の多田です。

この記事は、Amazon Alexa Advent Calendar 2017の14日目の投稿記事です。
Alexa対応デバイスを手に入れたのだからオリジナルのAlexa Skillsを開発したい! そんな衝動にかられた人も多いのではないでしょうか?
私もその1人です!
今回は、Alexa Skillsを開発するための各種情報を整理してみようと思います。

Alexaの処理イメージ

Alexaで処理を行おうとするときの大まかなイメージとしては以下の図になります。

ユーザーが「Alexa、〇〇」とAlexa対応デバイスにリクエストを行うと、Alexaが声と言葉を判断してAlexa Skillsで処理後、結果をユーザー側に返します。

Alexaの用語整理 

次に、Alexaにはいくつかの用語があるのですが、Alexa Skills開発に必要な用語を整理しておきます。

ASK

ASKは、Alexa Skill Kitの略称です。
Alexaデバイスのスキルを開発するにはASKが必要になります。
なお、関連でAVS(Alexa Voice Service)がありますが、これは独自のデバイス(ラズパイとか)とAlexa連携するための仕組みです。

Intent

ユーザーのメッセージの意図(Intent)を定義します。
例えば、「Alexa、東京の天気は?」というリクエストがあれば、「東京の天気」がユーザーが知りたい情報、これがIntentになります。

Slot

Intentの変数のようなものがSlotになります。
例えば、「Alexa、東京の天気は?」というリクエストがあれば、「東京」という部分がSlotになります。
上記のように設定することで様々な地域の天気をレスポンスできるようになります。

Intent Schema

IntentとSlotの情報は、Intent SchemaというJSON形式でスキルに設定します。
例としては以下のようなものです。

{
“intents”: [
  {
   ”intent”: “WeatherIntent”,
   ”slots”: [
     {“name”: “CityName”,”type”: “City”}
   ]
  },
  {“intent”: “AMAZON.HelpIntent”},
  {“intent”: “AMAZON.StopIntent”}
 ]
}

Utterance

ユーザーのメッセージを適切なIntent及びSlotに紐づけるための情報です。
例えば、東京の天気を知りたいというユーザーのメッセージは、人によって様々だと思います。
東京の天気を教えて?という方もいれば、東京の天気は?という方もいるかと思いますが、様々なメッセージのパターンを定義しておき、Alexaが返答出来るようにする必要があります。

Alexa Skillsの開発準備

Alexaの処理イメージや用語の整理を行ったので実際に開発のための準備をしましょう。

開発のためのアカウント類

まずは、開発に必要なアカウント周りです。

これらが最低限必要で更にコードを書いていくので適宜Githubもあるとよいかもしれません。

Alexa Skillsのドキュメントやサンプルコードなど

次に、Alexa SkillのドキュメントやサンプルコードなどのGithubについてですが、以下のリンク先にあります。

ドキュメントはありがたいことに日本語対応しています。
また、開発できる言語は、node.jsJavaがあります。

Alexa Skillsを開発してみる

Alexa Skillsには現在3つの種類があります。

  • カスタムスキル
  • スマートホームスキル
  • フラッシュブリーフィングスキル

Alexa Skillsに幅広い機能を実装する場合、カスタムスキルが該当します。
今回はカスタムスキルのサンプルスキルとして豆知識スキルをLambdaにデプロイしてみます。

サンプルスキルの開発

まずは、開発者アカウントにログインして、Alexa Skills Kitを選択します。

「新しいスキルを追加する」ボタンをクリックして、カスタムスキルの基本情報を入力します。

続いて、IntentやIntent Schemaなどの対話モデルの設定を行いますが、今回は「SKILL BUILDER」を利用して設定してみます。
「Add Intent」からIntentのメッセージを追加していきます。 

入力が終わりましたら、「Save Model」ボタンをクリックして、その後「Build Model」ボタンをクリックします。
ビルドが成功しましたら次にLambdaのコードの設定を行います。


今回のサンプルスキルに対応するLambda Functionは「alexa-skill-kit-sdk-factskill」になり、これを選択します。

Lambdaのトリガーに「Alexa Skill Kit」を選択します。設定完了後コードを保存します。
その後、後続の設定のためにLambdaのARNをコピーしておきます。

そして、音声ユーザーインタフェース(VUI)とLambdaのコードを連携します。
コピーしておいたLambdaのARNを貼り付けて、そのまま次へボタンを押してください。

最後に、Alexa Skillsのテストを行います。
Intentに設定したメッセージで期待した結果が返ってくるかを確認します。
問題なく、豆知識のデータが返ってきています!

Alexa Skillsを公開する

このように作ったスキルは公開して一般利用できるようにしていきたいですよね。
公開する場合のTipsをこちらのブログで紹介されています。

スムーズに審査が通れば、7営業日内に公開されるとのことです。

認定要件は、Amazonのテクニカルドキュメントでご覧いただくことができますので、内容を確認しながらスキルの開発・申請準備を進めましょう。スムーズに審査に通過すれば、7営業日内にスキルを公開することができます。

まとめ

Alexa Skillsの開発にあたっての情報を整理してみました。
Alexa関連のビジネス展開は拡大中でかつ、Alexa Skillsの開発もどんどん伸びています(現時点で25,000スキルを突破!)
私もオリジナルスキルの開発にトライしてみて、その模様をまたブログに書けたらと思っています。
ちなみに、法人営業課の小林がCloudAutometorのスキルを開発してたりするので、こちらもぜひご覧ください!

それでは!

AWS運用自動化サービス「Cloud Automator」