kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

2019年11月振り返り

f:id:kun432:20191208234319p:plain

11月の振り返りです。

資格

進捗なし。でも最近ちょっと真面目にk8s触りだしました・・・本腰入れていかないと。

毎月一個、テーマを持ってスキルを作る

進捗ゼロ。引き続き、資料作ったり、イベント絡みの企画だったりをやっています。しかも1月末にも別のイベント追加してしまったので、スキル作る時間は意識して作らないと厳しい・・・仕事の方も少し忙しくなりそうだし、真面目に考えたい。

公開済15個
申請中0個
開発中6個

アウトプット

LT

11月は1回。ただ、この1回はほんと熱かった。個人としては小ネタだったけど、マニアックなネタだったので、まあまあ良かったのではないかな。

ブログ

今月は5件。まあ平均的かな。

その他

イベント

今月もちょっと少なめ・・・今月は増やしたい、そして登壇したい。主催者ならびに登壇者、参加者の皆様、ありがとうございました!


12月も色々がんばろう、ということで、まず告知です。

東京ですが、AlexaスキルLearning Dayの夜にVoiceflowハンズオン&ワークショップやります!今回は技術的な観点よりも、楽しいストーリーを作ろう!という、個人的にはチャレンジングな内容になってます。そして資料作りに苦しんでる今日この頃・・・東京近辺の方はぜひ来てください!ちょっぴり素敵なプレゼントがあたるじゃんけん大会あります!

AAJUGは今年最後の振り返りイベントです。今年1年のAlexaを振り返って来年どうなるか?みたいな話が聞けると思うので、ぜひお越しください!

あとAAJUGはもう一つ。AAJUG と JAWS-UG OSAKA合同で、re:Inventの振り返り&忘年会あります!re:Inventでの新しい話とかも聞けるので、こちらもぜひお越しください。

12月中頃過ぎたら一つ公開できそうな話もあるので、引き続きよろしくお願いいたします。

【技術書典で出会った良書】スマートスピーカーでおうちハック

f:id:kun432:20191208140633j:plain

この記事は【推し祭り】技術書典で出会った良書 Advent Calendar 2019 の8日目の記事です。

私のオススメとして、温泉♨BBAさんの「スマートスピーカーでおうちハック」をご紹介しようと思います。

温泉♨BBAのお二人(元木さん・伊藤さん)には何度かお会いしたこともあり、スマートスピーカーやVUIを広めていきたい、そしてビジネスにしてご飯が食べれるようになりたい、という点でとても共感する面が多く、前作の「スマートスピーカーアプリのお品書き」の次はどういう本になるのかな?と非常に楽しみにしていました。で、テーマは「スマートホーム」ということで、個人的には、そうきたか!と一人唸っていた次第です。

個人的にココ!と思った、おすすめポイントは以下です。

順にご紹介しますが最初に免責。

  • 私個人として、この分野に関わらせてもらっている端くれなので、多分にバイアスがかかっていることは否定できません。その点はご了承ください。
  • 私個人の立ち位置としては、スマートスピーカーとかをややビジネス寄りで見てます。

ではポイントごとにご紹介。

スマートホームがテーマ

現実的な話として、スマートスピーカー、国内だとそんなに便利さ感じてる人いないんですよね。実際の使われ方も、音楽を聞く、ニュースを聞く、とかが多くて、サードパーティが作るスキルとかはそこまで便利さや楽しさを伝えられていないと思ってます。要は一般層にもはっきりと伝わるユースケースがまだないんですね。

その観点で、最も一般層にも便利さが伝わるのは「スマートホーム」ではないかなと考えてます。そこでスマートスピーカーの良さが少しでも伝われば、裾野が広がっていろいろ発展する、と思うので、それをテーマにしたところに、本当にビジネスにしようとしてるんだな、という熱い思いを一人勝手に感じてましたw

あと、実際のユースケースも紹介されているのも興味深いです。多少なりとも一般の方が始めるにはお金もかかるし手間もかかるし、そういうのを書籍で追体験できるのはとても良いですね。

Voiceflowのことが書いてある!

