こんにちは、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で使ってみよう!」でした。
最後までご覧頂き、ありがとうございました。