PythonとHerokuで寂しさを埋めるLINE Botを作った
急にLINE Botが作りたい!と思い立ち、ググりまくって作りました。
どうせ作るのなら使えるものがいい!と思ったものの、
何が使えるのか自分でも分かりません。
ただ一つ、私の話を聞いてほしい…と思ったので、
私の話にただただ相槌を打って聞いてくれる私
を作ることにしました。
そうなんだ とか なるほどね! とか言ってくれるやつです。
LINE Developers登録
普段のLINEアカウントで登録する → LINE Developers
- 開発者名:ニックネームでもOK
- 新規プロバイダーを作成:プロバイダーとは、サービス提供者(企業・個人)のこと。開発者名と同じでOK
- チャネル作成:1つのチャネルが1つのBotを表す。新規チャネルを作成する。
LINE Messaging APIを選択する。
LINE Messaging APIの登録
登録作成すると、チャネル一覧に新しく追加されているので、選択して設定画面に進む。
※ググっていると、この登録時にプランの選択があるとよく書かれているが、2019年4月からプランが統合されて、フ リープランでプッシュ通知が使えるようになっている。なので、そのままでOK。
LINE Messaging APIの設定
- 自動応答メッセージ
- 友達追加時の挨拶
利用するかしないか選択できるので選んでおく。 自動応答メッセージは勝手に返信をしてしまう機能なのでオフ、あいさつもオフにしたが、Botの説明のためにオンにし ておいても良いかなと思った。
Webhook送信
必ず、利用するに設定しておく。
Webhook送信でイベントを受け取るので、利用していないとBotとして働かない。
Webhook URL
HerokuのURLを入力するので、今のところは空欄でOK。
こちらも設定しないと動かないので、あとあと出てくるところで必ず設定すること。
Herokuの登録と設定
まずHerokuに登録 or ログインする。
英語だけど、なんとなくで進められる。
ログインしたら、「New」を押すとドロップダウンするので、 「Create new app」で新規アプリを作成。
- App name : 被ってはいけないなので、オリジナルの名前で登録する。
- Choose a region : 「United States」でOK
作成したら、Settingのタブから設定画面へ。
Domains and certificatesの箇所にあるURLに/callbackを最後につけたURLを
LINE Messaging APIのWebhook URLに入力しておく。
https://○○○.herokuapp.com/callback となる。○○○の中には、先ほど設定した「App name」が入る。
ローカルでgitにpushするために
ターミナルで操作するため、
Herokuコマンドとgitコマンドがインストールされていない場合はインストールから始める。
インストールできているかどうかは、バージョンを確認するコマンドで。
$ heroku -v $ git --version
インストールのコマンドは
$ brew install heroku $ brew install git
インストールしたら初期設定が必要。
ユーザ名とメールアドレスを設定しておく。
ユーザ名は自由に設定する。
$ git config --global user.name "ユーザー名" $ git config --global user.email "メールアドレス"
次に、作業を行うディレクトリ(フォルダ)をローカルに作成する。
ターミナルから行わなくてもOK。
$ mkdir line_bot
作成できたら、ターミナルでこのディレクトリの中に入る。
$ cd line_bot
ローカルでHerokuにログイン
$ Heroku login --interactive
で登録メールアドレスとパスワードを聞かれるので、入力する。
--interactiveオプションをつけることによって、ターミナルでログインができる。
つけないと、ブラウザからWebサイトに接続される。
Enter your Heroku credentials: Email: ○○@○○○○ Password: *********
二回目からはEmailアドレスは自動で入るので、enterキーを押すだけで良い。
以下の文字が出てきたらログイン成功。
Logged in as ○○@○○○○
git initとリモートリポジトリ設定
まずはgitの初期ファイルを作る。
$ git init
リモートの設定をする。
$ heroic git:remote -a アプリ名
必要なファイルの作成
必要なファイルを先ほど作成したline_botディレクトリ下に作成する。
設定ファイルの作成
runtime.txt
Pythonのバージョンを記載する▼
python-3.6.8
HerokuでサポートされているPythonバージョンを使う。
サポート情報は → Heroku Python Support
requirements.txt
importするライブラリを記載。
ここへ書いておけば、自動的にHerokuへインストールしてくれる。
Flask==0.12.2 line-bot-sdk==1.8.0
Pythonファイルの作成
main.py
# ライブラリ from flask import Flask, request, abort from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( FollowEvent, MessageEvent, TextMessage, TextSendMessage, ImageMessage, ImageSendMessage, TemplateSendMessage, ButtonsTemplate, PostbackTemplateAction, MessageTemplateAction, URITemplateAction ) import os import random # フレームワーク(Flask) app = Flask(__name__) #LINE Access Token YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"] #LINE Channel Secret YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"] line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN) handler = WebhookHandler(YOUR_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 handle_message(event): kyoukans = ["わかるー!", "確かにそうだね", "それめっちゃわかるわ…", "いいと思う!!", "それでそれで!?", "まじかー", "さすが!", "絶対そう", "うん、君が正しい", "うんうん", "やば", "面白い", "草生えるわ","爆笑", "なるほどなー"] kyoukan = random.choice(kyoukans) line_bot_api.reply_message( event.reply_token,TextSendMessage(text= kyoukan) )
kyoukansリストの中から、ランダムに返すだけのBot。
リストの中には、自分が言われたい言葉を山ほど入れよう。
git push
ファイルを作成したら、いよいよファイルをアップロードする。
再びターミナルを操作する。
$ git add . $ git commit -m “コメント” $ git push heroku master
コメントの中は自由。
分かりやすいコメントを入れておく。
これで動くはず。
動かない場合(既読スルーになる)
疑うところ。
- Channel Secretとアクセストークンは正しいか。
- Webhook URLは正しいか。接続確認もしてみる。
- gitのユーザ名とメールアドレスは設定しているか。
- 設定ファイルに記述ミスはないか。
- requirements.txtに必要のないライブラリが記載されていないか。
作ってみた感想
自分が欲しい言葉をくれるから嬉しい。
が、余計に寂しい。
リストの中に"草生えるわ","爆笑"を入れたせいで、
「人生しんどいよねー」と送った時に
「爆笑」と返ってきたのでイラっとした。
次はプッシュ通知も使って何か作ってみたい。
参考にさせていただきました▼
【初心者向け】PythonによるHeroku環境で簡単LINEBot開発 | 技術ブログ | MIYABI Lab
というか複雑なBotを作れる人以外は、
プログラミングが出来なくてもLINE Botを作れるサービスもあるようなので、それで作ってもいいかも。
これとか → LINE@運用ツール【Poster】