ここは外せないでしょうw ということで、なんと30Pも割いてあります!私の知る限り、公式に出版されたVoiceflow単独の書籍ってまだないと思うし、Voiceflowでのスキル開発の手順が載っているというのに限っても、ないんじゃないかなと思います。なので、世界で初めてVoiceflowそのものを取り上げた書籍だと言ってもいいではないかなと思っています!

IFTTTもそうですけど、ノンコーディングツールの良さは、やりたいことへのハードルが低くてゴールが短いことだと思ってます。つまり一般層にもスタートしやすい。やってみて、もっと興味が湧いて凝ったことをしたくなるようであれば、そこで初めてプログラミングにトライすればいいと思うので、こういうのがもっと一般書籍や雑誌等で取り上げられるといいなと思っています。(でも進化が早いので辛そう・・・)

※海外で、VUI開発者や事例を紹介する書籍が出たみたいで、その中でVoiceflowを使ってる人が取り上げられてるらしい、というのは聞いたことある。
※他にあれば教えてください。

まとめ

ということで、スマートスピーカー・VUIをビジネスにしようという熱い思いを感じることができた一冊でした。上で書いた点以外にも興味深いところたくさんありますので、スマートスピーカーアプリ開発に携わっている方は読んでいただければなと。もちろん、スマートホームをまずは始めてみたいという方にもオススメです。

個人的な思いとして、どんなに素晴らしくても、どんなに思い入れがあっても、お金がまわる仕組みがないと続けられない、と思ってます。業界全体みたいな大きな話だけじゃなくて、一企業や一個人でもそれは同じだと思うし、未来への先行投資だけじゃなくて今どうやって食べていくか?もあります。

改めて、普段の仕事とかでも、好きなことを続けていく・周りに続けていってもらうためにも、エンジニアといえど、ビジネスの観点はもっと意識して色々やっていかないとなー、と強く感じました。

Voiceflow TIPS #37 位置情報サービスを使う

Advent Calendar延長戦、今日は「位置情報サービス」の話です。

Alexaで使える位置情報は

  • バイスに登録されているアカウントの住所情報を使う「デバイスアドレスAPI
  • GPS対応デバイスで使用可能な「位置情報サービス」(というか現状Alexaアプリのみ)

の2つがあります。VoiceflowではデバイスアドレスAPIには以前から対応していましたが、今回、位置情報サービスにも対応しました!ということで早速試してみたいと思います。

全体像

まず全体像はこんな感じです。何気に多いですねぇ。Flow Blockでうまくまとめておけば使いまわしもできそうですが、とりあえず。

f:id:kun432:20191129235521p:plain

順に説明していきます。

変数の作成

以下の通り、変数を作成します。プロジェクト変数でも良いですが、フロー変数を使いました。

f:id:kun432:20191130000530p:plain

各変数の意味は以下です。

変数名 内容
hasGeolocation 位置情報サービスが使えるデバイスかどうかのチェック結果を保存します
location 維持情報サービスが使える場合は、JSONオブジェクトで位置情報が返ってきますので、それを保存します
lat 位置情報が含まれているJSONオブジェクトから緯度を取り出して保存します
lon 位置情報が含まれているJSONオブジェクトから経度を取り出して保存します

スキル起動時のメッセージ

ここは難しくないですね。

f:id:kun432:20191130001130p:plain

位置情報サービスが使えるデバイスかどうかをチェックする

まず、Code Blockで位置情報サービスが使えるデバイスかどうかをチェックするための情報を取得します。現時点ではスマホのAlexaアプリだけで、それ以外のデバイスでは位置情報が利用できませんので、この判定を行うわけです。

f:id:kun432:20191130001347p:plain

以下にコードを記載します。

if (voiceflow.capabilities && ('Geolocation' in voiceflow.capabilities)) {
  hasGeolocation = 1;
} else {
  hasGeolocation = 0;
}

以前に画面付きデバイスの判定をやったのを覚えていますか?

基本的にやっていることは同じで、voiceflow.capabilitiesというオブジェクトの中に、位置情報サービス対応デバイスの場合はGeolocationというオブジェクトが入ってくるのでこれが存在するかどうかをチェックし、存在する=位置情報が使えるデバイスの場合はhasGeolocationを1にします。

そして、If Blockでそれを判定します。

f:id:kun432:20191130001838p:plain

位置情報サービスが使えないデバイスの場合は、ここでスキルを終了させてしまいます。

