駅の乗り入れ路線を教えてくれるAlexaスキルを作ってみた
スマートスピーカーで色々遊んでみたいなあと思いまして、経路探索WebAPI『駅すぱあとwebサービス』と連携させたアレクサスキルを作ってみました。 今回は備忘録として作成手順をまとめます。
作るもの
「アレクサ、新宿駅の乗り入れ路線を教えて」
「新宿駅の乗り入れ路線は24本あります。JR埼京線、JR埼京線快速、JR湘南新宿ライン・・・」
任意の駅の乗り入れ路線を教えてくれるアレクサスキルを作ります。
私はAWSが公式で提供している「Alexaスキル開発トレーニング」でAlexa開発を始めました。手順がとても丁寧に書いてあってわかりやすいです!
今回の手順はざっくりとしか書いてないので、先にこちらを見ておくとスムーズに開発できると思います。
必要なツール、サービス
- 駅すぱあとwebサービス フリープランのアクセスキー
- 無料で利用できます。
- キーの発行は申し込みから数日後(!)なので、これは一番最初にやってね!!
- AWSのアカウント
- Lambdaを使います。
- Amazon Developerのアカウント
※Echoがなくても開発はできるところが肝!
作成手順
1. Lambdaの作成
AWSマネジメントコンソールでLambdaのページにアクセスし、Lambda関数を作成します。
関数の作成をクリックし、一から作成で関数を作成していきます。

| 項目 | 説明 |
|---|---|
| 名前 | Lambda関数の名前です。これは後から変更することができません。 例: EkiInfoSkill |
| ランタイム | Lambda関数で使用する言語です。 例: Node.js 6.10 |
| ロール | Lambda関数のアクセス許可の定義です。 例: 既存のロールを選択 |
正常に作成することができたら、設定を行います。
| 項目 | 説明 |
|---|---|
| Designer | トリガーの追加から、Alexa Skill Kitをクリック |
| トリガーの設定 | とりあえず無効にしておきましょう。 |
| 関数コード | コードエントリタイプ:.ZIP ファイルをアップロードzipファイルはこちらからダウンロードします。https://cdn.rawgit.com/hmaruyama/alexa-skill-eki-info/25d726c2/alexa-skill-eki-info.zip ランタイム: Node.js 6.10ハンドラ: index.handler※アップロードするファイル名を指定します。 app.jsならapp.handlerとなります。 |
| 環境変数 | キー:EKISPERT_KEY値: 駅すぱあとwebサービスのアクセスキー |
全ての設定が完了したら保存をクリックします。
次に、作成したLambda関数のテストを行います。
画面右上のテストをクリックします。
イベントテンプレートから、Alexa Start Sessionを選択し、適当にイベント名を入力して作成、テストを実行します。

テストが成功したらLambdaの設定は完了です。
次のフェーズで、LambdaのAmazonリソースネームを利用するので、右上のarnから始まる文字列を手元にコピーしておきましょう。
2. スキルの作成
Amazon 開発者ポータルの画面右上Developer Consoleから、ALEXAタブをクリック、Alexa Skills Kitの始めるから新しいスキルを追加するをクリックします。
スキル情報
| 項目 | 説明 |
|---|---|
| スキルの種類 | カスタム対話モデル |
| 言語 | Japanese |
| スキル名 | 例:駅知識 |
| 呼び出し名 | 例:駅知識 |
| グローバルフィールド | 全てデフォルトの状態にしておきます。 |
対話モデル
インテントスキーマ
{ "intents": [ { "slots": [ { "name": "StationName", "type": "ListOfStationName" } ], "intent": "HoroscopeIntent" }, { "intent": "AMAZON.HelpIntent" }, { "intent": "AMAZON.StopIntent" }, { "intent": "AMAZON.CancelIntent" } ] }
カスタムスロットタイプ
タイプを入力:ListOfStationName
値を入力:
しんじゅく とうきょう こうえんじ
カスタムスロットタイプは、ここに羅列したワードを確実に採用する訳ではないらしいです。他のワードも受け付けてくれると。 なので今回は、駅名を入れる箱として利用することにします。
サンプル発話
HoroscopeIntent {StationName} を 教えて
HoroscopeIntent {StationName} の 乗り入れ路線 を 教えて
HoroscopeIntent {StationName} 駅を 教えて
HoroscopeIntent {StationName} 駅の 乗り入れ路線 を 教えて
HoroscopeIntent {StationName} えきを 教えて
HoroscopeIntent {StationName} えきの 乗り入れ路線 を 教えて
HoroscopeIntent {StationName} 駅
HoroscopeIntent {StationName} えき
HoroscopeIntent {StationName}
日本語はあまり柔軟にここを吸収できないらしいです。なのでサンプル対話は頑張ってたくさん入れるとユーザに喜ばれます。
設定
サービスエンドポイントのタイプは、AWS LambdaのARN (Amazonリソースネーム)を選択し、下の入力欄に先ほどコピーしたarnから始まる文字列を貼り付けます。
他の選択肢は全てデフォルトのままでOKです。
テスト
例えば、渋谷駅の乗り入れ路線を教えてとか入力して駅知識を呼び出すをクリックしてください。
json形式のレスポンスが返れば、正常に実行できることが確認できました!わーい!

終わりに
所感をつらつらと。
- 詰まりポイントは沢山ありそうだけど約1時間ほどでAlexaスキルは開発できる
- 漢字は結構読んでくれるらしい
- 全てのパターンを毎回手動で確認するのは大変そうなので、自動テストとかあると頼もしいな
実はこのスキルは、モブプログラミングと呼ばれる開発手法で実装したものです。その話はまた別の記事で書くかも。
参考資料
Alexaスキル開発トレーニング
developer.amazon.com今回利用したLambdaソースコード
github.com