見出し図

追伸。そろそろおまえもLINE Botを作るように。 母より

はじめに

初めまして、ITに興味がある大学生です。
LINE Botが簡単に作れるという記事をいくつか見かけて、「よっしゃ、作ってみよう!」と頑張ってみたのですが、わかりにくい部分が多々あり、苦労しました。そこで、過去の自分がわかりやすいと感じるレベルにまとめました。

概要

この記事を読みながら勉強していけば、下の画像のようなオウム返しBotを作れるようになります。

流れはとっても簡単です。下の画像を参考にして下さい。
①LINEから文字をHerokuに送信
②HerokuでPythonで書かれたコードを実行する
(コードの処理は、文字を取得し、そのまま返信するだけ)
③文字を返信する

Herokuなどの用語については記事の中で解説するので安心して下さい

全体の流れ

【ステップ1】Messaging APIの登録&設定
【ステップ2】Herokuの登録&設定
【ステップ3】コーディング

【ステップ1】 Messaging APIの登録&設定

Messaging APIは、LINEが提供するサービスです。
このMessaging APIを使うことで、ユーザーにメッセージを送れるBotを作ることができます。
Messaging APIを使ってボットを作成するには、以下の手順に従います。
1-1. チャネルを作成する
1-2. ボットの設定をする

1-1. チャネルを作成する

①LINE Developersにログインする
LINEアカウントへのログインに利用しているメールアドレスとパスワードまたはログイン画面に表示されるQRコードを使って、LINE Developersにログインします。

②開発者として登録します(初回ログイン時のみ)
名前とメールアドレスを入力して、LINE Developersコンソールで開発者アカウントを作成します。

③新規プロバイダーを作成する
プロバイダー名を入力します。プロバイダーとは、アプリを提供する組織のことです。ご自分の名前や企業名を入力してください。

④Messaging APIのチャネルを作成する
チャネルに必要な情報を入力します。「LINE」またはそれに類する文字列をチャネル名に含めることはできません。
プランはどちらでも構いませんが、私はフリーにしました。

⑤確認する
チャネルが作成されたことを確認します。

これでボット用のチャネルが作成されました。続いて、ボットの設定をします

1-2. ボットの設定をする

①チャネルアクセストークンを発行する
チャネルアクセストークンは長期間有効なアクセストークンで、APIを呼び出すときにAuthorizationヘッダーに設定する必要があります。チャネルアクセストークンはいつでも再発行できます。

失効までの時間は0のままで、再発行を押してください

②Webhook 送信を「利用する」に変更する
Webhook送信では、友だち追加やユーザーからのメッセージ送信などのイベントが発生した際に、Webhook URLでリクエストを受信するか否かを設定するので、必ず「利用する」を選択してください。
これが利用しないとなっていると、リクエストを受信できずになんの反応もない既読スルーなBotになってしまうので気をつけてください。

・Webhook URL
Webhook URLには、LINE Platformからのリクエストを受信するURLを設定します。あとで設定するHerokuのURLをここに入力します。そのため、ここはまだ空欄で構いません

③「自動応答メッセージ」と「友達追加時のあいさつ」を"利用しない"に変更する
自動応答メッセージとは、コメントに対して自動的に返信を返す機能です。
友達追加時あいさつは、初回の友達追加時にコメントを送る機能です。
どちらも必要ないので利用しません。

④あとで必要になる情報をメモしておく
下記の2つの情報があとで必要になるので、メモしておいて下さい
・Channel Secret
・アクセストークン

【ステップ2】Herokuの登録&設定

herokuってなんだ?って人は下記のサイトがわかりやすいので、目を通してみてください。
一言で言えば、アプリケーションを公開するための環境を無料で借りれるサービスです

①Herokuの登録
まずは、下記のサイトから登録をして、Herokuにログインしてください。

②新規アプリを作成

アプリ名は、他人と被らないように決めてください

③LINE Messaging APIのWebhook URLの設定
SettingのDomainに書かれているURLに/callbackをつけたURLをLINE Messaging APIのWebhook URLに入力しておいてください。

【ステップ3】コーディング

⓪事前準備(プログラミングを全くしたことない方へ)
テキストエディタは、パソコン上でプログラムを書くことのできるソフトです。既に何かしらのエディタを使っている人は飛ばしてください。
プログラミング初めてで、エディタってなんだ?って人は、下記のサイトでSublime Textをインストールしてください

①設定ファイルの作成
オウム返しBOTを開発するときに必要な設定ファイルは3つあります。
・runtime.txt:Pythonのバージョンを記載
・requirements.txt:インストールするライブラリを記載
・Procfile:プログラムの実行方法を記載

runtime.txt
runtime.txtは、Pythonのバージョンを記載するテキストファイルです。
そのため、runtime.txtの中に記載されているのは以下の1行だけです。
python-3.6.6
requirements.txt
requirements.txtは、インストールするライブラリを記載するテキストファイルです。
importするライブラリはバージョンとともにここに記載しておきましょう。
そうすると、デプロイした際に自動的にHerokuへインストールを行なってくれます。
今回は以下の2行を記載します。
Flask==0.12.2
line-bot-sdk==1.8.0
Procfile
Procfileには、プログラムの実行方法を記載します。
今回は、main.pyというpythonファイルを動かしたいので以下のように記載します。
web: python main.py

