Alexaで位置情報を取得するReal-Time Location Services for Alexa Skillsの設定と流れるJSON
この記事は
ADVENTARの「するめごはんのVUI・スマートスピーカー Advent Calendar 2018」
の24日目の記事です。
AlexaDevSummitの1日目で会場をふらふらしてたら、岡本さんから
「showさんやばいっす!これみてくださいよ!!」
と、ノートPCを開きながらめっちゃ興奮されてたので、そのPCをみたらAlexaが位置情報に対応してた画面でした。
岡本さんありがとうございました。
僕もその日の夜に「おおおー」となってました。
で、既に試されてる方々がブログに上がっているわけですが、僕は僕で改めて試して、流れるJSONがたしかに変わったなーと思ったのでここに記載します。
Real-Time Location Services for Alexa Skills
これについては公式のサイトをみてください。
Enhance Your Customer Experience with Real-Time Location Services for Alexa Skills : Alexa Blogs
先に確認できた記事類
これらをみればわかると思います。
■情報提供元、岡本さんの記事
・Alexaから位置情報を取得可能になったので試してみた
■さっそくためした @MYamate_jp さんの記事
・Alexa Real Time Location Serviceを使う
■ @MYamate_jp さんの他の記事
・Alexa Skill開発でよく使いそうな関数をまとめたnpmモジュールを作った
僕も試してみた
まず、APL対応した画面を、スマートスピーカーを遊びたおす会で録画したかったがためのスキル
「ヒロインのテスト」
で、試します。
が、別に何でもいいです。SDK v2であるだけです。
1.Alexa Developer Consoleのアクセス権限を押す
いつもの左下箇所です。
2.位置情報のトグルをONにする
いつの間にか、しれっとでてきていた、位置情報サービスのトグルをONにします。
3.LambdaでJSONを確認してみる
単純にJSONの中身を出力します。
console.log(JSON.stringify(handlerInput));
LaunchRequestのHandlerにでも入れてみてください。
4.スマホからスキルを起動する
スマホからスキルを起動してみたら "alexa::devices:all:geolocation:read" が追記されていました。
が、アクセス権を許可していないのでDENIEDになっています。
"requestEnvelope": { "version": "1.0", "session": { "new": true, "sessionId": "amzn1.echo-api.session.fad41c95-9292-XXXXXXXXXXXXXXX", "application": { "applicationId": "amzn1.ask.skill.fd6f4522-518c-XXXXXXXXXXXXXX" }, "user": { "userId": "amzn1.ask.account.XXXXXXXXXXXXXXXX", "permissions": { "scopes": { "alexa::devices:all:geolocation:read": { "status": "DENIED" } } } } }, "context": { "System": { "application": { "applicationId": "amzn1.ask.skill.fd6f4522-518c-40b3-8508-71e6d205ed1e" }, "user": { "userId": "amzn1.ask.account.XXXXXXXXXXXXXX", "permissions": { "scopes": { "alexa::devices:all:geolocation:read": { "status": "DENIED" } } } }, "device": { "deviceId": "amzn1.ask.device.XXXXXXXXXXXXXXXXXX", "supportedInterfaces": { "Geolocation": {} } }, "apiEndpoint": "https://api.fe.amazonalexa.com", "apiAccessToken": "XXXXXXXXXXXXXXXXXXXXXXXXX" } },
5.スマホのAlexaで位置情報を許可してみる
スマホ(僕はAndroid)のAlexaスキルアプリを呼び出して、スキルへの位置情報提供を許可します。
一応、スクリーンショットをとってみました。
まずは起動してメニューを表示しましょう。
上記で「スキル・ゲーム」を選びます。
はい。いつもの画面です。
ここでいつも通り、有効なスキルを選びましょう。
今回の「ヒロインのテスト」は開発中のスキルなので
開発スキル を選びます。
そして、画面をスクロールして目的のスキルを選びましょう。
目的のスキルを選んだら、グレーになっている「設定」をタップ。
※個人的に選べなさそうな色にみえる。
Alexa Developer Consoleで位置情報サービスのトグルをONにしているので、権限を聞かれます。
ここで位置情報サービスの権限を許可して保存します。
スマホで位置情報が取得できているなら、位置情報サービスのアクセス権に許可がされたことが確認できます。
6.もう1回、スマホからスキルを呼び出してみる
再度スマホから、「ヒロインのテスト」を起動します。
するとJSONが変化しています。
"alexa::devices:all:geolocation:read"がGRANTEDに変化して、位置情報のJSONとしてGeolocationが追記されています。
※位置情報の有効桁数はそのままで、適当な数字をいれてます。
"requestEnvelope": { "version": "1.0", "session": { "new": true, "sessionId": "amzn1.echo-api.session.0c9XXXXXXXXXXXXXXXX", "application": { "applicationId": "amzn1.ask.skill.XXXXXXXXXXX" }, "user": { "userId": "amzn1.ask.accounXXXXXXXXXXXXXXXXXXXXXX", "permissions": { "consentToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "scopes": { "alexa::devices:all:geolocation:read": { "status": "GRANTED" } } } } }, "context": { "System": { "application": { "applicationId": "amzn1.asXXXXXXXXXXXXXXXXXXXXXXXX" }, "user": { "userId": "amzn1.ask.account.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "permissions": { "consentToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "scopes": { "alexa::devices:all:geolocation:read": { "status": "GRANTED" } } } }, "device": { "deviceId": "amzn1.ask.device.AXXXXXXXXXXXXXXXXXXXXXXXXX", "supportedInterfaces": { "Geolocation": {} } }, "apiEndpoint": "https://api.fe.amazonalexa.com", "apiAccessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }, "Geolocation": { "timestamp": "2018-12-24T10:12:06Z", "coordinate": { "latitudeInDegrees": 79.1235586, "longitudeInDegrees": 283.1111355, "accuracyInMeters": 33.1111104196167 }, "altitude": { "altitudeInMeters": 40.111111525878906, "accuracyInMeters": 29.23455004196167 }, "heading": { "directionInDegrees": 0 }, "speed": { "speedInMetersPerSecond": 0 } } }, "request": { "type": "LaunchRequest", "requestId": "amzn1.echo-api.request.XXXXXXXXXXXXXXXXXXX", "timestamp": "2018-12-24T10:13:44Z", "locale": "ja-JP", "shouldLinkResultBeReturned": false } },
位置情報っぽいような数値がたくさんでてきましたが、個人的にアツいと思っているのが
speedInMetersPerSecond です。
まだドキュメントを読んでいないので正確なことはわからないのですが、そのまま解釈すると1秒当たりの移動速度がメートル単位ででてくる・・・??マジで?
となると、例えば車などの乗り物に搭載されたAlexaデバイスとかも想定してるのだろうかと個人的には考えています。
というわけで
位置情報を使ったスキルを組み込むことが可能になったと思われます。
もちろん日本語版で。
となるとエラーハンドリングとかも大変そうですが、IoTやりたい勢としては実世界との融和性が高まるので・・オラ、わくわくしてきたぞ!
以上です。