LoginSignup
13
15

More than 3 years have passed since last update.

ngrok と Python で 単に webhook を受け取ってみる

Last updated at Posted at 2020-01-07

tl;dr

  • botの作成などに webhookにより送られてくるtoken が必要な場合がある
  • webhook には外部に公開するサーバーが必要であるが、極力かんたんに webhook を受け取ってみる
  • 単に listen するだけでなく、 200 OK を返すだけのサーバーなどは Python を使えば簡単に作ることができた

題材

  • LINE の Messaging API の Webhook を題材にします。
  • これは、JSON形式のデータが POST で送信されます。
  • 今回は LINE 側へ Webhook が受信できると申告できるよう 200 OK を返します。

流れ

  1. Python で 何を受けても 200 OK を返すようなサーバーを作る
  2. ngrok で 外部からのアクセスを受け取れる環境を作る
  3. 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 で 外部からのアクセスを受け取れる環境を作る

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
inspect画面例
13
15
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
13
15