6

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

[Python]LineBotを作成する

はじめに

HerokuとPythonを使った、おうむ返しするLINE BOTの作成方法についてまとめました。

環境

macOS Mojava

事前準備

Line Developerアカウント登録
Herokuアカウント登録
Homebrewインストール

Line Developer側の設定

チャンネルの作成
・チャンネルの種類は「Messaging API」を選択。
・チャンネル名、チャネル説明等を入力し作成します。

チャネルシークレット、チャネルアクセストークンを確認します。
・lineBot作成にあたり必要になります。
・[チャンネル基本設定]-[チャネルシークレット]
・[Message API設定]-[チャネルアクセストークン]

LINEBOT作成

以下のファイルを作成します。
[フォルダ]
├ main.py     (実行するプログラム)
├ Procfile     (プログラムの実行方法)
├ requirements.txt  (インストールするライブラリ)
├ runtime.txt    (Pythonのバージョン)

main.pyはline-bot-sdk-pythonを元に作成します。

main.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__)

#環境変数取得
LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"]
LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"]

line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_CHANNEL_SECRET)


@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)
Procfile
# Procfile
web: python main.py
requirements.txt
Flask==0.12.2
line-bot-sdk==1.5.0
runtime.txt
python-3.6.6

Herokuにデプロイする

Herokuにアプリを作成し、作成したファイルをデプロイします。
また、LINEのチャネルシークレット、チャネルアクセストークンを環境変数として設定します。

Herokuのインストールします。

brew tap heroku/brew && brew install heroku

Herokuにログインします。

heroku login

作成したファイルがあるフォルダに移動し、アプリを新規作成します。

heroku create アプリ名

作成したファイルをHerokuにデプロイします。

git add .
git commit -m 'First commit'
git push heroku master

Line Developerで作成したチャンネルのチャネルシークレット、チャネルアクセストークンをHerokuの環境変数として設定します。

heroku config:add LINE_CHANNEL_ACCESS_TOKEN=チャネルアクセストークン --app googlecalendar-webhook
heroku config:add LINE_CHANNEL_SECRET=チャネルシークレット --app googlecalendar-webhook

WebHouckを設定する

LineからのメッセージをHerokuで受信できるようにWebHockを設定します。
Line DeveloperのチャンネルでWebHockと応答メッセージの設定を行います。

スクリーンショット 2020-03-11 22.28.23.png

メッセージを受け取った時に、WebHockを使用するように
[LINE公式アカウント機能]-[応答メッセージ]-[編集]から応答設定を変更します。
スクリーンショット 2020-03-11 22.45.25.png

実行

メッセージを送信して同じメッセージが返されたら成功です。
メッセージが返ってこない場合

heroku logs --tail

で、Herokuのログでエラー等が出ているか確認すればいいです。

PUSHメッセージ送信

Herokuから直接Lineにメッセージを送ることができます。
PUSHメッセージはユーザIDを指定することで送信できます。

line_bot_api.push_message(
    ユーザID,
    TextSendMessage(text=メッセージ))

参考

Herokuでサンプルボットを作成する

line-bot-sdk-python

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
6