アレクサに電車の時刻をしゃべらせる 4月12日, 2023
これまで試用してきた「近くの駅の電車発車時刻をアレクサに尋ねる」マイプロジェクトもかなりこなれてきた。「○○(駅名)で次の(上り|下り)の電車は」と聞くと直近の時刻を応えてくれる。色々な時刻の電車を利用する場合には結構便利。
春のダイヤ改正も済んで、時刻表も更新した。アレクサに関連した具体的方法には記事も多いので、ここでは作業全体を見渡すためのポイントと思われる点と、AWS上に設置する短いpythonのコードの例に焦点を絞ってまとめてみた。自分でも、久しぶりにコードなどを更新しようとした時に、「あれれ、これどうするんだっけ?」とちょっととまどうことも多い。── 開発者コンソールにログインしたら英語表記で、日本語に変更するのは? とか。左下の「English(US)」を「Japanese(日本語)」にすればよいだけなのに──。それで、後日のメモになればという思いもあってのことだ。
アレクサに時刻表をしゃべらせるためには、大きく2つのことをしなければならない。
1. アレクサスキルを作成する
2. AWSにlambda関数を作成する
■ アレクサスキル
設定方法の詳細はあちらこちらに記事も多いので省略するとして、ポイントと思われる点を箇条書きで書き出せば、以下の通り。
○スキルを作成する
- ・「呼び出し>スキルの呼び出し名」を設定する ── 例: 「チャオの時刻表」
- ・「対話モデル>インテント」を追加する ── 例: 「SelectTableIntent」
- 「{St_Name}で次の{UpDown}の電車は」などを登録する。
- インテントスロット ── この「スロット」の値がlambda関数に渡されて処理対象となる。
- 例:{St_Name}
- 「ダイアログ」タグ
- 「このインテントを完了させるために、このスロットは必須です」を設定する。
- Alexaの音声プロンプト例 ── 例:{St_Name}はどこですか
- ユーザーの発話 ── 例:「{St_Name}」「{St_Name}です」「{St_Name}駅です」
- 「検証」タグ
- 「検証ルールを作成」 ── 「値セットのみを受け付ける」を選択する。
- ※例:{UpDown}も同様に作成する
- 例:{St_Name}
・アセット
- 「スロットタイプ」 ── ここに「値セット」を作成する。
- EkinoNamae 該当する駅名リスト
- NoboriKudari 「上り」「下り」
・エンドポイント
- スキルID ── こちら側のID(後の手順でlambda関数側に入力が必要なのでCopyしておく)
- デフォルトの地域 ── あちら側のID(lambda関数側の接続個所。AWSからコピーしてくる)
- 例: arn:aws:lambda:ap-northeast-….:function:NAME_OF_LAMBDA関数
- ※ この両IDを設定することでスキルとlambda関数が接続され、問い合わせに対して声で応答がある。
■ AWSにlambda関数を用意する
AWSマネジメントコンソール にアカウントを作成する。(lambda関数を利用するための詳細は省略)
設定する関数の例は github に置いてある。並んでいる mkTimeTableData.py
は時刻表データを取得しファイルするためのコード。
- lambda関数の「関数の概要」に「トリガーを追加」ボタンがあり、ここにAlexaの「スキルID」を登録する。
- lambda関数のARNが表示されている筈なので、これをアレクサスキルの「エンドポイント」にCopyする。
■ 「テスト」
アレクサスキルに戻ってテストする。
エンドポイントにAWS lambdaのARNを入力する。ここで、想定通りに応えが得られるか十分にテストする。設定に問題があると、スキルに対するlambda関数の応答をテストする手順が混乱するだろう。応答が想定外の場合、右欄「スキルの呼び出し」JSONに表示されるものがヒントになる場合が多く、この欄に何も表示されないタイプのNGは、対話モデルなどに問題があるだろう。また、「スキルが正しく応答できませんでした」という場合は、AWSのlambda関数に問題がある場合が多い。
AWSマネジメントコンソールで、「モニタリング」タブに「View CloudWatch logs」があって、応答のログを確認することができる。そこに「Error」となっている場合、解決のヒントになることがある。
■ 関連ファイルのupload方法
- ・lambda_function.py
- ・mg_timetable.txt
- ・jpholiday folder
これらをフォルダーに置き、zipに固める。- ※ jpholidayパッケージをこのフォルダーに用意するためには、(末尾のドットに注意)
- $ pip install jpholiday —target .
- ※ jpholidayパッケージをこのフォルダーに用意するためには、(末尾のドットに注意)
$ zip -r function.zip .
AWSのコードソース編集画面の右上の「アップロード元」セレクターから「.zファイル」を選び、このファイルをアップロードする。