こんにちは、MSKです。
今回は、Lineボットを使うための登録から解説して、PythonとFlaskを使ってよくあるオウム返しを作ります。
使用する環境
- サーバーサイドはPython+Flask
- サーバーは無料で使えるのでHeroku
Line Developerに登録
Line Botを使うためにLine Developerに登録します。
Line Developerに登録するとLineを使用した開発を行うことができるみたいです。

Line Developerのページを開き、ログインボタンをクリックします。

LINEアカウントでログインします。
普段使っているアカウントのメールアドレスとパスワードで、ログインします。
ログインできましたら、開発者名とメールアドレスを登録するとLine Developerへの登録は完了です。
プロバイダーとチャンネルの作成
Line Developerへの登録が終わるとプロバイダー(作成するLine Botの提供元)を作成します。
提供元の名前を入力します。
1つのLine Botに対応するチャンネルを作成します。
新規チャンネル作成ボタンを押します。

今回はBotを作成するのでMessaging APIを使用します。
Messaging APIは以下のことができます。(公式サイト参考)
- 応答メッセージを送る
- プッシュメッセージを送る
- テキストやスタンプなどのメッセージを送る
- ラインビーコンを使う(個人的には興味ある内容です)
- ユーザーが送ったコンテンツを取得する

チャンネル名やチャンネル説明を入力し、大業種・小業種を選択、メールアドレスを入力します。
利用規約に同意できるのでしたら、利用規約にチェックを入れて作成ボタンを押します。

Herokuへの登録とアプリの作成
Herokuへの登録
Herokuに登録を行います。
次の画面になりますので必要な項目を入力してCREATE FREE ACCOUNTをクリックします。

Herokuから「Confirm your account on Heroku」というメールが来ますので、メール本文にあるURLをクリックします。
クリックすると次の画面になりますので、パスワードを入力します。

パスワードを設定すると登録は完了です。

アプリの登録
トップページから「Create new app」をクリックします。
次の画面が出てきますので、小文字・数字・ハイフンを使って名前を付けます。

「Create app」をクリックするとアプリの登録ができます。
Heroku Cliのインストール
このページからHeroku Cliのインストーラーをダウンロードします。
インストーラーを起動したらデフォルトの設定のままインストールを行います。
インストールが終わったら次のコマンドを打ってバージョンが返ってきたら正常にインストールができています。
heroku --version
PythonでLineBotプログラムを書く
プログラムを書く
app.pyを作成します。
ソースは公式のSDKを参考にします。
# ライブラリをインポート
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage
)
import os
#Flaskを準備
app = Flask(__name__)
#環境変数からLINE Access Tokenを設定
LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"]
#環境変数からLINE Channel Secretを設定
LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"]
#LineBotApiのインスタンスを生成
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
#WebhookHandlerのインスタンスを生成
webhook_handler = WebhookHandler(LINE_CHANNEL_SECRET)
@app.route("/callback", methods=['POST'])
def callback():
# HTTPリクエストヘッダからX-Line-Signatureを取り出す
signature = request.headers['X-Line-Signature']
#テキストでpostされたデータを取得
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# webhookのbodyを解析する
#この結果はadd関数で受け取る
#なお、Signatureが一致していない時はInvalidSignatureError例外が発生する
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
# MessageEvent
@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()
設定ファイルを準備する
必要な設定ファイルを準備します。
必要なファイルは以下になります。
- runtime.txt : 使用するPythonのバージョンを記入します。
- requirements.txt : インストールするライブラリを記入します。
- Procfile : プログラムの実行方法を記入します。
※僕はProcfileの先頭のPを小文字にしていたので、正しく動かず、かなり悩みました・・・
runtime.txtは以下のように記入します。
python-3.7.6
requirements.txtは以下のように記入しました。
click==7.1.1 Flask==1.1.1 gunicorn==20.0.4 itsdangerous==1.1.0 Jinja2==2.11.1 MarkupSafe==1.1.1 Werkzeug==1.0.0 line-bot-sdk==1.8.0
Procfileは以下のように記入しています。
web: gunicorn app:app --log-file=-
runtime.txt、requirements.txt、Procfileはapp.pyと同じディレクトリに入れます。
Herokuにデプロイする
Heroku Cliでherokuにログインします。
heroku login
次のように聞かれるのでq以外のキーを押します。
heroku: Press any key to open up the browser to login or q to exit:
キーを押すとブラウザが立ち上がって、次の画面になりますので「Log In」を押します。

次の画面になり、コマンドプロンプト上に「Logged in as xxxxxx@xxxxx」となっていたらログイン成功です。

デプロイはgit経由で行うので、gitへの登録を行います。
リモートリポジトリはHerokuで登録したアプリのsettingタブのApp Informationから確認できます。
git init git remote add heroku https://git.heroku.com/xxxxxxxxxx.git git add . git commit -m "first commit" git push heroku master
登録したHerokuのアプリのOverviewの画面で「build successed」が確認できればデプロイ成功です。

実際に作成したbotで動作確認をしてみます。

おわりに
作成してみてLineBotはUIを作る必要がないため、簡単に面白いことができそうだと感じました。
今回はオウム返しなので、あまり面白くはないですね。
次はLineBotでできることをもう少し増やしてみたいと思います。
以上、「LineボットをPythonで使ってみよう!」でした。
最後までご覧頂き、ありがとうございました。