まずはデスクトップ上に、line-bot-testという名前のフォルダを作成してください。

line-bot-testのフォルダの中に、下記の3つの設定ファイルを作成して下さい。
・runtime.txt:Pythonのバージョンを記載
・requirements.txt:インストールするライブラリを記載
・Procfile(拡張子なし):プログラムの実行方法を記載
⚠︎Procfileは拡張子がないことに注意して下さい(僕はここでうまくいきませんでした)

②Pythonファイル(main.py)の作成
公式で公開しているLINE BOTのサンプル(Flask Echo)を使わせていただきます。
引用先はこちらです。

Sublime Textを起動して下さい(エディタはなんでも大丈夫です)
以下のコードをコピペして、main.pyという名前で保存して下さい
保存先は、line-bot-testです。

# インポートするライブラリ
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
# 軽量なウェブアプリケーションフレームワーク: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"]
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_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'
# 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__":
   port = int(os.getenv("PORT"))
   app.run(host="0.0.0.0", port=port)


③herokuコマンドとgitコマンドをインストール
Herokuとgitをローカルのターミナルから操作したいので、あらかじめherokuコマンドgitコマンドをインストールします。
下記のコマンドを1行ずつ、ターミナルに打ち込んで下さい

brew install heroku
brew install git

④Herokuにログイン
ここでは、Herokuに登録した際のメールアドレスとパスワードを入力してください。

heroku login
heroku: Enter your login credentials
Email [********@gmail.com]: 
Password: *****************

以下のように出たらログイン成功です。

Logged in as ********@gmail.com

エラーが出た場合は、パスワードなどが間違えていないか確認しましょう。

⑤ローカルで作成したファイルをHerokuに移行する
はじめにターミナルに下記のコードを打ち込んで、line-bot-testのディレクトリの中に入って下さい。

cd Desktop/line-bot-test

次に、gitの初期ファイルを作成する(git init)ところから、git pushするまでを行います。
そもそもgitって何?って方は下記を参考にして下さい

下記のコードをターミナルに入力して下さい

// gitの初期ファイルを作成
git init
// ローカルリポジトリに結びつくリモートリポジトリを設定
heroku git:remote -a (自分で決めたアプリ名)
// 変更したファイルを全てインデックスに登録
git add .
// 変更したファイルをリポジトリに書き込む("inital commit"はコメントなのでなんでも良い)
git commit -m "inital commit"
// herokuにローカルで作成したファイルをpush
git push heroku master

ターミナルにコードを入力すると下のようになります。
ピンク:コード
青:アプリ名
黒:個人情報なので消してます

⑥正常に動作しているか確認
git pushが正常に行われているかの確認はHerokuで行うことができます。
下記のようにBuild succeededとなっていれば成功です。

⑦環境変数を登録する
環境変数には、LINE_CHANNEL_ACCESS_TOKENLINE_CHANNEL_SECRETの2つを設定します。メモしておいた、アクセストークンChannel Secretをここで使います。

LINE_CHANNEL_ACCESS_TOKEN : アクセストークン
LINE_CHANNEL_SECRET : Channel Secret

以下のコマンドを使用します。ターミナルから実行して下さい。
XXXXXXXXXX の部分に、ご自身のアクセストークンChannel Secretを入力して下さい

heroku config:set LINE_CHANNEL_ACCESS_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXX
heroku config:set LINE_CHANNEL_SECRET=XXXXXXXXXXXXXXXXXXXXX

以上でコーディング終了です!

完成

ご自身のラインで、Botと友達登録をして、うまく動作するか試して下さい

うまくできましたでしょうか?

1発でうまくいくことは、ほとんどありません。うまくいかなかった場合の対処法を下に書いておきます

うまくいかない場合

確認すべきこと
・Webhook 送信を「利用する」に変更しているか

・もう一度、下記のコードを試す(git initはやらなくてOK)

// 変更したファイルを全てインデックスに登録
git add .
// 変更したファイルをリポジトリに書き込む("inital commit"はコメントなのでなんでも良い)
git commit -m "inital commit"
// herokuにローカルで作成したファイルをpush
git push heroku master

・下記のコードでデバッグする

//リアルタイムでログを表示する
heroku logs -t

まとめと感想

この記事では、自分が苦労したところを踏まえて書いた、「オウム返しBotの作り方」に関する記事でした。

面白そうだなって感じた方は、ぜひLINE Botでいろんなものを作って見て下さい!そして、こんなのできたよって教えて欲しいです!笑

ちなみに次は、Botに写真を送信したら、それが誰なのかを分別してくれる、画像認識AIを搭載したBotを作りたいなぁ〜って考えてます 笑

今は、画像認識の精度とか、Botにどう組み込むか四苦八苦しているところです 笑

最後に

この記事が役に立ったって方がいらっしゃれば、シェアしていただけると嬉しいです。

この記事が気に入ったらサポートをしてみませんか?