BEACHSIDE BLOG

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

Botファイル と botFileSecret : デバッグ時の例外 の 対応方法 ( Bot Builder V4 )

9月にフロリダで行われた Microsoft Ignite 2018 で、Bot Builder V4 (正確には v4.0.7 以降が対象)も大きな変更になり、私の過去のBotV4(4.0.1)ブログは無意味な情報になった今日この頃です。

Bot ファイル(拡張子が .bot のファイル)の Secret 関連も、ソースを初見でみただけじゃ分かりにくくなっています。

今回の話は、
Azure のポータルで、Bot Service (Web App Bot)のv4 のを作成した際、
ソースコードをダウンロードしてデバッグするとException が発生してしまう件の原因と対応方法について

です。

Bot Service の作成とダウンロード

ここは手順書きません...が、今回は、Bot Service の Web App Bot で、ボットのテンプレートは、以下を作成したときを前提に話します。

f:id:beachside:20181016140152p:plain


これで、Bot Service のリソースの「ビルド」 > 「zip ファイルをダウンロード」でダウンロードができます。
(手順は書きませんが、そのうち公開するハンズオン資料をリンクさせます。)

f:id:beachside:20181016140342p:plain


デバッグで実行

ダウンロードした zip を解凍して、ソースコードを開き、デバッグしてみましょう。
Startup.cs の ConfigureServices メソッドで Exception が発生します。
エラーメッセージが catch ステートメントで書かれた文字列で原因が分からずですね(ドキュメント読んで理解してから使えよという空気は察しますが...)。
catch ステートメントで Exception を拾って中身を覗いてみましょう。

「シークレットないぜ」って書いてますね。

f:id:beachside:20181016141001p:plain


Bot File と Bot Secret

ざっくり説明すると、Bot Service で作られたソースの .bot ファイルは暗号化されてるので、複合キーが必要です。

今回の Exception は、secretKey (ConfigureServices メソッド内の変数、Configuration 変数から取得するやつ)が必要なのに、それがないことが起因して Exception 吐いてます。
解決には、正しいキーを読み込めばよいわけです。

詳しくは以下の公式ドキュメント(GitHub ですが)に書いてます。

キーの取得

キーは、Bot Service 作成時に勝手に作られて勝手に格納されています。場所は、Web App Bot の App Settings にあります

Azure のポータルで、Web App Bot のリソースを開き、「アプリケーション設定」を開いた中にある「アプリケーション設定」から botFileSecret の値を取得しましょう。

f:id:beachside:20181016141831p:plain


キーのセット

Visual Studio でソリューションエクスプローラーから appsettings.json にシークレットキーを入れるのは、あまりにもい聞けてない気がしますね。
UserSecret に入れましょうか。

プロジェクト名を右クリック > 「ユーザーシークレットの管理」を開きます。

f:id:beachside:20181016142327p:plain


そうすると、secret.json が開かれますので、以下のように入力しましょう。値には、先ほど取得したキーを入力します。

{
  "botFileSecret": "{さっき取得したbotFileSecretの値}"
}

余談ですが、

  • UserSecret の実体は、%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json にあります。
  • パスの <userSecretsId> はアプリが勝手に採番したユニークIDです。

キーの読み込み

ローカルデバッグ時だけ読み込めばよいので、Startup クラスのコンストラクターにそう書きましょう(11行目から13行目の部分)。

これで Bot Builder v4 さんが期待する通りの準備作業って感じになり、正常にデバッグを行うことができます。

終わりに

つまりは、Bot Builder V4 のプロジェクトを Visual Studio から作った時は、.bot ファイルのシークレットを作ったりーを msbot コマンドで作ってーホスト先の AppSettings に書くとかの必要がありそうですね。
そこら辺も今後時間があったら書いていきます。

あーそれ含め、V4 の情報をポチポチとアウトプットできればと思っています。