1
/
5

【Python初心者! -LINE Botでオウム返し編-】

こんにちは!!

キャスレーコンサルティングに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;amp;lt;アプリケーション名&amp;amp;amp;amp;amp;gt;
[/code]

※好きなアプリケーション名を、入力してください。


環境変数の設定

次に、環境変数の設定をします。
Messaging API にアクセスする為に必要な、Channel Secretとアクセストークンを設定します。


[code]
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app &amp;amp;amp;amp;amp;lt;アプリケーション名&amp;amp;amp;amp;amp;gt;
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app &amp;amp;amp;amp;amp;lt;アプリケーション名&amp;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;amp;lt;ファイルの配置場所&amp;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(お友達)を作りたいと思います!
ぜひ皆さんも挑戦してみてください!!


最後までお読みいただき、ありがとうございました。

キャスレーコンサルティング株式会社では一緒に働く仲間を募集しています
6 いいね!
6 いいね!
同じタグの記事
今週のランキング