LoginSignup
12
18

More than 3 years have passed since last update.

LINE BotをPython + Heroku + LINE Messaging APIで作成した備忘録

Last updated at Posted at 2019-10-18

はじめに

LINE BotをPythonで作成しようと記事を漁った際、開発環境をWindowsで行っている記事が少なかったんですよね。せっかくなので軽くまとめて記述させていただきます。

今回はLINE Botの中身をHerokuからデプロイしておうむ返しが出来るようになるまで。

開発環境

・Windows 10 Home
・Python 3.7.4
・Git 2.17.1

LINE messaging APIのチャンネル作成

始めに開発者としてLINE developersへ登録しましょう。
その後LINE Messaging APIのチャンネルを作成して使用できるようにします

LINEの公式ページ通りに進めれば大丈夫です。
LINE公式ページ Messaging APIを利用するには

以下の折り畳み部分に写真を添付しておきます。

LINE公式 チャンネルの作成手順LINE公式

remi_app
チャンネル作成が終わるとこんな感じに自分が作成したチャンネルが一覧で見える様になります。

確認が完了したら作成したチャンネル内に入ってチャンネル基本設定へ。
そこにある[Channel Secret]と[アクセストークン(ロングターム)]の文字列がある事を確認しておいてください。後々使用します。
始めはアクセストークン欄が空欄なので再発行ボタンを押して発行しておきましょう。

FILE構成

LINE Botのプロジェクトフォルダを以下の様に作成して下さい。

[line-bot]というフォルダ名は任意の名前に変更。
中に入れてあるファイル名は必ず同じにしましょう。
スペルミス等してしまうとHerokuにデプロイの際、エラーを吐きます。

line-bot
  ├── Procfile
  ├── requirements.txt
  └── main.py

軽いファイル説明

Procfile : プログラムの実行方法を定義
requirements.txt : 開発環境で使用しているモジュールを記載
main.py : LINE Botのメインプログラム

各ファイルの中身

Procfile
web: python main.py
requirements.txt
line-bot-sdk

flask
main.py
# -*- coding: utf-8 -*-

#  Licensed under the Apache License, Version 2.0 (the "License"); you may
#  not use this file except in compliance with the License. You may obtain
#  a copy of the License at
#
#       https://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
#  License for the specific language governing permissions and limitations
#  under the License.

import os
import sys
from argparse import ArgumentParser

from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

# get channel_secret and channel_access_token from your environment variable
channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)
if channel_secret is None:
    print('Specify LINE_CHANNEL_SECRET as environment variable.')
    sys.exit(1)
if channel_access_token is None:
    print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')
    sys.exit(1)

line_bot_api = LineBotApi(channel_access_token)
handler = WebhookHandler(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 message_text(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text)
    )


if __name__ == "__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

gitリポジトリの作成

$ git init

$ git add .

$ git commit -m "create new"

もしgitを初めて使用したなら

$ git initを行った後にgitの名前とメールアドレスの設定をしましょう。
今回初めてgitを導入した場合、gitの設定が完了していない為に詰まる人が出てくる可能性もあるので一応記述しておきます。

$ git config user.name "名前"

$ git config user.email メールアドレス

無事に設定が出来たら$ git add .から続けて実行していきましょう。

Herokuアカウントを作成

Herokuの公式サイトから入って手順通りにアカウントの登録を行いましょう。

heroku_login

Heroku CLIをダウンロード

アカウントを作成したらプラットフォーム用のインストーラーHeroku CLIをサイトからダウンロードして下さい。(今回はWindows版)

インストーラーに従ってダウンロードが完了すればターミナルからherokuコマンドが扱えるようになります。

heroku_cli

ターミナルからHerokuにログイン

LINE Bot開発用のルートディレクトリに移動してログインしましょう。

$ heroku login

heroku: Press any key to open up the browser to login or q to exit:

キーの入力を求められるのでEnterを押します。

そのまま少し待っていると自動的にHerokuの公式サイトへ飛ぶので先ほど作成したアカウントでログインしましょう。
Herokuにlogin出来るとターミナルに以下の様な文が出てくるので表示の確認が出来たらログイン成功です。

Opening browser to https://cli-auth.heroku.com/auth/browser/XXXX
Logging in... done
Logged in as XXXX@XXXX

Herokuにデプロイしよう

Herokuのアプリケーションを作成。

[APP_NAME]部分は自分の好きなアプリ名を付けましょう。

$ heroku create APP_NAME

Creating ● APP_NAME... done
https://APP_NAME.herokuapp.com/ | https://git.heroku.com/APP_NAME.git

Herokuアプリ内の環境変数を設定

一番始めに行ったLINE Messaging APIのチャンネルを作成した際に確認した[Channel Secret]と[アクセストークン]の文字列を設定しましょう。

$ heroku config:set LINE_CHANNEL_SECRET="Channel Secret" --app APP_NAME

$ heroku config:set LINE_CHANNEL_ACCESS_TOKEN="アクセストークン" --app APP_NAME

Herokuにpushする

$ git push heroku master

LINE Bot側のWebhook設定を忘れずに

最後にLINE Bot側にWebhook URLの指定をします。
LINE Messaging APIのChannel基本設定のWebhook URLにHerokuにデプロイしたアプリケーションのURLを記入

https://APP_NAME.herokuapp.com/callback

その他Webhook設定
Webhook送信:利用する
Botのグループトーク参加:利用しない
自動応答メッセージ:利用しない
友だち追加時あいさつ:利用しない

heroku_login

ページを開いてみる

デプロイが出来たら以下のコマンドを打ち込めばブラウザが開きます。

$ heroku open

取り合えず今回はサイトにアクセスして画面がNot Foundになっていれば大丈夫です。

Botの動作確認

LINE Messing APIにあるチャンネル基本設定のBot情報に友達追加のQRコードが載っているので追加しましょう。

何かメッセージを送ってBotがおうむ返ししたら成功です。
お疲れさまでした。

remi_app_bot



上手くいかない場合

取り合えずログを見る

$ heroku logs --tail

設定が合っているか一度確認しましょう

$ heroku config --app APP_NAME


あまりにも上手くいかない場合はHerokuのアプリを再度作成してやってみると良いかもしれません。

Herokuのアプリを削除する際は以下の通り

$ heroku apps:destroy --app APP_NAME --confirm APP_NAME

参考

以下のサイトを参考にさせていただきました。

HerokuでLINE BOT(python)を動かしてみた - @akabei

Python + HerokuでLINE BOTを作ってみた - @shimajiri

LINE Messaging API を使ってLINEにメッセージ送信/メッセージ返信する - @fkooo

12
18
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
12
18