LoginSignup
2
1

More than 5 years have passed since last update.

BotFramework Emulatorでプロキシを超える方法

Last updated at Posted at 2017-12-18

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という項目を追加するかします。本記事では、環境変数に色々入れたくない方向けに、後者の方法を説明します。

急いでいる人はこれだけ読んで

  1. 自分のホームディレクトリに.ngrok2という名前でディレクトリを作る
  2. その中にngrok.ymlという名前でファイルを作る
  3. そのファイルに以下の内容を書いて保存する
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

2
1
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
2
1