勉強のためにオウム返しbotを作ってみました。
##まずはLine developersに登録する。
https://developers.line.biz/ja/services/messaging-api/
アプリ名 →任意のアプリ名
アプリ説明 →説明文
プラン →Developer Trial
大業種 →個人
小業種 →個人(その他)
メールアドレス →自分のメールアドレス
利用規約に同意して作成。
チャネル基本設定->メッセージ送受信設定のアクセストークンの再発行ボタンを押下。
Bot情報のLINEアプリへのQRコードで友達登録しておく。
##Flaskとline-bot-sdkをインストール
$ pip3 install flask
$ pip3 install line-bot-sdk
https://github.com/line/line-bot-sdk-python
にオウム返ししてくれるBotのサンプルがあるのですが、
これをそのまま使うと上手く行かないので、
こちらのサイト様からmain.pyを参考にさせて頂きました。
from flask import Flask, request, abort
import os
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
#環境変数取得
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)
@app.route("/")
def hello_world():
return "hello world!"
@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):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
# app.run()
port = int(os.getenv("PORT"))
app.run(host="0.0.0.0", port=port)
##Heroku(ヘロク)に登録する。
HerokuはPaas(パース)とよばれる、アプリケーションを実行するためのプラットフォームで、
アプリケーションを作成して簡単に動かすことが出来ます。
Herokuコマンドラインインタフェース(CLI)をインストールします。CLIを使用して、アプリケーションの管理と拡張、アドオンのプロビジョニング、アプリケーションログの表示、およびアプリケーションのローカルでの実行を行います。
プラットフォーム用のインストーラをダウンロードして実行します。
$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/browser/XXXX
Logging in... done
Logged in as XXXX@XXXX
##アプリケーションの登録
$ heroku create {自分のアプリケーション名}
Creating ● XXXX... done
https://XXXX.herokuapp.com/ | https://git.heroku.com/XXXX.git
##環境変数の設定
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの文字列" --app {自分のアプリケーション名}
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの文字列" --app {自分のアプリケーション名}
##設定の確認
$ heroku config --app {自分のアプリケーション名}
##Webhookの設定
管理画面からWebhookの設定をします。
Webhook送信:利用する
Webhook URL:https://<自分のアプリケーション名>.herokuapp.com/callback
接続確認が表示されれば完了です。
##設定ファイルの作成とデプロイ
設定ファイルに記載するためにPythonとFlaskのバージョンを調べておきます。
$ flask --version
同じディレクトリに作成
main.py →ソースコード
runtime.txt →Pythonのバージョンを記載
requirements.txt →インストールするライブラリの記載
Procfile →プログラムの実行方法を定義
python-3.7.0
Flask==1.0.2
line-bot-sdk==1.8.0
Procfile
###変更した内容を反映する
$ git add .
$ git commit -am "make it better"
$ git push heroku master
###上手くデプロイ出来たか確認する
$ heroku open
Hello Worldが表示されたら正常にデプロイされています。
###ログ確認
heroku logs --tail
###詰まったところ
Procfileを作成した際に他二つが.txtだったので、
間違えて.txtで作成してしまっていました。
拡張子の無いファイルを作成するときは、名前を付ける時にダブルクォートで囲んで保存します。
Webhook URLの設定で接続確認をしたところエラーが出ていました。
Webhookが無効なHTTPステータスコードを返しました(期待されるステータスコードは200です)
原因は分からなかったのですが、
オウム返しは上手く行っていました。
###ちなみに...
ログの、
WARNING: Do not use the development server in a production environment.
この部分で注意されていますが、今回は試すだけなので無視して大丈夫です。
公開するときはちゃんとサーバーを立てろということですね。
##参考
https://qiita.com/akiko-pusu/items/dec93cca4855e811ba6c
https://qiita.com/tomboyboy/items/122dfdb41188176e45b5
https://uepon.hatenadiary.com/entry/2018/07/27/002843