Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
20
Help us understand the problem. What is going on with this article?
@osa9

Amazon Echoにバスの到着時刻を教えて貰う

More than 1 year has passed since last update.

追記:
2018/7/29 Echo Spot対応版作りました

はじめに

ついに待ちわびていたAmazon Echoが我が家にやってきました。
LINE WAVE, Google Homeに続いて3台目のスマートスピーカーです。

Amazon EchoもGoogle Homeみたいに自分で対話アプリを作れるそうなので、以前Google Home(& DialogFlow)で作っていたアプリを移植してみました。

つくるもの

三鷹市在住の我が家では最寄り駅までバスに乗らないといけないのですが、バスは電車と違って到着間隔が長いので、到着に合わせて家を出る必要があります。小田急バスはリアルタイム運行状況をWebサイト上で公開しているのでいつもスマホで確認していましたが、スマホを開くのも面倒なのでAmazon Echoが到着時刻を教えくれるようにしてみました。

まずはシンプルに「Alexa, "時刻表"を開いて」でバスの到着時刻を教えてくれるようにしてみました。

おおまかな流れ

Amazon Echo (Alexa)との対話をさせるためにはおおまかに以下の手順を踏みます。

  1. AWS LambdaでAlexaとの対話プログラムを書く
  2. Amazon 開発者コンソールでスキルの設定をする
  3. (一般公開するなら)審査を受ける

自分の環境で動くだけで良いならば3は不要です。

AWS Lambdaでプログラムを書く

今回はServerless + Pythonで組んでみました。

サンプルコードはgithubに上げました。

やっている事は、小田急バスのリアルタイム運行状況(参考:三鷹市役所→三鷹駅の運行状況)をスクレイピングしてAlexaのメッセージを組み立てているだけです。恐らく読んでいる人の99.9%は小田急バスユーザーではないと思いますが、他のバスでもダイヤや運行状況が公開されていたら簡単に出来ると思います。

スクレイピング部分を除いてAlexaにしゃべらせる箇所はこれだけです。

response = {
    'version': '1.0',
    'response': {
        'outputSpeech': {
            'type': 'PlainText',
            'text': message, # しゃべらせたいメッセージ
        }
    }
}

return response

スロット(発話に含まれるキーワード)を使った例はServerlessのサンプルを参考にすると良いと思います。ユーザーとAlexaで対話させたいならば、LambdaのテンプレートにもPythonやJavaScriptのコード例があります。

Lambdaにデプロイした後は、AWSのコンソールで当該関数の設定画面を開いてARNをメモっておきます。(ところでserverlessのコマンドでARNを取得する方法ってあるのでしょうか?)

Alexaのスキルを作成する

プログラムの準備が出来たら次はAlexaからスクリプトを呼び出す部分(スキル)の設定をAmazon開発者コンソールでします。Amazon開発者コンソールはEchoと紐付いているAmazonアカウントでログインします。ログインしたら「スキル開発をはじめる」のボタンからスキルの作成を行います。

スキル情報

スキル名と呼び出し時の名前(今回は「時刻表」)を設定します。
「Alexa, "時刻表"を開いて」でこのスキルが起動します。呼び出し方はいくつかパターンがあるので、公式ドキュメントを参考に決めると良いです。本当は「バスの時刻を教えて」とかで起動出来ると良いんですが出来ないみたいです…。

skill_info.png

対話モデル

対話させたい時に利用します。
今回は対話しないので特に編集せずにSaveとBuildするだけです。

設定

AWS Lambdaを選択し、先ほど作成した関数のARNを記入します。
alexa_config.png

テスト

上部のチェックを入れるとログインしているAmazonアカウントに紐付いているAmazon Echoから呼び出せるようになります。下部でテストも出来ます。

skill_test.png

デモ

https://twitter.com/osa9/status/939861080192434182
(恥ずかしいので自分のしゃべっている部分は省略しています)

おわりに

今回はAlexaに呼びかけるとバスの時刻を教えて貰うだけの簡単なスキルを作成してみました。今回ぐらいの簡単なサンプルなら1時間ぐらいで出来るのでとてもお手軽です。ただスマートスピーカーを使うと便利というシチュエーションがなかなか思い浮かばないのでアイデアが重要な気がします。

Siri(iPhoneだけど)やGoogle Homeより色んなパターンで起動出来る(気がする)ので、個人的には一番使い勝手が良かったです。スキルが豊富なのも良いですね。あとは、置物と化しているLINE WAVEもいずれSDKが公開されるとの事なのでこちらにも期待です!

20
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
osa9

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
20
Help us understand the problem. What is going on with this article?