Bot Framework での ステート管理 について、以下のドキュメントのざっくりな個人的まとめメモです。
Overview
- ステート管理について
- ステート管理の概要
- ステート管理の活用例
- 注意事項
- プログラミング寄りなメモ
- State Service 内のメソッド
- ステート管理でよく使いそうなプロパティ
2017/8月時点の情報なので、BotFramework だと Bot Builder 3.8~くらいがターゲットでしょうか。
(状態管理とかステート管理...漢字四文字が重いので「ステート管理」でいきます...)
ステート管理について
ステート管理の概要
- Bot Framework はボット自体がステートレスですが、会話のステートを State Service によって維持できる(している)。
- ボットが Dialog を使用している場合、会話のステート(Dialog Stack と Stack 内の各 Dialog のステート)を自動的に保存している。
ステート管理の活用例
- 以前の会話がどこで途絶えたかを判断する、または返信するユーザに名前で挨拶する
- ユーザーの設定を保存する場合は、その情報を使用して、次にチャットするときに会話をカスタマイズする
- 興味のあるトピックに関するニュース記事をユーザーに警告したり、予定が利用可能になったときにユーザーに警告する
注意事項!
- .NET用の Bot Framework SDK を使った場合、デフォルトでは、プロトタイプ作成専用の Bot Framework State service を使用してステートのデータを保存
- SDK でデータを取得したり、REST APIで取得したりできる
- パフォーマンスやセキュリティの観点から、このままでの本番運用はあかん!
ということで、その実装は次回に書きます♪
プログラミング寄りなメモ
State Service 内のメソッド
前提として、ボットは チャネル > 会話 > ユーザー のイメージです。特定のチャネルの中に特定の会話があって、そこにユーザーがいるイメージです。
(我ながら言葉足らず感がひどいですね...)
ステートを管理するために用意されている State Service のメソッドについての表!
メソッド | スコープ | 目的 |
---|---|---|
GetUserData |
User | 特定のチャネルのユーザー情報を取得する |
GetConversationData |
Conversation | 特定のチャネルの特定の会話に関する情報を取得する |
GetPrivateConversationData |
User and Conversation | 特定のチャネルの特定の会話のユーザーの情報を取得する |
SetUserData |
User | 特定のチャネルのユーザー情報をセットする |
SetConversationData |
Conversation | 特定のチャネルの特定の会話に関する情報をセットする。DeleteStateForUser メソッドはSetConversationData メソッドで保存したデータを削除しないため、このメソッドで個人を識別できる情報を保存しないでください |
SetPrivateConversationData` | User and Conversation | 特定のチャネルの特定の会話のユーザーの情報をセットする。 |
DeleteStateForUser |
User | 以前に保存されたユーザーの状態データを、SetUserData メソッドまたは SetPrivateConversationData メソッドを使用して削除します。 |
ステート管理でよく使いそうなプロパティ
Activity
オブジェクト内にあるステート管理によく使いそうなプロパティの表!
Property | Description | Use case |
---|---|---|
From |
チャネルでユーザーを識別するId | ユーザーに関連付けられたデータの保存と取得 |
Conversation |
チャネルで会話を識別するId | 会話に関連付けられた状態データの保存と取得 |
From and `Conversation |
チャネルで会話の中でユーザーを識別するID | 特定の会話のコンテキスト内で特定のユーザーに関連付けられている状態データの保存と取得 |
参考
https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-state
https://docs.microsoft.com/en-us/bot-framework/rest-api/bot-framework-rest-state