Alexaのスキルを開発する ~その1~ スキルの作成(Amazon Developer Console)

更新履歴:
2019/09/05 Amazon Developer Consoleの画面を最新版に合わせて更新しました。サンプルプログラムの内容を変更しました。
2018/05/20 Amazon Developer Consoleの画面を最新版に合わせて更新しました。
2018/01/19 新規作成。

先日購入したEcho Dot。スキルを自分で開発したい、というのが一番の目的だったので勉強を兼ねて早速スキルを作ってみました。

”アレクサ、おみくじで今日の運勢は”と問いかけると”大吉!”と答えてくれる、おみくじスキルです。運勢は”大吉”、”中吉”、”小吉”の3つの中からランダムに返します。”今日”の部分は”あした”、”明後日”、”9月5日”など任意の日付を使用可能です。

スキルの処理の流れ

スキルの処理の流れですが、

  1. ユーザーがEchoに話しかける
  2. Echoが音声データをAmazon Alexaサービスに送る
  3. Alexaが文章を解析、どのスキル・処理が呼び出されたのか判断して該当のスキル・処理を呼び出す
  4. 呼び出されたプログラムが処理を行い、結果を返す

という流れになります。

スキル開発者が作るのはAlexaがどういう言葉を受け取った時に自分のスキルを起動するか、どういうパラメータでどの処理を呼び出すのか、というモデルを定義するところとLambda or HTTPSでの処理の部分です。

今回はAmazon Developer Consoleで前者のモデルの定義の部分を作成します。

Amazon Developer Console

事前準備

スキルを開発するにはAmazon Developer Consoleのアカウントが必要です。自分のAmazonのアカウントに紐づくことになります。

なお今回はスキルは公開せずに自分のEcho Dotのみでテスト的に使用するのでAmazonアカウントはEcho Dotで使用しているのと同じAmazonアカウントである必要があります。

アカウント作成方法については以下等を参考にしてください。

スキルの対話モデル

スキルを作るにあたって決めておくことがあります。

  • どういう言葉でスキルを起動するか→呼び出し名
  • どういう機能を使うか→インテント(機能)とそれを呼び出す文章(発話サンプル)
  • どういうパラメータを渡すか→スロット

今回の場合、呼び出し名は”おみくじ”、インテントは”○○の運勢は”、スロットは”今日”、”明日”などの”いつ”を表す言葉、で作成していきます。

呼び出し名のあとの”で”の部分は使える言葉が決まっているのですが、以下に詳しく説明があります。

スキルを作成する

Amazon Developer Consoleで”ログイン”を選択します。

おなじみのログイン画面がでるのでログインします。

ログインしたら、上のメニューの”Alexa”→”Alexa Skills Kit”を選択します。

スキル一覧画面が表示されるので”スキルの作成”ボタンを押します。

スキル名を入力します。今回は”おみくじ”にしました。”カスタム”が選択されていることを確認し、”スキルを作成”ボタンを押します。

スキルビルダー画面が表示されたら、画面左の”呼び出し名”をクリックし、”スキルの呼び出し名”に”おみくじ”と入れます。

これで”アレクサ、おみくじを開いて”と話しかけると、このおみくじスキルが起動されるようになります。

インテント

画面左の”インテント”をクリックし、”インテントを追加”ボタンを押します。インテント一覧には、最初から4つのデフォルトのインテントがセットされています。

インテント名”fate”と入力して、”サンプル発話”に”{day} の運勢は”と入力、”+”を押します。

この”サンプル発話”が、実際にユーザーが声で話しかける部分になります。{day}が引数、”スロット”です。処理するプログラムにパラメータとして渡されます。スロットの前後には半角のスペースが、自動的に入ります。

スロット

次に各スロットの属性をセットします。画面左の”day”をクリックし、スロットの編集画面を表示します。そして、”スロットのタイプ”でスロットの型を指定します。要は変数の型ですね。今回は”AMAZON.DayOfWeek”型を選択しました。

最初は今回にいかにもピッタリそうな”AMAZON.DATE”を選んだのですが、この型だと”今日”が勝手に”2019-09-05”のように変換されてしまいました。

以下のページに各型の説明がありました…

上記のページによると、”AMAZON.DayOfWeek”も意味が違う感じですが、とりあえず動いているので使ってます…リストにない文言の場合はエラーになるのではなく、Alexaが認識さえできれば、その言葉がスロットにセットされるようです。

なお、自分で”型”を作ることもできます。その場合は、とりうる値を自分で登録することになります。画面左の”スロットタイプ”の”追加”を押して、作成していきます。

もし文言が決まっているのであれば、それを登録した方がより認識も上がりそうですね。

保存とビルド

入力したら、画面左上の”モデルを保存”を押します。保存完了のメッセージが出たら、”モデルをビルド”のボタンを押します。

保存されると以下のメッセージが表示されます。

ビルドを開始すると下のメッセージが表示され…

途中クイックビルドが完了し、テストが可能になります。

さらに待つと完全に完了します。

次にこのスキルが呼び出されたら、どの処理を呼び出すかを指定するのですが…

今はまだ処理を作ってないのでAmazon Developer Console側は一旦ここで離れて、次はAWS Lambdaで実際の処理を作成していきます。

Lambda側を作成したらAmazon Developer Consoleに戻り、左の”エンドポイント”をクリックし、”AWS LambdaのARN”を選択します。そして”デフォルトの地域”にLambdaのARNを貼り付け、”エンドポイントを保存”ボタンを押します。

これでスキルの作成は完了です。