はじめに

皆様こんにちは!

キャスレーコンサルティングCSVIT事業部の相原です。

今回はAlexaスキルの開発ツール「ASK(Alexa Skills Kit)」を用いて、

簡単なスキルを作成したいと思います。

Alexaスキルとは

Amazonが提供するAmazon Echo、Echo Dotなどのデバイスに搭載された音声サービスAlexaに対し、

サードパーティや個人の開発者によって拡張された機能のことを指しています。

Alexaスキルにはいくつか種類があり、大きく分けると以下の3つが存在します。

①カスタムスキル : 汎用的なスキル

例:タクシーの呼び出しや出前の注文、電車の運行状況や乗り換え経路の情報取得など

②スマートホームスキル : 家電製品などを制御するスキル

例:照明のオン/オフ、明るさの調節やドアロックの状態確認、施錠・開錠など

③フラッシュブリーフィングスキル : ニュースなどを読み上げるスキル

例:人気の放送局やブログからの最新情報、最新のトップニュース、天気予報など

AmazonのAlexaスキルストアでは、多くのスキルが公開されており、

ユーザーはAlexaの機能を自由に拡張することができます。

Alexa Skills Kitとは

短時間でAlexaスキルを開発することを可能にする開発キットが「ASK(Alexa Skills Kit)」です。

ASKには、セルフサービスの一連のAPI、ツール、ドキュメント、さらにはコードサンプルまでもが
含まれています。

今回は詳細な説明は省略しますが、家電製品や自動車などの、独自デバイスにAlexaの機能を組み込む際に
利用される「Alexa Voice Service (AVS)」という開発キットもあるそうです。

上記2種類の開発キットのうち、今回は個人の開発者でも容易に試すことのできるASKを用いて、
スキル作成をします。

開発手順

今回はユーザーが「現在の時刻を教えて」と問いかけると、
現在時刻を教えてくれるスキルを開発してみたいと思います。

スキル開発を通じて、VUI(音声インターフェース)の開発の流れを
学んでいきたいと思います。

それではさっそく作ってみましょう。

事前準備

スキルを開発するには、

・Amazonの開発者アカウント

・AWSアカウント

の両方が必要となります。

アカウントをまだお持ちでない場合は、以下のサイトにアクセスし、
新規登録を済ませておく必要があります。


Amazon開発者アカウントの作成

※Alexa対応デバイスをお持ちの方は、そのデバイスで動作テストができるように、
Alexaアプリに登録する際に使用したアカウントでログインをし、登録することをお勧めします。


AWSアカウントの作成

また、開発にはAlexa Skills Kit向けのライブラリとして公開されている、
ASK SDK for Node.jsが必要となります。
以下のリンクからインストールをしてAWS Lambda Layerへの登録を済ませておきます。


ASK SDK for Node.jsのセットアップ

※レイヤー名は「ForAlexaSkill」で登録をしておいてください。

※AWS Lambda Layerへの登録方法は過去のブログに掲載しております。
以下の記事をご参照ください。


AWS LambdaのLayerを使ってみる

①ASK開発者コンソールを表示する。

以下のリンクより、開発者コンソールを開きます。


ASK開発者コンソール

サインインをして、メニューから「Alexa Skills Kit」を選択すれば、表示ができます。

②スキルを作成する。

2-1.「スキルの作成」ボタンをクリックすると、「新しいスキルを作成」画面が表示されます。

2-2. 入力・選択内容を以下のように設定し、「スキルを作成」ボタンをクリックします。

スキル名:「TestSkill」を入力

デフォルト言語:「日本語(日本語)」を選択

スキルに追加するモデル:「カスタム」を選択

2-3. スキルビルダーの画面が表示され、この画面でスキルの設計を行います。

今回作成する対話モデルの設計は以下の3つを行います。

・呼び出し名

・カスタムインテント

・エンドポイント

「呼び出し名」

特定のカスタムスキルとの対話を開始するため名前です。

左列の「呼び出し名」をダブルクリックすると、設定・編集ができます。

今回は、以下のように入力をします。

スキルの呼び出し名:「時刻確認スキル」

入力後は、「モデルを保存」ボタンを押し、設定内容を保存しましょう。

「カスタムインテント」

ユーザーの要求に対して発生するイベントのことインテントと言います。

各カスタムスキルで実装したい機能の種類だけ、ここで定義をする必要があります。

左列の「インテント」の横にある「追加」をクリックすると、新規追加ができます。

