kun432's blog

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

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

Voiceflow TIPS #24 リマインダーで通知する

Voiceflow夏休みAdvent Calendarの24日目です。

今日は、前回「Voiceflow Community Marketpace BETA」に公開したスキルを使って、Voiceflowでの「リマインダー」の実装を説明したいと思います。

ちなみに、

でもAlexaのリマインダーについてLTさせてもらいましたが、どちらかというとコードの話がメインで、Voiceflowについてはサラッとしか話してないこと、あと当時はまだ実装されていなかった「繰り返しのリマインダー」がVoiceflowにも実装されましたので、そのあたりを補足的に説明したいと思います。

いちいち読むの面倒だわー、という方はもちろん、実際に手元でじっくり見てみたい、という方も、以下のリンクよりダウンロードしてじっくりと中身をご覧いただきながらお読みいただければと思います。(要Voiceflowアカウント)

https://creator.voiceflow.com/dashboard?import=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9qZWN0SWQiOjM4MTM5LCJwcm9qZWN0TmFtZSI6InNhbXBsZSByZW1pbmRlciIsImlhdCI6MTU2NjU3NjY4OH0.oBXeBJpw5RHPjp7PWQNqq0svHk-JCnTBP8nhdz_hA9k

リマインダーの種類

まず、最初にAlexaでできるリマインダーの種類について説明します。

相対指定

相対指定は、「現在を起点として、今から○時間○分○秒後」という設定の仕方です。わかりやすいのはタイマーですね。比較的近い未来にリマインドしたい場合にむいています。

絶対指定

絶対指定は「いつ?」というのを明確に設定するやり方です。さらに絶対指定は、繰り返しがあるかないかで設定方法が分かれます。

繰り返しなし

「○年○月○日 ○時○分○秒」という、本当にピンポイントで指定するやり方です。イベントや誕生日など、明確な予定やスケジュール等がある場合に向いてます。

繰り返しあり

繰り返しは「毎日」「毎週」の2つです。毎月とか毎年は現在ありません。

「毎日」の場合は「毎日○時○分○秒」、「毎週」の場合は「毎週○曜日の○時○分○秒」という指定の仕方になります。土日は含めない、とか、複数の曜日を指定する、といったことは残念ながら現状できません。もしそれをやるという場合は複数回リマインダーを設定するようなやり方になると思います(リマインダーとしても別のリマインダー扱いになる)

このタイプは、例えば、決まった時間に薬を飲む、など、習慣的なToDoの備忘録的な使い方が向いていると思います。

Voiceflowのリマインダー

当初、Voiceflowのリマインダーは、

  • 相対指定
  • 絶対指定かつ繰り返しなし

しかなかったのですが、「繰り返しあり」のニーズはきっと高いし、スキルの継続的な利用促進にもつながるので、ぜひ機能追加を検討してほしい、と開発元に伝えたところ、2週間ぐらいでサクッと追加されていました!このあたりのスピード感がほんとにすごいです。

ということで、迅速な機能追加への感謝も込めて「毎日決まった時間の繰り返し」のリマインダーを題材にします。

スキルの全体像

f:id:kun432:20190825011934p:plain

結構長いですね。大きく分けて4つのパートに分かれます。

f:id:kun432:20190825014224p:plain

  1. ユーザからリマインドしたい時刻を取得する
  2. リマインダーを設定してよいか?の意志を確認する
  3. リマインダー設定権限の確認と権限の要求
  4. リマインダーの設定

順に見ていきたいと思います。

1. ユーザからリマインドしたい時刻を取得する

ここはそんなに難しくないと思います。スキル起動後の挨拶の後、Interaction Blockで、ユーザにリマインダーを設定したい時刻を発話してもらって、それをAMAZON.Timeで受けて変数に入れるだけです。

f:id:kun432:20190825021230p:plain

f:id:kun432:20190825021238p:plainf:id:kun432:20190825021245p:plain

少しだけひねってるのは、Code Blockのところですね。AMAZON.Timeを使うと、通常スキル側に渡されてくるのは、”12:25”(24時間表記)というような形式来るんですが、一部例外があってその場合に少しCode Blockを使ってゴニョゴニョしてます。今回のような毎日繰り返しの時刻を取るだけなら、最終的には、「○時」と「○分」を分けて変数に入れればそれでOKです。

詳しくは、以下にも記載してますのでそちらをご覧ください。

2. リマインダーを設定してよいか?の意思を確認する

f:id:kun432:20190825022459p:plain

次の設定権限の確認とも絡むのですが、リマインダーの設定は2段階での確認が必要です。これはドキュメントにも記載ありますが、審査の際にチェックされるようです。

