おまいら、位置情報とAmazon Alexaスキルを連動しようぜ！


メリークリスマス！
位置情報マーケティング系企業が集う「LBMA」の初のアドベントカレンダーは今日が最終日。
この1ヶ月弱というもの、朝コーヒーを飲みながら当日分のエントリをじっくり読ませていただくのは至福の時でした。すばらしい知見の共有に感動して涙がでてしまったこともあります。師走で忙しいなか本当にお疲れ様でした。参加させていただき、光栄至極でございます。

自分のパートでは、趣味で取り組んでる音声バーチャルアシスタントと位置情報を連携したニッチな活用方法について述べていきたいと思います。

## Alexaについて


今回の対象となる音声バーチャルアシスタントはAmazonが運営するAlexaです。

アラームセットや買い物メモなどの基本機能に加え、3rdパーティのデベロッパーが製作した"Alexaスキル"と呼ばれるプログラム群を動かす事ができます。(下図の４〜７の部分）
Alexaスキルは全世界100,000個以上、日本語対応分だけでも3000個以上がリリースされており、ピカチュウトークが有名ですね。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/ca0c3f95-f807-965a-971c-20dabab72054.png">
[(出典)](https://devopedia.org/amazon-alexa)


対応デバイスも、筒型のスマートスピーカーに始まり、Fire TV Stick、画面付きデバイス、イヤホンなど様々な機種が発売されています。スマートグラス「Echo Frames」は[レビューがボロクソ](https://wired.jp/2021/04/07/amazon-echo-frames/)だったのでネットニュースを見た方もいると思います。

## echo autoの特徴

さて2019年に車載用のデバイス「Echo auto」が発売されました。日本ではだいぶ遅れて2020年9月発売でした。
これを車の中に設置するだけでアナタの車がナイト2000になる。。というのは大袈裟ですが、4980円で車にバーチャルアシスタントが搭載できたら素敵ですよね。
<a href="https://www.amazon.co.jp/dp/B078YN7NDD"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/0dd07d24-f6a8-114a-a162-7aff409a3d79.png" width="80%"></a>

家の中で使うAmazon echoシリーズと違う点は、**現在地情報**が取得できるという点です。

他のEchoシリーズと同じくEcho AutoはSIMを搭載していないので、単体ではインターネットに接続できません。Android 6.0以上、iOS 12以上のスマホペアリングして使います。そのペアリングしたスマホ上でAlexaアプリの位置情報を「常に許可」にして、Alexaスキルの有効化の際、位置情報に関するパーミションを「許諾」されたAlexaスキルには、以下のような位置情報が渡ってきます。



```text:アーキテクチャ図の５でServiceに渡される値
"context": {
        "Geolocation": {
            "locationServices": {
                "status": "RUNNING",
                "access": "ENABLED"
            },
            "timestamp": "2021-04-06T23:20:32Z",
            "coordinate": {
                "latitudeInDegrees": 35.678483025390625,　//緯度
                "longitudeInDegrees": 139.76176330426707, //経度
                "accuracyInMeters": 65 //緯度および経度の不確かさ(m)
            },
            "altitude": {
                "altitudeInMeters": 31.7838134765625,　//標高(m)
                "accuracyInMeters": 10　//標高の不確かさ(m)
            },
            "heading": {
                "directionInDegrees": 58.59278869628906 //デバイスの向いている方位
            },
            "speed": {
                "speedInMetersPerSecond": 1 //GPS制限内の速度（メートル/秒）
            }
        },
        "Extensions": {
    （略）
},
"request": {
    "type": "SessionEndedRequest",
    "requestId": "amzn1.echo-api.request.xxxxxxxxxxx",
    "timestamp": "2021-12-23T16:42:05Z",
    "locale": "ja-JP",
    （略）
}
```


各Geolocation項目のリファレンスはこちらにあります。
https://developer.amazon.com/ja-JP/docs/alexa/custom-skills/location-services-for-alexa-skills.html#geolocation-interface

Alexaとユーザーが会話する際、ユーザー側の発話はIntentRequestとしてAlexaに通知されます。
Geolocation項目一式もIntentRequestの一部として通知されます。
つまりユーザーが移動しながら会話している場合は、発話の都度Geolocationの値も変わりますので要注意です。


* どちらの方角にどんな速さで進んでいるのか、```directionInDegrees```や```speedInMetersPerSecond```が返却されるのでわかります。上のJsonは静止していた時の値です。

* データの鮮度をチェックしてから使うように、と注意換気されています。具体的には、リクエスト自体のtimestamp（```request.timestamp```）と```Geolocation.timestamp```との差を確認します。Geolocation.timestamp値は、ユーザーの位置情報がデバイス内部で測定された時刻です。もしOSが現在地情報を取得できなかったとしても、しれっと値が入ってきますので、移動体の速度にもよりますが、1分以上ギャップがあったら使わないなどの措置が必要です。


* データの精度も重要です。"accuracy"=「不確かさ」というのは、位置情報アプリの開発者の方なら馴染みがあると思いますが、「実際の位置から計測がズレてる可能性があるとして、その範囲」を示したものです。「```accuracyInMeters:65```」なら、東西南北どっちの方角かはしらんけどマックスで65mずれてる可能性があるよ、という意味になります。この値が大きすぎると、Alexaスキルが提供する情報がボケボケになってしまうので、スキルの内容によってバッサリ足切りする必要があります。

* 例えばそのAlexaスキルが「付近のガソリンスタンドまでの距離」を知らせるものの場合、車で移動中でしたら、300mずれていても許容範囲でしょう。しかし「今いるガソリンスタンドで給油機のレーン番号を伝えてロック解除しAmazon Payで支払う」というスキルなら、300mずれていると成り立ちません。

* なおWi-fi接続してる時にはhorizontal accuracyは65mになりがちです。iOSと同じですね。





## Alexa * 位置情報＝活用事例

### 今いるガソリンスタンドで給油機のレーン番号を伝えてロック解除しAmazon Payで支払う

上で触れた「今いるガソリンスタンドで給油機のレーン番号を伝えてロック解除しAmazon Payで支払う」という仕組みは、実は米国内のエクソンおよびモービルのガソリンスタンドで2020年の9月ゴロからすでに実現化されています。
https://www.youtube.com/watch?v=Tnwr4Au2ry4
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/69ecd893-7cf2-fff6-ebd1-a5760e4052d8.png" width="50%">

*余談ですが、この動画の中では、おねえさんはAndroidスマホのAlexaアプリを音声で起動しています。[2020年の7月頃からハンズフリー機能が実装され、](https://vuibiz.jp/archives/2080)Echo Autoのような中継デバイスがなくてもスマホのAlexaアプリの音声起動が可能となっています。とはいえ、そこはAppleやGoogleの壮絶な反対にあったのか、いったんSiriやGoogleアシスタントを起動してからAlexaを呼び出さなければならず、だいぶめんどうです(汗)。*

### 付近のスーパーのうち空いている店を見つける

2021年4月に弊社がリリースした「お買物混雑マップ」というAlexaスキルでは、
現在地情報を元に周囲のお店の混雑予測を教えてくれます。
https://www.unerry.co.jp/news/covid19-map-for-drive/
<a href="https://www.unerry.co.jp/news/covid19-map-for-drive/
"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/91d1bf79-0310-97d8-0d4c-c869541e01a6.png" width="30%"></a>

オミクロン株の流行の兆しにより、また感染リスクを避ける行動が必要となってきましたので、車でお出かけの際にぜひ使っていただきたいと思います。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173392/66f6cb25-4ae5-bd78-886a-a9c011c807a3.png)

去年のCEATECで、LBMA様の枠でunerryも出展させていただいた時、「お買物混雑マップ」のプロトタイプが全然動かなかった爆死動画[はこちらです。](https://youtu.be/R0FcOMkzZyQ?t=2274)

## これからやってみたい事



以前、[Alexaスキルコンテスト](https://note.com/sayakait/n/nbe644084ad41)に出ようと思い、知り合いに案出しを手伝っていただいた時、面白いアイデアをいただきました。


* 子供をつれてドライブ中に、「家まであと何分？」を5分おきに聞かれてつらいので、Alexaに答えてもらう
* ロードバイクで移動中に、音声で、空いてる経路を教えて欲しい

あれから2年経ちましたが、引き続きニーズはあると思います。
少し仕事がおちついたら、Google Maps API と組み合わせたりして、作ってみたいと思います。


以上となります。


ではLBMAの益々の発展を祈願いたしまして、来年もよろしくおねがいいたします！