1.はじめに
いきなりですが、皆さんはCoderDojoをご存知でしょうか。
CoderDojo は7〜17歳の子どもを対象にしたプログラミング道場です。
2011年にアイルランドで始まり、世界では110カ国・2,000の道場、日本には178以上の道場があります。
CoderDojoはプログラミングで遊びたい、何かを作りたい子どもたちが集まる公園みたいなものです。
少しでも多くの子どもたちがCoderDojoを見つけることができるように、イベント検索用のAlexaスキルを開発してみます!(うーん、強引)
2.ユースケース
基本的には、参加希望者がCoderDojoを探すことを想定し、主催者側の機能は考えないことにしました。
そこで大きく2つのユースケースを考えます。
- 「近くのCoderDojoを探して」と発話すると、現在地からもっとも近いCoderDojoのイベント情報を答える。
- 「CoderDojo●●の開催情報を教えて」と発話すると、特定のCoderDojoのイベント情報を答える。
残念ながら、スキルから直接申し込みはできないので、どちらも最後にAlexaアプリへカードを表示することにします。
3.設計
最寄りのCoderDojoを探す場合
Alexa側は「近くのCoderDojoを探して」が拾えるようにするだけなので、一旦端折ります。

処理を分解すると、こんな感じでしょうか。
ネックになるのはZenからのCoderDojo情報とCoderDojo Japanのイベント情報をどうやって紐付けるかになりそうです。
No | 処理概要 | 備考 |
---|---|---|
1 | Alexaへのリクエストに現在地情報(lat,lon)を入れる | https://developer.amazon.com/ja/docs/custom-skills/location-services-for-alexa-skills.html#conditions-for-location-services |
2 | lat,lonを使ってZenのAPI「search-nearest-dojos」をコンコンして最寄りのDojo情報を取得する | https://zen.coderdojo.com/documentation#!/api/postApi20DojosSearchnearestdojos |
3 | 2で取得したDojoの情報から何かキーを使って、CoderDojo Japanが統合管理しているイベント情報を取得する | キーになりそうなもの。「"id": "52aa6cef-a5b5-4827-aa72-dd22a69b3065"」 |
4 | 必要な情報を整形してレスポンスを返す。と同時にカード表示する。 | https://developer.amazon.com/ja/docs/custom-skills/include-a-card-in-your-skills-response.html |
特定のCoderDojoを調べる場合
通常であれば、AlexaのカスタムスロットにDojoの名前を1つ1つ設定してビルドをすると、同じDojoでも複数の呼び方に対応できたりして聞き取りの精度が上がるはずですが、今後CoderDojoが増えていくことを考えていくと毎回手動で設定、ビルド、公開審査といったメンテナンスすることになり、非常に面倒です。
そんな困りごとを途方にくれながら呟いていたところ、突如kun432さんから救いの手が!!
どうですかね?
— kun432 (@kun432) 2019年7月3日
つ https://t.co/jDdu2tI0F3
要約すると、カスタムスロットを動的に追加することができる機能が追加されたということでした。
記事にはハードコーディングしている例が載っていますが、外部からデータを引っ張ってきて利用することも可能なはずです。
また制約として100件までという上限がありますが、これはVUIをうまく設計すれば100件以内に収めることも可能と見込んでいます。
(例えば、地域を先に答えてもらい、裏ではその地域のリストを動的に生成して、次にCoderDojo名を答えてもらうという方法がありそうです。これなら名称の重複も回避できるかも?)
これら踏まえた概要図はあとで追加します。。。
随時更新していきます!こうしたらいいんじゃない?みたいなことがあればコメントお願いします🙏