Corradeボット入門その1とその2では、インワールドからボットにインスタントメッセージを送る方法でボットに命令していました。チャットボットやスマートスピーカーなど、クラウドサービスを経由してボットを動作させるには至極不便です。
というわけで、結局、CorradeボットのHTTPインターフェースを有効化して、HTTPサーバーとして動作するようにしてしまいます。そして、ngrokを使って、インターネット上からCorrade関連のポートにアクセスできるようにします。
CorradeボットをHTTPサーバー化する
Corrade.iniの編集
Corradeのマニュアルには、Corrade.ini
ファイルを直接変更する方法が紹介されています。
<httpserver>true</httpserver>
<httpserverprefix>http://+:8080/</httpserverprefix>
Configurator.exeを使う場合は、HTTP
タブのServer
項目のEnabled
チェックボックスにチェックを入れて、上書き保存します。
2体以上ボットを動かす予定がある場合は、ポート番号を被らない値に変更してください。
HTTPSにしたい!という方は、ここを見て頑張ってください。
テスト
ローカルホストで、cURLやPostmanなどでコマンドを発行してみます。IMでコマンドを発行するのと全く同じ構文です。試しに、その2の「地面に座る」と「立ち上がる」をやってみましょう。
「Corradeボットをインターネットに公開する」でngrokの設定を行うと、ファイアウォールの設定を変更することなく、Corradeサーバーにアクセスできるようになります。ngrok設定前に、別のPCでテストする場合は、お使いのOSに応じて、Corradeポート(デフォルトでは
8080
)への外部からの通信を許可する必要があります。
地面に座る
curl -X POST \
http://<ホスト>:<ポート>/ \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'command=relax&group=<グループのUUID>&password=<グループのパスワード>'
Postmanの場合、以下のような感じです。
成功すると、以下のような内容でHTTP 200レスポンスが返ります。その1やその2の時よりも若干早く、スッと座ってくれます。
group=<グループ名>&command=relax&success=True&time=<タイムスタンプ>
立ち上がる
curl -X POST \
http://<ホスト>:<ポート>/ \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'command=stand&group=<グループのUUID>&password=<グループのパスワード>'
成功すると、以下のような内容でHTTP 200レスポンスが返ります。
group=<グループ名>&command=stand&success=True&time=<タイムスタンプ>
Corradeボットをインターネットに公開する
ngrokの設定
https://ngrok.com からバイナリをダウンロードして、アーカイブを展開して、適当な場所に配置します。
Windowsの場合、ngrok.exe
を配置したフォルダで、ngrokを実行します。以下は、ポート8080の場合の実行例です。
ngrok http 8080
うまくいくと、画面が切り替わり、アドレスが振られます。
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Version 2.2.8
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://a1d1acee.ngrok.io -> localhost:8080
Forwarding https://a1d1acee.ngrok.io -> localhost:8080
Connections ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
上記の場合、振られたアドレスはhttp://a1d1acee.ngrok.io
です。
プロキシ環境などで利用している場合は、そもそもngrokを使って良いか規程を十分に確認の上、「これで無駄な社内手続きともおさらばできる!?ngrokを使って超簡単に公開サーバを手に入れる」記事等を参考に設定してください。ngrokを使っていたことが後からバレて余計に面倒なことになっても、筆者は責任を負いません。
テスト
先ほどのURLの部分を、振られたアドレスに変更するだけです。ポート番号は不要です。
curl -X POST \
http://<振られたアドレス>.ngrok.io/ \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'command=relax&group=<グループのUUID>&password=<グループのパスワード>'
毎回同じアドレスにしたい場合は?
書き始めたら長くなってしまったので、記事を分けました。「ngrokで常に同じアドレスを使う方法(2017年12月版)」を見てください。課金が必要です。
ngrokもサービス化したいんだけど?
ngrok linkにサービス化コマンドが用意されているようですが、完全に商用サービスとなっていて、筆者は手を出せません。NSSMなどを使って、自分でWindowsサービス化する必要があります。