今回は以下のように入力します。

インテントの名前:「TestIntent」

入力が終わったら、「カスタムインテントを作成」ボタンを押します。

それぞれのインテントでは、サンプル発話を書き出すことで、
フレーズとイベントの紐づけをします。

今回は以下のように入力します。

サンプル発話:「現在の時刻を教えて」「今何時」「現在時刻は」

入力後は、「モデルを保存」ボタンを押し、さらに「モデルをビルド」ボタンを押します。

「エンドポイント」

カスタムインテントで定義したサンプル発話に近しいフレーズをリクエストしたときに

送信先となるサーバー・関数。(今回はAWSのLambda関数)

こちらは、AWSコンソールにLambda関数を定義したのちに設定をします。

③AWS Lambdaメニューを表示する

以下のリンクより、AWSマネージメントコンソールにアクセスします。


AWSマネージメントコンソール

ログインをし、画面右上のリージョン選択メニューから「アジアパシフィック(東京)」を選択します。

画面左上の「AWSサービス」より「Lambda」メニューを選択します。

④Lambda関数の作成

4-1.「関数の作成」ボタンをクリックすると、「一から作成」の画面が表示されます。

4-2.入力・選択内容を以下のように設定し、「スキルを作成」ボタンをクリックします。

名前:「TestFunction」

ランタイム:「Node.js8.10」を選択

ロール:「カスタムロールを作成」を選択

※ロールの内容は特に設定せず「許可」ボタンをクリックして問題ないです。

4-3.「Layers」を選択し、「レイヤーの追加」ボタンを押します。
以下のように入力し、事前に用意しておいた「ForAlexaSkill」を追加します。


4-4.トリガーの追加のリストから「AlexaSkillsKit」を選択します。

※本来は「トリガーの設定」で、セキュリティの観点からスキルIDを設定すべきですが、
今回は省略します。
「無効」を選択し、「追加」ボタンをクリックします。

4-5.「TestFunction」を選択し、実際の関数を定義します。
「index.js」は以下のように設定をし、イベントを定義します。

11行目からの「TestIntentHandler」によって、
先ほど定義した「TestIntent」の制御をしています。



2-5.関数が作成されたら、画面右上の「テスト」をクリックします。

入力・選択内容を以下のように設定し、「作成」ボタンをクリックします。

イベントテンプレート:「AlexaStartSession」を選択

イベント名:「AlexaTest」


2-6.テストの選択が「AlexaTest」になっていることを確認し、

「テスト」ボタンをクリックしてテストを実行します。

2-7.「実行結果:成功」と表示されれば、スキル名のみが呼ばれた時に発生するイベントに

正しく応答することが確認できます。

また、詳細をクリックすると、以下のようなJSON形式の結果を見ることもできます。

⑤スキルとLambdaの接続

②で作成したスキルから、④で作成したLambda関数を呼び出せるようにします。

5-1.ASK開発者コンソールの画面に戻り、左側のメニューから「エンドポイント」を選択します。

5-2.サービスのエンドポイントの種類では、「AWS Lambdaの ARN」を選択し、

入力内容を以下のように設定して、「エンドポイントを保存」をクリックします。

デフォルトの地域:(「TestFunction」関数右上の「ARN」)


5-3.「カスタム」をクリックし初期の画面に戻ります。

5-4.カスタムスキルのチェックリストが全てグリーンになっていれば、
設定がすべて完了されています。

⑥Alexaシミュレータによるテスト

6-1.開発者コンソールの「テスト」タブをクリックします。

テストが無効になっている場合はスイッチをクリックし有効にします。

6-2.発話の入力欄に、ユーザーの発話をマイクまたはキーボードでタイプ入力します。

下記のような応答により、無事に時刻を取得できることを確認できます。

おわりに

いかがだったでしょうか。

今回のカスタムスキル開発では、
対話モデルのVUI(音声インターフェース)開発の流れを
ご紹介いたしました。

ASKはAlexaとともに日々進化をしており、
Alexaデバイスの普及に伴って、今後も発展することが期待できます。

音声によるWEBサービスという新しい形のサービスを生み出すAlexaスキル開発に、
今後も目が離せませんね!

開発環境

ASK SDK for Node.js / Windows 10 Pro バージョン1803

相原
CSVIT事業部 インテグレーションテック部 相原
社会人2年目のWEB系エンジニア。現在はECサイトリニューアル案件に参画中。