どうも、個人開発のなんちゃってプログラマーのまさゆきです。
Alexaスキルで個人的に作業効率が爆上がりするポモドーロテクニックを気軽に実践出来るスキルをリリースしました。
ただ、リリースまでにかなり罠が多かったので共有させて頂きます。
あ。ポエムです。
#最大の罠 ユーザーが利用を開始出来ない
一番これを皆さんにお伝えしたかったので、一番最初に書きます。
リリースして、数人のamazonEcho持っている知り合いに、試用を頼みました。今の所全員から
「使えないよー。」
「バグってるよー。」
「ループして始まんないよー。」
という、ありがたいレビューを頂きました。
###症状
- ユーザー 「集中モードをひらいて」
- スキル 「{スキルの説明}。 集中モードがリマインダーを使用することを許可しますか?」
- ユーザー 「はい」
- スキル 「リマインダーを有効にする方法を送信しました。アレクサアプリのアクティビティから確認して下さい。」
- ユーザー 再度・スキル起動リマインダーが有効になっていないため、(1)に戻りループするユーザーとスキル)
###問題点
ユーザーは③で「はい」と答えたことで、許可を出したと思っているが、スキル側はAlexaアプリで有効にされるのを待ち続ける。
現状Alexaのリマインダー機能は、スマホアプリ(もしくはPC)からリマインダーを有効にしないと使えません。私達開発者は、ドキュメントを読んだり実機を触り倒してるので、すぐに、設定出来るのですが、恐らく殆どのAlexaユーザーはAlexaのリマインダーをアプリで有効にする必要が有ることなんて知りません。
④の文章をもっとひねって「スマホアプリから、とかPCのブラウザから、有効にして下さい。」とかにした方がイイのかもしれませんが、現状Alexaを管理してるのがスマホなのかPCなのか、エンドポイント側では拾えない。(はず)
でも、ちょっと待って
バグってると教えてくれる心優しいユーザーの皆様に、Alexaアプリ側で許可いただく様お願いしたら、問題なく使えたのですが、、、
WHY ALEXA SKILL !!!!
買い物は声で完結出来るのに!!!
リマインダーごときを設定するのに、スマホ開かないといけないんだよ!!!
おかしいでしょ!!!!
ユーザーの意に反して、勝手にAlexaスキルが発話すると、それこそamazonEcho自体家に置きたくないってユーザーが出かねないので、慎重を期すのはわかるのですが、それにしても、もうちょっと方法が有るような気が。amazon様是非仕様の改善を前向きにご検討下さい。
個人的にAlexaアプリは、階層が深すぎてどうも使いにくい(どこに何が有るか分かりづらい)気がするので、そちらも踏まえて是非。
##現状出来る応急措置
根本的な問題は、amazon様が仕様を変更するか、ユーザー様がAlexaスキルの扱い方に慣れるか、でないと解決しないですが、対処療法としては、ユーザーとの対話を続けながら、スマホorPCで許可を与える方法をガイドするのが良いかと思います。
#トラップその2 ドキュメント通リマインダーAPIを叩くとリマインダーがセット出来ない
これは完全に私が悪いのですが、ドキュメントとさっとググってAPIのエンドポイントを確認すると、下記画像のようになっていたので、直打ちしてました。(そもそも直打ちするなってとこですが)
そうすると何度試してもエラー、しかもエラー内容が 401 MISSING_BEARER_TOKEN
https://developer.amazon.com/ja/docs/smapi/alexa-reminders-api-reference.html#alexa-reminders-api-endpoint-and-authorization
リマインダーAPIに限らず、Alexaスキルで仕様するAPIはユーザーの地域によってエンドポイントも異なるようです。日本の場合だと
https://api.fe.amazonalexa.com/
です。
というか、Alexaから送信されるJSONの中の
context.System.apiEndpoint
からユーザーごとのエンドポイントが取れるのでこちらを使うのが良いかと
#トラップその3 リマインダーAPIは結構時間がかかる
Lambdaの初期設定だと、10秒でタイムアウトになります。スキル側でも8秒以上応答に時間がかかると審査が通りません。
正確な時間は図ってないのですが、一度に4つ以上のリマインダーをセットすると10秒以上はかかりました。解決方法としては、
- Lambda側のタイムアウト時間を伸ばす
- lambda側の処理でプログレッシブ応答を入れる
かと思われます。プログレッシブ応答は、時間がかかる処理の待ち時間に先に読上げてくれる応答のようです。リマインダーAPIと扱い方はほぼ同じなので、エンドポイントさえ直打ちしなければ問題ないかと思われます。
公式↓
https://developer.amazon.com/ja/docs/custom-skills/send-the-user-a-progressive-response.html
まとめ
リマインダーAPIを使う時は
- ユーザー様もすんなりリマインダーを有効に出来ない前提で開発した方がいい
恐らく、普通のユーザー様であれば使ってみて2,3回思い通りにならなかったら、ググるなどせずもうそのスキルを二度と使わなくなるかと。
人間もプロダクトも第一印象って結構大事ですね。
あ。
最後にタイトルが盛大に釣りであったことをここに深くお詫び申し上げます。申し訳ありませんでした。