みかづきブログ・カスタム

基本的にはちょちょいのほいです。

Actions Builder製のアプリで、セッションストレージを使ってセッションが切れるまで変数を保持する 🔈

最近、久しぶりにGoogleアシスタント向けアプリをつくろうと思ったのですが、制作手段として、Actions BuilderというIDEが誕生していることに気づきました。

昔は、Actions on Google + Dialogflow という感じで2つのサービス(内部的にCloud Functionsも使っているので実質3つのサービス)を行き来しながら作らなければならなかったのですが、Actions on Googleだけで完結(内部的にCloud Functionsもつかってますが、Actions Builderからデプロイできるので)できるようになったのは、ほんのり手間が減ったと言えるでしょう。

Actions Builderの使い方を調べるためにも、かつて作ったタイマーの逆襲というアプリをActions Builderで作り直してみることにしました。

vimeo.com

https://assistant.google.com/services/a/uid/000000d6315c9755?hl=ja-JPassistant.google.com

Actions Builderの基本的な使い方

使い方をいろいろ調べてみた感想として、公式のコードラボのレベル1、レベル2をやってみるのが一番手っ取り早いと思いました。

aogdevs.jp
aogdevs.jp

レベル1では、基本的な操作方法が、レベル2では、スロット(変数みたいな概念)とコンディション(コンテキストみたいな概念)を学ぶことができます。

セッションで変数を保持する方法

コードラボをレベル2まで完了しても、会話内で変数を保持する方法は出てこないのですが、タイマーの逆襲にはセッション内での変数の保持(XX秒経ったら教えてのXX秒の部分を保持)が必要なので、調べました。

結論を先に書くと、session storageを使えばOKです。

developers.google.com

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を設定してあげるだけで、セッションが切れるまで変数を保持してくれました。