前回、ステート管理の概要を整理したので今回は実装編です。Azure の Table Storage に保存します。
事前準備としては、
以前に作った「会話のログを Table Storage に出力するアプリ」を使って拡張していきます。
Azure の Table Storage もその時に作ったものを使います。ということで、事前準備は、前回のブログの内容の最初から「Nuget パッケージの追加と更新」あたりまでです。
ということで、実装から始めます。
Nuget パッケージのインストール
今回の実装で追加が必要なものは、2つ
- Microsoft.Bot.Builder.Azure (既にインストール済み)
- Autofac.WebApi2
Visual Studio 2017 の上部のメニュー ツール
> Nuget パッケージ マネージャー
> ソリューションのNuget パッケージの管理
を開き、検索に「autofac.webapi2」と入力して、パッケージをインストールしましょう。
実装
といっても、Microsoft.Bot.Builder.Azure で用意されているクラスを、DIコンテナーへの登録してあげるだけです。
Global.asax.cs ファイルを開いて以下のように実装すれば完了です。
以前に書いたのコードから、26行目と、32行目~42行目を追加しました。
これだけだと何がなんだか感はありますが、詳しくは、ライブラリのソースコード自体を見るのがが良いですね。TableBotDataStore
クラスあたりに色々と詰まっています。
ちなみに、ConnectionString(TableStorageの接続文字列)は、前回作ったものをそのまま利用しています。
動作確認
エミュレーターからボットと会話して、Azure Storage Explorer で見てみると、「botdata」という Table ができていて、中にデータが入っています。
おわりに
後は前回のステート管理の整理でメモした「ステートを管理するために用意されている State Service のメソッド」を使って用途にあったデータを保存して、活用する感じですね。
あと、Azure の Storage 自体が安価なのでいつも実物使っちゃってますのが、開発時は、Storage のローカルエミュレーター使って開発するのもありでしょうか?
参考
Saving State data with BotBuilder-Azure in .NET - Microsoft Bot Framework