BEACHSIDE BLOG

MicrosoftとかC#を好むレンジャーの個人的メモ

Bot Framework で State を Table Storage に保存する

前回、ステート管理の概要を整理したので今回は実装編です。Azure の Table Storage に保存します。

事前準備としては、
以前に作った「会話のログを Table Storage に出力するアプリ」を使って拡張していきます。 Azure の Table Storage もその時に作ったものを使います。ということで、事前準備は、前回のブログの内容の最初から「Nuget パッケージの追加と更新」あたりまでです。

ということで、実装から始めます。

beachside.hatenablog.com

Nuget パッケージのインストール

今回の実装で追加が必要なものは、2つ

Visual Studio 2017 の上部のメニュー ツール > Nuget パッケージ マネージャー > ソリューションのNuget パッケージの管理 を開き、検索に「autofac.webapi2」と入力して、パッケージをインストールしましょう。

f:id:beachside:20170829184028p:plain


実装

といっても、Microsoft.Bot.Builder.Azure で用意されているクラスを、DIコンテナーへの登録してあげるだけです。

Global.asax.cs ファイルを開いて以下のように実装すれば完了です。

以前に書いたのコードから、26行目と、32行目~42行目を追加しました。

これだけだと何がなんだか感はありますが、詳しくは、ライブラリのソースコード自体を見るのがが良いですね。TableBotDataStore クラスあたりに色々と詰まっています。

BotBuilder-Azure/CSharp/Library/Microsoft.Bot.Builder.Azure at master · Microsoft/BotBuilder-Azure · GitHub

ちなみに、ConnectionString(TableStorageの接続文字列)は、前回作ったものをそのまま利用しています。

動作確認

エミュレーターからボットと会話して、Azure Storage Explorer で見てみると、「botdata」という Table ができていて、中にデータが入っています。

f:id:beachside:20170829184044p:plain

おわりに

後は前回のステート管理の整理でメモした「ステートを管理するために用意されている State Service のメソッド」を使って用途にあったデータを保存して、活用する感じですね。

あと、Azure の Storage 自体が安価なのでいつも実物使っちゃってますのが、開発時は、Storage のローカルエミュレーター使って開発するのもありでしょうか?

docs.microsoft.com

参考

Saving State data with BotBuilder-Azure in .NET - Microsoft Bot Framework