PythonでLINEボットを作ってみる。
もくじ
概要
GitHubに公開されているLINE公式のソースコードを利用して、オウム返しボットを作成します。
この記事を読み進めるにあたって
この記事は 「LINE developer」でのチャンネル作成とアクセストークンの取得が既に完了している、また Herokuへの登録と「Heroku CLI」が既に導入されている ことを前提とします。
開発環境、使用ツール
開発環境及び主な使用ツールは以下になります。
- Python: ver 3.6.4
- line-bot-sdk: ver 1.5.0
- Vagrant: ver 1.9.1
- CentOS: ver 6.7 (Final)
- PaaS: Heroku
アプリケーションを作る
ディレクトリの作成
アプリケーションに関連するファイルを設置するディレクトリを作成します。
1 | $ mkdir line_bot && cd line_bot |
アプリケーションのメインコードの作成
ソースコードは冒頭でお話した通り、LINEが公式に公開しているソースコードを利用します。
今回はその中から「app_with_handler.py」を選択。
メインコードを作成していくため、新規ファイル「app.py」を作成します。
1 | $ touch app.py |
このファイルがアプリケーションのベースになります。
作成したファイルへ「app_with_handler.py」の内容をコピーします。
その際に if __name__ == "__main__":
内を書き換えるのですが、それは以下にソースコードで示すので確認してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | # -*- 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(debug=True, host='0.0.0.0', port=port) |
Heroku へデプロイをする準備
Heroku用の設定ファイルを作成します。
1 | $ touch Procfile requirements.txt runtime.txt .gitignore |
作成したファイルに設定を定義していきます。
1 | web: python app.py |
1 2 | flask line-bot-sdk |
1 | python-3.6.4 |
※「.gitignore」への追記はありません。
Heroku へアプリケーションをデプロイする
CLIからHerokuへログインし、Herokuアプリケーションを作成後、環境変数を追加します。
1 2 3 4 | $ heroku login $ heroku create line_bot $ heroku config:set LINE_CHANNEL_SECRET=***** $ heroku config:set LINE_CHANNEL_ACCESS_TOKEN=***** |
アプリケーションをHerokuへデプロイします。
1 2 3 4 | $ git init $ git add . $ git commit -m 'first commit.' $ git push heroku master |
LINE developer の設定
「LINE developer」の管理画面からチャンネルの詳細ページへ遷移し「Webhookの設定」を行います。
「Webhookの送信」の値を「利用する」に変更、「Webhook URL」には「今回作成したHerokuアプリケーション名.herokuapp.com/callback」を入力します。

あとは、チャンネルの詳細ページにある「QR コード」からを今回作ったチャンネルを友達追加します。

おわり
思いの外簡単にボットを作ることができました。
今回のアプリケーションはオウム返ししか出来ませんが、プッシュ通知や文字列解析なども入れるとボットならでは良さが楽しめます。
それはまたの機会に。
こちらからは以上です。
参考記事
- HerokuでLINE BOT(python)を動かしてみた – Qiita
- LINE Messaging API + Python + Heroku でLINE Botを作る – Hello Wor.log
- docs – Flask
[…] Python を使ってオウム返し「LINE ボット」を作ってみる […]
[…] Python を使ってオウム返し「LINE ボット」を作ってみる […]