4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Python]LineBotを作成する

Last updated at Posted at 2020-03-15

はじめに

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

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?