最近、久しぶりにGoogleアシスタント向けアプリをつくろうと思ったのですが、制作手段として、Actions BuilderというIDEが誕生していることに気づきました。
昔は、Actions on Google + Dialogflow という感じで2つのサービス(内部的にCloud Functionsも使っているので実質3つのサービス)を行き来しながら作らなければならなかったのですが、Actions on Googleだけで完結(内部的にCloud Functionsもつかってますが、Actions Builderからデプロイできるので)できるようになったのは、ほんのり手間が減ったと言えるでしょう。
Actions Builderの使い方を調べるためにも、かつて作ったタイマーの逆襲というアプリをActions Builderで作り直してみることにしました。
https://assistant.google.com/services/a/uid/000000d6315c9755?hl=ja-JPassistant.google.com
Actions Builderの基本的な使い方
使い方をいろいろ調べてみた感想として、公式のコードラボのレベル1、レベル2をやってみるのが一番手っ取り早いと思いました。
レベル1では、基本的な操作方法が、レベル2では、スロット(変数みたいな概念)とコンディション(コンテキストみたいな概念)を学ぶことができます。
セッションで変数を保持する方法
コードラボをレベル2まで完了しても、会話内で変数を保持する方法は出てこないのですが、タイマーの逆襲にはセッション内での変数の保持(XX秒経ったら教えてのXX秒の部分を保持)が必要なので、調べました。
結論を先に書くと、session storageを使えばOKです。
Write
// Assign color to session storage app.handle('storeColor', conv => { let color = 'red'; conv.session.params.exampleColor = color; });
Read
// Retrieve color from session storage app.handle('getStoredColor', conv => { let color = conv.session.params.exampleColor; });
Clear
// Clear color from session storage app.handle('clearStoredColor', conv => { conv.session.params.exampleColor = null; });
conv.session.paramsがオブジェクトになっているので、そこに好きなkey、valueを設定してあげるだけで、セッションが切れるまで変数を保持してくれました。