BotFramework Emulatorでボットと会話する際、Azure上のボットからの通信は、一旦ngrokクラウドサービスに送信されます。ローカルマシンのngrokプロセスは、ngrokクラウドサービスからその内容を受け取り、その内容をBotFramework Emulatorに転送します。プロキシの内側にあると、ngrokプロセスはngrokクラウドサービスから直接データを取得できません。つまり、ngrokプロセスにプロキシ経由でデータを取得してもらうための設定が必要になります。
現時点(3.5.34)のBotFramework EmulatorのApp Settingsダイアログでは、プロキシを設定できません。このため、システム環境変数にhttp_proxy
を追加するか、ngrok.yml
というngrok設定ファイルにhttp_proxy
という項目を追加するかします。本記事では、環境変数に色々入れたくない方向けに、後者の方法を説明します。
急いでいる人はこれだけ読んで
- 自分のホームディレクトリに
.ngrok2
という名前でディレクトリを作る - その中に
ngrok.yml
という名前でファイルを作る - そのファイルに以下の内容を書いて保存する
http_proxy: "http://ユーザ:パスワード@プロキシホスト名:ポート"
BotFramework Emulator で読み込まれるngrok.yml
の場所
現時点の実装では、ngrokマニュアルの「Default configuration file location」で説明されている、デフォルトの場所のngrok.ymlだけを、ngrokの設定ファイルだと認識します。
つまり、以下の場所となります。
-
~/.ngrok2/ngrok.yml
(Unix系、OSX) -
%HOMEPATH%\.ngrok2\ngrok.yml
(Windows系)
ngrok.exe
などと同じディレクトリにngrok.yml
を作っていくら頑張っても無意味ですので、ご注意を。
ngrok.yml
どころか、.ngrok2
ディレクトリもないんだけど?
ngrokを使い込んでいて有料プランを使っているような人でない限り、.ngrok2
ディレクトリは存在しないはずです。ホームディレクトリに.ngrok2
という名前のディレクトリを作って、その中にngrok.yml
という名前のファイルを作ればいいです。
ただ、それすら面倒だったり、本当にそこがデフォルトなの?と疑わしかったりする場合は、ngrok authtoken .
と実行すると、ngrokがデフォルトと認識している場所にngrok.yml
を作ってくれます。
C:\>ngrok authtoken .
Authtoken saved to configuration file: C:\Users\User/.ngrok2/ngrok.yml
上記の場合、C:\Users\User\.ngrok2\ngrok.yml
が作成され、デフォルトのngrok設定ファイルと認識されるようになります。
生成されたngrok.yml
を開くと、authtoken: .
という文字列が入っています。これは消してください。残っているとngrokでエラーとなります。
ngrok.yml
に書く内容
以下の行を追加します。これだけ。
http_proxy: "http://ユーザ:パスワード@プロキシホスト名:ポート"
現時点でno_proxy
には未対応のようですので、プロキシ内の他のマシンにあるボットをテストする場合は、ngrok.yml
を書き換えて切り替える必要がありそうです。
それでも何かエラーが出てるんだけど?
ここまでの設定で、Azureボットとは会話できるようになっているはずです。それでも赤い文字でエラーが出ているかと思います。
[21:28:42] Checking for new version...
[21:28:43] Command failed: 4294967295 System.AggregateException: (以下略
BotFramework Emulatorが起動するたびに更新がチェックされます。その際、Emulator内部でSquirrelというサードパーティのライブラリを呼び出しています。Squirrelライブラリ単独ではプロキシ設定を行うことができず、BotFramework EmulatorからSquirrelにプロキシ設定を渡す必要があるようですが、それをやってないために発生している模様です。
現状、プロキシ環境下では自動更新を諦め、定期的に配布サイトを確認するしかなさそうです。将来はSquirrel以外の方法での更新を検討しているようです。
参考: Bot Framework-Emulator Auto-Update dose not support authentication proxy #329