はじめに
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を利用するには
以下の折り畳み部分に写真を添付しておきます。
チャンネル作成が終わるとこんな感じに自分が作成したチャンネルが一覧で見える様になります。
確認が完了したら作成したチャンネル内に入ってチャンネル基本設定へ。
そこにある[Channel Secret]と[アクセストークン(ロングターム)]の文字列がある事を確認しておいてください。後々使用します。
始めはアクセストークン欄が空欄なので再発行ボタンを押して発行しておきましょう。
FILE構成
LINE Botのプロジェクトフォルダを以下の様に作成して下さい。
[line-bot]というフォルダ名は任意の名前に変更。
中に入れてあるファイル名は必ず同じにしましょう。
スペルミス等してしまうとHerokuにデプロイの際、エラーを吐きます。
line-bot
├── Procfile
├── requirements.txt
└── main.py
軽いファイル説明
Procfile : プログラムの実行方法を定義
requirements.txt : 開発環境で使用しているモジュールを記載
main.py : LINE Botのメインプログラム
各ファイルの中身
web: python main.py
line-bot-sdk
flask
# -*- 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 CLIをダウンロード
アカウントを作成したらプラットフォーム用のインストーラーHeroku CLIをサイトからダウンロードして下さい。(今回はWindows版)
インストーラーに従ってダウンロードが完了すればターミナルからherokuコマンドが扱えるようになります。
ターミナルから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 open
取り合えず今回はサイトにアクセスして画面がNot Foundになっていれば大丈夫です。
Botの動作確認
LINE Messing APIにあるチャンネル基本設定のBot情報に友達追加のQRコードが載っているので追加しましょう。
何かメッセージを送って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