python

【python】webhookを受信する方法【→プログラム初心者でもできる!】

10月 23, 2019

how to receive webhook message on python
プログラム女子
チャットBOTってどうやって作るの?
チャットシステムにはwebhookというしくみがあって、それをうまく使いこなせると、プログラムでBOTをコントロールすることができるよ。今回はそのwebhookの使い方を説明するね。
Tommy

pythonでwebhookを受信する概要

summary of receiving webhook message

社内LANなどインターネットから切り離されたネットワークを使っている場合に、外部(インターネット)からイベントを受信したい場合があります。

例えば、チャットシステムのBOTなどのWebhookシステムなどは、チャット送信が一旦インターネット上のサービスで受信され、そこから所望のURLへと転送されるようになっていることが多いです。

ところが、メッセージを受信して処理するシステムが社内ネットワークのみで動作している場合は、このメッセージイベントを受信することができません。

なぜなら、社内ネットワーク(イントラネット)と公共のネットワーク(インターネット)の間には、外部からのアクセスを遮断するファイヤーウォールがあるからです。

そのような場合には、ngrokのトンネリングサービスを利用することができます。

トンネリングサービスとは、社内ネットワークと公共のネットワークをつなぐセッションを社内ネットワーク側から作り、その公共ネットワーク側に受信したデータを、社内ネットワークに取り込むというしくみのことです。

この記事では、トンネリングサービスの代表であるngrokの使い方を説明することによって、webhookを受信する方法を説明します。

pythonでwebhookを受信する前提環境

environment of receiving webhook message

webhookを受信する前提環境は、下の記事で説明している私の環境と同じ環境で確認しています。

オススメ
how to check version in python
【python】バージョン確認の方法【→プログラミング初心者向け】

続きを見る

また、レンタルサーバなどのLinuxサーバを使っている場合は、下の記事でプログラミングする環境の作り方を説明しています。

もし、まだプログラムする環境ができていない方は、先にこちらの記事を読んで、プログラミングできる環境をつくることをおすすめします。

オススメ
how to programming on rental server
レンタルサーバでプログラミングする方法【→ブログのサーバでできる!】

続きを見る

pythonでwebhookを受信する手順

step of receiving webhook message

ngrokのインストール

下記にアクセスしてシステムに応じた実行ファイルをインストールします。

ngrok - secure introspectable tunnels to localhost

ngrokのインストール手順は、

  1. ダウンロード
  2. zip解凍&インストール
  3. アカウントを作って、"Connect your account"を押する

になります。

pythonでwebhookを受信するサンプルプログラム

sample program of receiving webhook message

ここでは、さきほどインストールしたngrokをpythonプログラムから実行して、webhookを受信するサンプルプログラムを説明します。

ライブラリのインポート

import subprocess
import time
import shlex

Linuxコマンドの実行

def exe_linux_command(command):
    tokens = shlex.split(command)
    p = subprocess.Popen(tokens)
    for line in iter(p.stdout.readline,b''):
        print(line.rstrip().decode("utf8"))

    return

ngrokの開始するプログラム

カレントディレクトリの配下の「tools」というディレクトリにngrokをインストールしたとして、ngrokを開始しています。

下のプログラムでは、htttpサーバーのポート4000番を指定しています。

ngrokを開始すると、URLが発行されます。このURLをWebhookで指定するメッセージの転送先に設定することで、webhookからのメッセージを受け取ることができます。

webhookからのメッセージはngrokから発行されたURL宛に送信されますが、送信されるメッセージはHTTPリクエストの形をしています。

また、このURLは公共ネットワーク側にあります。このURLからトネリングした社内ネットワーク側にhttpリクエストを受け取るためのHTTPサーバを立てる必要があります。

「HTTPサーバを立てる方法」に関しては、下記の記事を読んでください。

オススメ
how to build http server on python
【python】HTTPサーバを立てる【→業務改善したい人向け】

続きを見る

def start_ngrok():
    ret = exe_linux_command('/tools/ngrok http 4000')
    print(ret)

ngrokの開始実行処理

if __name__ == '__main__':
	start_ngrok()

-python
-

© 2020 Tommy's blog Powered by AFFINGER5