LoginSignup
0
0

More than 3 years have passed since last update.

Bot Framework Composer でボット開発 : その 13 開発時のデータベース利用

Posted at

前回 はチャンネル固有の機能について見ていきましたが、今回はローカル開発時のデータベースについて説明します。

ボットの公開でも説明した通り、公開されたボットはバックエンドデータベースとして 3 種類のストレージを使用します。

  • Application Insights: ボットの利用状況やリソースをモニタリング
  • Azure Cosmos DB: ボットのメモリオブジェクト保存用
  • ストレージアカウント: ボットとユーザーのやり取り保存用

開発時にはメモリオブジェクトを使うため、ボットを再起動するたびにデータが失われるため、以下の点に注意が必要です。

  • エミュレーターからの接続方法で新規ユーザーを使うのか、既存ユーザーを使うか
  • 実際に Cosmos DB やストレージアカウントに保存される内容が公開するまで不明

開発時のデータベース利用設定

Composer の設定より各種接続文字列を反映すれば開発中でも Cosmos DB などを利用することができます。

1. プロジェクトの保存フォルダにある BotProject.sln を開く。既定で <ユーザードキュメント>\Composer。
image.png

2. appsettings.Deployment.json より blobStorage, comosDb, applicationInsights をコピー。
image.png

3. Composer より設定を開き、コピーした内容を張り付け。
image.png

Composer の設定ファイルの扱い

Composer 内で設定した内容は ComposerDialogs/settings フォルダに保存され、Program.cs によって読み込まれる。そのため開発中、本番関係なく設定が有効になるため、テスト用の値を入れた場合、発行前に明示的に取り除く必要があります。
image.png

Cosmos DB

エミュレーターで何度か新規ユーザー ID を使って、プロファイル登録処理を行います。
image.png

その後 Cosmos DB に格納されたデータを確認します。

1. Azure ポータル へ接続し、Cosmos DB を選択。
image.png

2.「Data Explorer」を選択し、コレクションを確認。appsettings.json で指定した botstate-db の botstate-collection を選択。
image.png

3. items より users*2f を選択。ドキュメントに user 記憶域のデータがあることを確認。
image.png

4. conversations アイテムも確認。こちらは conversation 記憶域のデータが保存されている。
image.png

5. エミュレーターでも最後の Bot State にある conversation を確認。
image.png

つまり Cosmos DB は BotBuilder で利用する BotState がすべて入っているため、これまでに会話したユーザーの総数や、ユーザーごとの会話の数、最後の会話などを取得できます。

ストレージアカウント

同様にストレージアカウントも確認します。

1. Azure ポータル より、ストレージアカウントを選択。
image.png

2. コンテナーを選択。
image.png

3. transcripts フォルダにチャンネルごとにフォルダがある。今回は emulator を選択。
image.png

4. Conersation ID 後とのフォルダがあるため、任意のものを選択。今回は最後にエミュレータで会話したものを選択。エミュレーターで Conversation ID を確認。
image.png

5. コンテナーも同じ ID を選択。
image.png

6. 一番最後のデータをダウンロードして開く。エミューレーターで得られるデータがそのまま保存されていることを確認。
image.png

Application Insights

Application Insights は既定でテンプレートに入っていないため、手動で追加する必要があります。
様々な方法で追加できますが、詳細は以下記事を参考にしてください。

Bot Builder v4 : Application Insights を駆使した利用状況分析

そのほかにも、App Service またはボットチャンネル登録でも個別に Application Insights を設定でき、それぞれ違う種類のデータが取得可能です。

Transcript を停止する

本番でも会話の詳細を記録したくない場合、blobStorage の設定をすべての構成ファイルから削除してください。Transcript は専用のミドルウェアで記録されますが、接続文字列が無い場合は動作しません。

startup.cs
if (!string.IsNullOrEmpty(settings.BlobStorage.ConnectionString) && !string.IsNullOrEmpty(settings.BlobStorage.Container))
{
    adapter.Use(new TranscriptLoggerMiddleware(new AzureBlobTranscriptStore(settings.BlobStorage.ConnectionString, settings.BlobStorage.Container)));
}
else
{
    Console.WriteLine("The settings of TranscriptLoggerMiddleware is incomplete, please check following settings: settings.BlobStorage.ConnectionString, settings.BlobStorage.Container");
}

まとめ

今回はデータベースにどのような値が格納されるか見ていきました。また開発中でもデータベースを利用する方法も紹介しました。是非お試しください。

目次へ戻る

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0