f:id:kun432:20191130002053p:plain

位置情報サービスへのアクセス権のチェック

位置情報サービスが使えるデバイスであることが確認できたら、次はアクセス権のチェックです。位置情報サービスはユーザのアクセス許可がないとスキルからは利用ができません。そこでUser Info Blockを使って位置情報の取得を行ってみて、NGならアクセス許可をカードで促すということになります。

User Info Blockの設定に"Location Service"が選べるようになっていますね!これが位置情報になります。これが取得できれば、アクセス権が許可され、かつ、位置情報を含んだJSONオブジェクトが変数locationに入るというわけです。

f:id:kun432:20191130002416p:plain

取得できない場合はfailに流れますので、アクセス権を許可することを発話で促すとともに、

f:id:kun432:20191130002841p:plain

Permission Blockで、Location Serviceへのアクセス許可をカードで送信します。

f:id:kun432:20191130002930p:plain

返ってきた位置情報オブジェクトの処理

位置情報対応デバイスであることも確認した、位置情報へのアクセス権も許可されている、じゃあ位置情報取れているはず!と思いきや、それでも取れない場合がいくつかあります。例えばそもそもスマホ側でAlexaアプリに位置情報の取得を許可していない場合、などですね。そこで念のためにIf Blockでlocation変数の中にデータが入っているかを確認します。undefinedになっている場合は位置情報は空っぽということになるので、エラーでスキルを終わらせます。

f:id:kun432:20191130004022p:plain

f:id:kun432:20191130004036p:plain

しかし、以前はnullとかundefinedとかのチェックはIf Blockでこんな書き方ではできなかったと思うんですが、ちょっと変更されたのかもしれませんね。

それはさておき、これで位置情報データは正しく取れました。ちなみに位置情報データ配下のようなJSONオブジェクトになっています。

{
    "location":{
        "locationServices":{
            "status":"RUNNING",
            "access":"ENABLED"
        },
        "timestamp":"2019-11-29T12:29:42Z",
        "coordinate":{
            "latitudeInDegrees":34.6826XXXXXXXXXX,
            "longitudeInDegrees":135.1867XXXXXXXXX,
            "accuracyInMeters":10
        },
        "altitude":{
            "altitudeInMeters":8.5653XXXXXXXXXXX,
            "accuracyInMeters":10
        },
        "speed":{
            "speedInMetersPerSecond":1
        }
    }
}

各オブジェクトの詳細はドキュメントを見ていただくとして、シンプルに緯度と経度を取るならば、

  • location.coordinate.latitudeInDegrees が緯度
  • location.coordinate.longtitudeInDegrees が経度

になるので、この値だけを取得すればOKです。Code Blockを使います。

f:id:kun432:20191130005506p:plain

コードはこんな感じです。

lat = Number(location.coordinate.latitudeInDegrees).toFixed(6);
lon = Number(location.coordinate.longitudeInDegrees).toFixed(6);

位置情報サービスで取得できる緯度経度は結構細かく返ってくるので、それぞれ数値化して適当に小数点以下を丸めてあります。GPSなのでそもそもそんなに精度高くないと思いますし。

最後にこれをSpeak Blockで話させればOKです。

f:id:kun432:20191130010041p:plain

なお、位置情報のテストはAlexa開発者コンソールではできずスマホのAlexaアプリから行う必要がありますので、今回はテストは割愛します。


スマホのAlexaアプリ、あまり使われていないかもしれませんが、位置情報サービスを使うとユーザに対してリアルタイムな位置情報に基づいたカスタマイズ性の高いスキルが作れると思います。位置情報を活用したサービスやAPIなども多数ありますので、組み合わせて使ってみてはいかがでしょうか?

あと、今回のような単純な緯度経度だけならそれほど問題にはならないと思いますが、車や電車などで移動している最中の位置情報は鮮度も精度も下がったりすることが考えられますし、デバイスによって取れるもの・取れないものなどもあるようです。このあたりについては一度ドキュメントを読むことをおすすめします。

また、今回もCommunity MarketplaceにアップされているNicolasさんのデモを参考にさせていただきました。いつもありがとうございます!Thanks, Always, Nico!!!

https://airtable.com/shr36HKRwmglhZ5Lr/tblpYysnQuzqzmL0f?blocks=hide