Dialogflow v2のuserStorageの使い方


Dialogflowがv2になってuserStorageの保存方法も変わりました。
userStorageはアクションを終了しても永続的にデータが残るものです。
別途データベースを用意しなくても簡易的なデータの保存にはうってつけです。

※100日間何も更新無ければ消えるらしいです。後、ユーザーがアプリをリセットすると消えます。

Inline Editorにあるindex.jsを編集します。

保存方法

まずは、保存の仕方です。conv.userの中にあるstorageを使います。
convはDialogflowConversationのことです。storageの後のmemoとかは自由に決めることができます。

保存方法
function save(agent) {
  // Dialogflowから来るパラメータを取得
  const memo = agent.parameters.memo;

  // DialogflowConversationを取得
  const conv = agent.conv();

  // userのstorageに保存する
  conv.user.storage.memo = memo;

  conv.ask('メモを保存しました');

  agent.add(conv);
}

// ここはIntent名
let intentMap = new Map();
intentMap.set('SaveIntent', save);

agent.handleRequest(intentMap);

読み込み方法

次は、保存した値を取得する方法です。conv.user.storageにある値を単純に取得すればOKです。

読み込み方法

function load(agent) {
  // DialogflowConversationを取得 
  const conv = agent.conv();

  // storageにあるmemoを取得
  const memo = conv.user.storage.memo;

  if (memo === undefined) {
    conv.ask('メモがありません');

  } else {
    conv.ask('メモが見つかりました。「'+ memo + '」です');    

  }
  agent.add(conv);

}

// ここはIntent名
let intentMap = new Map();
intentMap.set('LoadIntent', load);

agent.handleRequest(intentMap);

動作例

WelcomeIntentでメモをセーブするかロードするかを案内して、
StartIntentでメモをセーブ or ロードの設定を切り替えています。

まとめ

手軽にデータを永続的に保存することができました。
占いアプリでユーザーの星座情報を保存したり、天気アプリで住んでいる地域を保存する等
様々な用途で使えます。是非!お試しあれ!