プログラミングに足を突っ込む30女

プログラミング初心者のmemoと日々の歩み

PythonとHerokuで寂しさを埋めるLINE Botを作った



急にLINE Botが作りたい!と思い立ち、ググりまくって作りました。

どうせ作るのなら使えるものがいい!と思ったものの、
何が使えるのか自分でも分かりません。
ただ一つ、私の話を聞いてほしい…と思ったので、
私の話にただただ相槌を打って聞いてくれる私
を作ることにしました。

そうなんだ とか なるほどね! とか言ってくれるやつです。


LINE Developers登録

普段のLINEアカウントで登録する → LINE Developers

  • 開発者名:ニックネームでもOK
  • 新規プロバイダーを作成:プロバイダーとは、サービス提供者(企業・個人)のこと。開発者名と同じでOK
  • チャネル作成:1つのチャネルが1つのBotを表す。新規チャネルを作成する。


LINE Messaging APIを選択する。

Messaging APIを選択している様子
真ん中を選択する



LINE Messaging APIの登録

  • アプリアイコン画任意
  • アプリ名
  • アプリ説明
  • 大業種 なんでもOK
  • 小業種 なんでもOK
  • メールアドレス
  • プライバシーポリシーURL 任意
  • サービス利用規約URL 任意


登録作成すると、チャネル一覧に新しく追加されているので、選択して設定画面に進む。


※ググっていると、この登録時にプランの選択があるとよく書かれているが、2019年4月からプランが統合されて、フ リープランでプッシュ通知が使えるようになっている。なので、そのままでOK。


LINE Messaging APIの設定

  • 自動応答メッセージ
  • 友達追加時の挨拶


利用するかしないか選択できるので選んでおく。 自動応答メッセージは勝手に返信をしてしまう機能なのでオフ、あいさつもオフにしたが、Botの説明のためにオンにし ておいても良いかなと思った。


LINE機能の利用を設定する画面
▲初期設定では「利用する」になっている


アクセストーク


Herokuに環境変数として設定するので、ここで発行しておく。
失効までの時間は0で。
流出してしまったらすぐに再発行すること。

Webhook送信


必ず、利用するに設定しておく。
Webhook送信でイベントを受け取るので、利用していないとBotとして働かない。

Webhook URL


HerokuのURLを入力するので、今のところは空欄でOK。
こちらも設定しないと動かないので、あとあと出てくるところで必ず設定すること。



Herokuの登録と設定

まずHerokuに登録 or ログインする。
英語だけど、なんとなくで進められる。

ログインしたら、「New」を押すとドロップダウンするので、 「Create new app」で新規アプリを作成。



ログイン後のCreate new app選択画面
Herokuにログイン後、新規アプリを作成する

  • App name : 被ってはいけないなので、オリジナルの名前で登録する。
  • Choose a region : 「United States」でOK


作成したら、Settingのタブから設定画面へ。
Domains and certificatesの箇所にあるURLに/callbackを最後につけたURLを
LINE Messaging APIWebhook 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 Developersで発行したアクセストークンとChannel Secretを設定する。 YOUR_CHANNEL_ACCESS_TOKENにはアクセストーク
YOUR_CHANNEL_SECRETにはChannel Secretを設定する。


heroku config:set YOUR_CHANNEL_ACCESS_TOKEN=○○○○○○○○○○○
heroku config:set YOUR_CHANNEL_SECRET=○○○○○○○○○○○

HerokuのWebサイトのSettingsからも設定は可能。

環境変数設定画面
Reveal Config Varsボタンをクリックすると設定が現れる。



必要なファイルの作成

必要なファイルを先ほど作成したline_botディレクトリ下に作成する。

設定ファイルの作成

Pythonで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
Procfile

実行方法を記載。
動かすPythonファイルを記載。

web: python main.py

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】