heroku Python

【Python】HerokuでLineのAPI用のwebhookサーバーを立てる

この記事は約5分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です!

今回はHerokuでLineのAPI用のWebhookサーバーを立てる方法について紹介したいと思います。

 

新規プロジェクトを作成

 

# 新規プロジェクトを作成
$ heroku create

 

作成完了すると適当な単語を組み合わせたプロジェクト名で新規プロジェクトが作成されます。

 

次にプロジェクトに接続します。

# 既存のプロジェクトに接続する
$ heroku git:remote -a <プロジェクト名>

 

次にgit cloneで表示されたgitのURLからリポジトリをクローンしてローカルの作業フォルダを作成します。

 

# ローカルリポジトリを作成する
$ heroku git:clone -a <プロジェクト名>

 

これでローカルにリポジトリが作成されるので、そこに移動します。

 

# 作業ディレクトリを移動する
$ cd <プロジェクト名>

 

Herokuにwebhookサーバーを立てる

 

作業ディレクトリに移動したら、そこに「main.py」[Procfile]「requirements.txt」「runtime.txt」の4つのファイルを作成して配置します。

 

<main.py>

from flask import Flask, request, abort
 
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import os
 
app = Flask(__name__)
 
#環境変数取得
# LINE Developersで設定されているアクセストークンとChannel Secretをを取得し、設定する。
YOUR_CHANNEL_ACCESS_TOKEN = ''
YOUR_CHANNEL_SECRET = ''
 
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
 
 
#Webhookからのリクエストをチェックします。
@app.route("/callback", methods=['POST'])
def callback():
    # リクエストヘッダーから署名検証のための値を取得します。
    signature = request.headers['X-Line-Signature']
 
    # リクエストボディを取得します。
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    print('リクエストボディ',body)
 
    # handle webhook body
# 署名を検証し、問題なければhandleに定義されている関数を呼び出す。
    try:
        handler.handle(body, signature)
# 署名検証で失敗した場合、例外を出す。
    except InvalidSignatureError:
        abort(400)
# handleの処理を終えればOK
    return 'OK'

# ポート番号の設定
if __name__ == "__main__":
#    app.run()
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

 

<requirements.txt>

flake8==3.7.8
Flask==1.1.1
Flask-Devices==0.0.1
Flask-SQLAlchemy==2.4.1
line-bot-sdk==1.5.0

 

<runtime.txt>

python-3.6.5

 

<Procfile>

web: python main.py

 

 

ファイルの置き場所

https://github.com/beginerSE/line_webhook_onHEROKU

 

作成できたらこれを以下のコマンドでHEROKUへデプロイします。

 

# git経由でデプロイする 
git init
git add .
git commit -m "first commit"
git push heroku master

 

 

HEROKUにデプロイができたら、あとはLINEのデベロッパー用サイトにアクセスしてチャンネル設定の

「Webhook settings」のWebhook URLに「https://<プロジェクト名>.herokuapp.com/callback」

を入力してverifyを押すとAPIサーバー側で確認が行われ、レスポンスが確認できるとwebhookサーバーとして設定完了となります。

 

 

 

 

 

コメント

タイトルとURLをコピーしました