kun432's blog

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

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

AlexaタイマーAPIを試してみた③ 〜タイマーの一時停止・再開・削除〜

f:id:kun432:20200411225821p:plain

タイマーAPIのお試し、全3回の最後です。

kun432.hatenablog.com

最後はタイマーの一時停止・再開・削除ですが、ここはさらっと行きましょう。

タイマーの一時停止と再開

まずインテントを作りましょう。といってもタイマーの一時停止と再開は新規にカスタムインテントを作る必要はなく、ビルトインインテントであるAMAZON.PauseIntent、AMAZON.ResumeIntentを使えばよいでしょう。そのまま使うと「停止して」「再開して」は認識してくれますが、「タイマーを停止して」「タイマーを再開して」は認識してくれないので、サンプル発話を追加しておきます。

f:id:kun432:20200418211635j:plain

f:id:kun432:20200418211644j:plain

では、一時停止です。PauseTimerIntentHandlerを作成します。

次は再開です。ResumeTimerIntentHandlerを作成します。

基本的にやっていることはほとんど同じです。違いは、

  • 一時停止の場合は、「動作中(ON)」のタイマーに対して、pauseTimer(timer.id)で停止する。
  • 再開の場合は、「一時停止中(PAUSED)」のタイマーに対して、resumeTimer(timer.id)で再開する。

ということだけですね。とてもかんたんです。

タイマーの削除

削除もまずインテントを作ります。こっちはカスタムで。

f:id:kun432:20200418212904j:plain

DeleteTimerIntentHandlerはこんな感じです。削除も基本的には一時停止や再開と同じで、deleteTimer(timerId)で削除するだけです。

少しだけ、補足しておきます。

PauseTimerIntentHandlerもResumeTimerIntentHandlerも、タイマーが複数あった場合にはまるっと一時停止・再開してました。DeleteTimerIntentHandlerも同じですが、同一セッション内で作成したタイマー、つまりセッションアトリビュートにタイマーIDがある場合はそれだけを削除してますね。複数のタイマーがセットできる、ということは、個別に制御が必要になる場合もあるということですね。あまりユースケース的にはそれほど多くない気もしますし、画面がないデバイスなどで複数のタイマーを音声だけで操作するのはちょっと厳しい気もしますので、スキル内で一つのタイマーしか扱わない、とか、永続セッションを使って個々のタイマーを管理する、などの工夫は必要かなという気がしました。

おまけ:標準のタイマーとスキル内のタイマー

タイマーはAlexaの標準機能でも使えます。またタイマーAPIで設定したタイマーはセッションが終わっても動作しますし、停止等もできます。さて、このあたりの棲み分けはどうなっているのでしょうか?

違いがわかりましたか?標準機能でセットしたタイマーは、スキル内からは参照できません。また、一旦セッションを切ったあとはセッションアトリビュートもないので削除も全タイマーに対して行われたはずですが、標準機能のタイマーは残っています。あくまでもスキルの中でセットしたタイマーに対してしかスキルからは操作できません。動画の中ではご紹介していませんが、スキル外からはすべてのタイマーに対して操作が可能です。このあたりはちょっと安心ですね。

まとめ

ということで、3回に分けてタイマーAPIを試してましたが、一通りのタイマーの制御が音声だけでスキル内からかんたんにできるのがわかりましたでしょうか。リマインダーでも似たようなことはできましたが、なんといってもセッション内で使えるというのが面白いですね。是非活用してみてください!