LoginSignup
4
11

More than 3 years have passed since last update.

Python + Flask + HerokuでLINE BOT

Posted at

LINE BOTの概要

送信した内容をそっくりそのままおうむ返しするBot
今後はこのアプリを改良して面白いBotに成長させることが目標です

作成の流れ

  1. Herokuアカウント作成
  2. Herokuアプリの新規作成
  3. Line developers登録
  4. Webhook設定
  5. 必要なファイル作成
  6. デプロイ

Herokuアカウント作成方法

  1. freeアカウント登録フォームへアクセスする
  2. 必須項目を入力する
  3. I'm not a robotをクリックする
  4. CREATE FREE ACCOUNTをクリックする
  5. 届いたメールを確認し、activate your accountのURLをクリックする
  6. 英数字+記号でパスワードを作成する

問題なければアカウント作成に成功しダッシュボード画面に切り替わると思います。

Herokuアプリの新規作成

コマンドラインから作成する方法もあるので、ブラウザから作りたい人向けです。
作成したLINE BOTをデプロイさせるためのアプリを作成します。

  1. ダッシュボード画面にてCreate New Appをクリックする
  2. アプリ名とリージョンを選択する
  3. Create appをクリックする

画面右上のOpen appボタンをクリックするとアプリのURLにアクセスできるので、linebotを作成する際のwebhook設定で必要になるのでメモなどしておく

Herokuコマンドラインツールを導入する(Mac)

$ brew install heroku/brew/heroku

Line developers登録

LINE Developersに登録する
チャンネルの作成手順は割愛する

Webhook設定

チャンネルの管理画面からWebhookの設定をする。

Webhook送信:利用する

Webhook URL:https://Herokuアプリの新規作成で作ったアプリケーション名.herokuapp.com/callback

必要なファイル作成

以下4つのファイルを作成する

ファイル名 役割
Procfile Herokuでアプリケーションをデプロイした際に最初に実行されるコマンドを記述する
app.py Pythonソースコードを記述する
requirements.txt インストールするライブラリを記載する
runtime.txt Pythonのバージョンを記載する
# あらかじめGitリポジトリを作成しておいたのでcloneする
$ git clone <自分のリポジトリURL>

# 仮定義としてディレクトリ名はlinebot-appとする
$ cd linebot-app

$ touch Procfile
$ touch app.py
$ touch requirements.txt
$ touch runtime.txt

########## フィアル修正作業 ##########

$ git add .
$ git commit -m "適当なコミットコメント"

各種ファイルの中身

Procfile
web: python app.py
app.py
from flask import Flask, request, abort
import os

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

#環境変数取得
ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(ACCESS_TOKEN)
handler = WebhookHandler(SECRET)

@app.route("/")
def hello_world():
    return "hello world!"

@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))

if __name__ == "__main__":
#    app.run()
    port = int(os.getenv("PORT"))
    app.run(host="0.0.0.0", port=port)
requirements.txt
Flask==1.0.2
line-bot-sdk==1.8.0
runtime.txt
python-3.7.2

デプロイ

Heroku環境変数

ソースコードにはaccess_tokenやchannel_secretを直書きしないので環境変数を設定しておく必要がある

# Herokuにログイン(手元の環境ではブラウザが立ち上がりボタンクリックでログインとなった)
$ heroku login

# 変数の設定
$ heroku config:set YOUR_CHANNEL_SECRET="channel_secret" --app <Herokuアプリの新規作成で作ったアプリケーション名>
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークン" --app <Herokuアプリの新規作成で作ったアプリケーション名>

# 設定の確認
$ heroku config --app <Herokuアプリの新規作成で作ったアプリケーション名>

HerokuのGitリポジトリにソースコードを展開する

$ heroku git:remote -a flask-linebot
$ git push heroku master

動作確認

$ heroku open

これでHello Worldと表示されればデプロイ完了。
あとは作成したLINEbotをチャンネルの管理画面に表示されているQRコードから友達登録する
そこに向けてメッセージを送信するとレスポンスがある。

参考

書籍

Python+LINEで作る人工知能開発入門Flask+LINEMessagingAPIでの人工知能LINEボットの作り方

Qiita

4
11
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
4
11