tl;dr
- botの作成などに webhookにより送られてくるtoken が必要な場合がある
- webhook には外部に公開するサーバーが必要であるが、極力かんたんに webhook を受け取ってみる
- 単に listen するだけでなく、 200 OK を返すだけのサーバーなどは Python を使えば簡単に作ることができた
題材
- LINE の Messaging API の Webhook を題材にします。
- これは、JSON形式のデータが POST で送信されます。
- 今回は LINE 側へ Webhook が受信できると申告できるよう 200 OK を返します。
流れ
- Python で 何を受けても 200 OK を返すようなサーバーを作る
- ngrok で 外部からのアクセスを受け取れる環境を作る
- ngrok に付属している Inspectツールで 受け取った Webhookの中身を見てみる
Python で 何を受けても 200 OK を返すようなサーバーを作る
-
GETやPOSTに応じて振る舞いを変更したいので、 http.server の BaseHTTPRequestHandler を使います。
-
今回は 80 port で listen し, POST を受け取ったら とりあえず 200 OK だけを返すようにします。
import http.server
import socketserver
import json
class MyHandler(http.server.BaseHTTPRequestHandler):
def do_POST(self):
self.send_response(200)
self.end_headers()
with socketserver.TCPServer(("", 80), MyHandler) as httpd:
httpd.serve_forever()
- 作成したら実行しておいてください。
serving at port 80
と表示されていればOKです。
ngrok で 外部からのアクセスを受け取れる環境を作る
- ngrok は ローカルホストを かんたんに インターネットに公開することができるサービスです。
- サインアップしたら 以下のような 画面になるのでガイドに従っていきましょう
Guide |
---|
- コマンドプロンプトで authtoken の登録や http tunnel の起動をしても良いですが、batファイルを使っても便利です。
- ダウンロードした zip を展開すると ngrok.exe があります。
- 同じ場所に 以下のような内容の ファイルを作成します。
auth.bat
ngrok authtoken 1UFVG5sdtzGXXXXXXXXX
80listen.bat
ngrok http 80
- それぞれ ダブルクリックで実行してください。
- auth.bat は一瞬で閉じます。
- 80listen.bat は 以下のようになるはずです。
ngrok |
---|
- このウインドウで表示されている Forwarding 欄の ngrok.io で終わるアドレスが、あなたのアドレスです。
ngrok に付属している Inspectツールで 受け取った Webhookの中身を見てみる
- 試しに 外部からこの ngrok.io のアドレスへ POSTすると
- ngrok の画面 では / へ POST が来たことが表示され
ngrok |
---|
- python 製のサーバーの画面では リクエストの中身が表示されます。
- ブラウザで http://localhost:4040/inspect/http へアクセスするとよりわかりやすく見ることができます。
inspect画面例 |
---|