ユーザーがAlexaと対話していた場合は、それに「割り込み」ます。ユーザーがこのリマインダーを聞きたくない場合は、対話の妨げになります。不要な割り込みをしないように、リマインダーの作成には、2セットのアクセス権限を取得する必要があります。a)共通リマインダー読み取り/書き込みアクセス権限(スキルの有効化時に取得)と、b)個別のリマインダーを設定するためのユーザーの明示的な許可です。明示的な許可は、スキルがユーザーに対して示すダイアログの一部として取得する必要があります。たとえば、ユーザーに対して「リマインダーを作成してよろしいですか?」や「これをリマインドしますか?」などとたずねます。 スキルの応答では、リマインダーの時刻や、そのリマインダーを繰り返すかどうかをユーザーに明示する必要があります。

つまりここでやっているのは上記の「b) 個別のリマインダーを設定するためのユーザーの明示的な許可」にあたります。言われんでもそんなん普通に組み込むやろー、という方もいらっしゃるかと思いますが、ここはきちんと意図があって必須になっているということを認識していただければと思います。

3. リマインダー設定権限の確認と権限の要求

f:id:kun432:20190825022929p:plain

こちらが先程の「a)共通リマインダー読み取り/書き込みアクセス権限(スキルの有効化時に取得)」にあたります。b) についてはあくまでも意思確認であってスキルの技術的な面では全く関係ないですが、こちらはデバイスにリマインダーを設定するために必ず必要です。

User Info Blockについては多分Advent Calendarの中で過去に説明してなかったと思います。次の回でちょうど取り上げますので、その際に詳しく説明したいと思いますが、単純に言うと「権限があるか」をチェックするブロックになります。

f:id:kun432:20190825023642p:plain

今回はリマインダーへのアクセス権があるかどうかをチェックするために「Reminders」を選択します。ちなみに他にチェックできるものとしては以下のようなものがありますので、参考までに。

f:id:kun432:20190825023755p:plain

で、ここで権限が付与されていればよいのですが、権限が付与されていない場合は、ユーザへの権限許可を要求するカードをAlexaアプリに送信する必要があります。それがPermission Blockになります。

f:id:kun432:20190825024326p:plain

今回はスキルがリマインダーへのアクセス許可をもらう必要があるので、上記のとおりになっています。この設定をすることで、権限がない場合には以下のようなカードがAlexaアプリに送信され、権限許可が必要なことをユーザに促すということですね。

f:id:kun432:20190825025121p:plain

これでリマインダーの設定ができるようになります。

4. リマインダーの設定

最後に実際にリマインダーを設定します。

f:id:kun432:20190825025600p:plain

Reminder Typeで「Timer(相対指定)」か「Scheduled(絶対指定)」を選択できます。今回は「Schedules」を選択します。

次に、時間をセットします。最初のところで、「○時」と「○分」を分けていたのはこのためです。Dateは日付になりますが、ここは繰り返しを始めたい日付を設定します。というか、繰り返しなので別に空でもいいと思うぐらいなんですが、設定上、空だとエラーになるため、スキルを作っているときの日付を入れておけばいいと思います。タイムゾーンも色々選択できますが「User Timezone」にしておけばよいです。

で、繰り返しですね。RecurrenceのスイッチをONにすると、メニューが表示されますので、「Daily(毎日)」か「Weekly(毎週)」を選択します。ちなみに、毎週の場合はこういう感じで、曜日を選ぶことになります。

f:id:kun432:20190825030527p:plain

最後にリマインドさせたいメッセージを設定すればOKです。

その他の設定パターン

一応その他の設定パターンについても説明しておきます。

相対指定

相対指定の場合は以下のようになります。ただし、ここは「時刻」ではなく「現在からの時間」になりますので、その点には注意してください。

f:id:kun432:20190825031355p:plain

絶対指定で繰り返しなし

繰り返しなしの絶対指定の場合は以下のようになります。要はReccurenceのスイッチがオフになっているだけですね。ただし、こちらの場合は指定した日付に実行されます。

f:id:kun432:20190827005619p:plain


いかがでしょうか?Alexaスキルは基本的にユーザの発話のみが起動のトリガーになっているため、有効化はしたもののなかなか利用してもらえないという課題があります。その意味で、リマインダー機能はスキル開発者からユーザへの能動的な働きかけができる唯一の基本機能と言っていいかもしれません。ユーザ側でもスキルの起動を自分で覚えておくよりも通知されたほうが楽なので、お互いにメリットがあります。

是非リマインダーを活用していただいて、スキルの利用促進につなげていただければと思います。