こんにちは!!
キャスレーコンサルティングに17新卒として入社したLS(リーディング・サービス)部の後藤です。
AIが気になり、Pythonの勉強始めたことがきっかけで、何かを作りたくて仕方がない今日此の頃。
LINEのBotが初心者でも簡単に作れると聞き、勉強を兼ねて
送信したメッセージをオウム返しする、LINE Botを作ってみました。
ゴール
これが、今回の完成目標のお友達「キャス・レイ」さんです。
LINEメッセージの受け取りと送信ができることが確認できます。
開発環境
・OS Mac 10.11.6
・Python 3.6.6
・Heroku
開発手順
下記の流れで、開発を進めていきます。
1.LINE Developers 登録&設定
2.Heroku 登録&設定
3.Pythonで実装
LINE Developersの登録&設定、およびHerokuの登録&設定については下記URLを参照ください。
参考サイト:https://developers.line.me/ja/docs/messaging-api/getting-started/
LINE BOTの仕組みについて
実装を始める前に、大まかなしくみと手順を説明します。
今回は、勉強も兼ねてHerokuを使ってLINE BOTを作成します。
【LINE BOTの仕組み】
1:ユーザーがボットにメッセージを送ると、Webhookを利用し、
Messaging APIを通して、Herokuへリクエストを送信します。
2:Herokuが受け取ったリクエストを、Pythonで実装したソースコードが処理し、値をHerokuへ返します。
3:Herokuが受け取った応答リクエストを、Messaging APIへ送ります。
(応答リクエストは、JSON形式でHTTPSを使って送信されます。)
4.LINEが受け取り、データが表示されます。
という流れで、データの授受が行われています。
【参考URL】
MessagingAPIとは…
https://developers.line.me/ja/services/messaging-api/
Herokuとは…
https://jp.heroku.com/
開発準備
Heroku CLIインストール
下記の参考サイトで、Download the Heroku CLI for MacOSをインストールすると
コマンドラインが使えるようになります。
https://devcenter.heroku.com/articles/heroku-cli#download-and-install
Download the Installerをクリックして、ダウンロードします。
ダウンロードしたファイルを、ダブルクリックしてインストールを進めます。
Herokuにログイン
インストールが完了しましたら、Herokuにログインしてみましょう。
ターミナルを起動し、ホームディレクトリで以下のコマンドを実行します。
1
[code]$ heroku login[/code]
コマンドを実行後、
登録したEmailとパスワードを、入力してください。
123
[code]
Enter your Heroku credentials:
Email: XXX@XXX
Password: *********
[/code]
無事にログイン成功しました!
アプリケーション登録
次に、アプリケーションを登録します。
(あとの手順で、https://<アプリケーション名>.herokuapp.comをWebhookで使います。)
以下のコマンドが自動的に、リモートリポジトリ”heroku”という名前で
git@heroku.com:<アプリケーション名>.git を登録してくれます。
[code]
$ heroku create &amp;amp;amp;amp;lt;アプリケーション名&amp;amp;amp;amp;gt;
[/code]
※好きなアプリケーション名を、入力してください。
環境変数の設定
次に、環境変数の設定をします。
Messaging API にアクセスする為に必要な、Channel Secretとアクセストークンを設定します。
[code]
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app &amp;amp;amp;amp;lt;アプリケーション名&amp;amp;amp;amp;gt;
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app &amp;amp;amp;amp;lt;アプリケーション名&amp;amp;amp;amp;gt;
[/code]
以下のサイトから、作成したアプリのチャンネル基本設定を選択し、
Channel Secretの欄の文字列をコピーしてコマンドを実行する。
https://developers.line.me/console/
Channel Secretも、同様に設定します。
設定ファイル
今回は軽量で分かりやすいとのことだったので、flask(Webフレームワーク)を使っていきます。
また、LINE BOT開発用のline-bot-sdkをインストールします。
[code]
$ pip3 install flask
$ pip3 install line-bot-sdk
[/code]
flaskとは…
http://flask.pocoo.org/
line-bot-sdkとは…
https://developers.line.me/ja/docs/messaging-api/line-bot-sdk/
続いて、以下の通り、4つのファイルを新規で作成します。
ファイルは、以下のディレクトリ構成になるように作成しました。
lineBot
├── Procfile
├── main.py
├── runtime.txt
└── requirements.txt
Pythonのバージョンを記載する設定ファイル
ファイル名:runtime.txt
内容:
python-3.6.6
インストールするライブラリを記載する設定ファイル
ファイル名:requirements.txt
内容:
Flask==0.12.2
line-bot-sdk==1.5.0
プログラムの実行方法を定義する設定ファイル
ファイル名:Procfile
内容:
web: python main.py
メインのプログラム
ファイル名:main.py
実装
メインのプログラム
ファイル名:main.py
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
[python]
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
app = Flask(__name__)
#環境変数取得
# LINE Developersで設定されているアクセストークンとChannel Secretをを取得し、設定します。
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)
## 1 ##
#Webhookからのリクエストをチェックします。
@app.route("/callback", methods=['POST'])
def callback():
# リクエストヘッダーから署名検証のための値を取得します。
signature = request.headers['X-Line-Signature']
# リクエストボディを取得します。
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
# 署名を検証し、問題なければhandleに定義されている関数を呼び出す。
try:
handler.handle(body, signature)
# 署名検証で失敗した場合、例外を出す。
except InvalidSignatureError:
abort(400)
# handleの処理を終えればOK
return 'OK'
## 2 ##
###############################################
#LINEのメッセージの取得と返信内容の設定(オウム返し)
###############################################
#LINEでMessageEvent(普通のメッセージを送信された場合)が起こった場合に、
#def以下の関数を実行します。
#reply_messageの第一引数のevent.reply_tokenは、イベントの応答に用いるトークンです。
#第二引数には、linebot.modelsに定義されている返信用のTextSendMessageオブジェクトを渡しています。
@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()
port = int(os.getenv("PORT", 5000))
app.run(host="0.0.0.0", port=port)
[/python]
デプロイ
[code]
$ git init
$ git add &amp;amp;amp;amp;lt;ファイルの配置場所&amp;amp;amp;amp;gt;
$ git commit -m "new commit"
$ git push heroku master
[/code]
リモートリポジトリが登録されているか、確認をしてみましょう。
[code]
$ git branch -a
[/code
Webhookの設定
https://developers.line.me/console/ に戻り、Webhookの設定をします。
Webhookとは
アプリケーションの更新情報を、他のアプリケーションへリアルタイム提供する仕組みや概念のことです。
イベント(リポジトリにプッシュなど)発生時、指定したURLにPOSTリクエストします。
LINE BOTのイベントを、リアルタイムで通知する為に使います。
今回は、LINEにメッセージが届いたときにオウム返しをさせたいので、
LINE Developers上で以下の様に設定します。
Webhook送信:利用する
Webhook URL:https://<アプリケーション名>.herokuapp.com/callback
完成
さっそく、メッセージをLINEから送ってみましょう!
作成したBotからオウム返しで、同じメッセージが返ってきたら成功です!!
みなさん、お友達ができたでしょうか?
最後に…
LINEやMessaging API、Heroku使うの難しそう…と勝手に思い込んでいましたが
オウム返しのBotを作るのは、とても簡単にできました!
LINEのMessaging APIには、他にも音声情報や位置情報の取得や
画像付きのメニューの作成といった機能があり、
アイデア次第で面白いものが自分で作ることができますね。
他のブログサイトでは、別のAPIを連携して使い、人の画像認識し、
自動検索して人の名前を表示するようなBotを、作成しているなんて方もいました。
次回は、ちゃんと会話ができるLINE Bot(お友達)を作りたいと思います!
ぜひ皆さんも挑戦してみてください!!
最後までお読みいただき、ありがとうございました。