LINEの「Messaging API」は、一度は使ってみたいと思ったことがあるんじゃないでしょうか。
自作サービスと違って、完璧に整ったLINEのUIを使って、サービスを展開できるのがすごいところ!!
では、四の五の言わずに実装しましょう。
ちなみに、完成品はこちらを友達登録して、ご確認ください。
(プッシュ通知を設定していないので、分かりづらいですが、なんでもいいのでメッセージを適当に送ってください。)
ぜひ、この機能を実装したLINE Botを使ってみてください!
(記事なキャプチャと違い「メジロ」というサービス名になっています。)
目次
- LINE Developerの登録
- テンプレートメッセージを実装
- Herokuの登録
- 参考サイト
- おまけ
対象
- LINEのMessaging APIを使ってみたい人
- Messaging APIのテンプレートメッセージを実装したい人
- Herokuの勉強をしたい人
LINE Developerの登録
Messaging APIのトップ画面の「はじめよう」から、LINE Developerに移れます。
すでにLINEアカウントをお持ちの方は、そのアカウントで登録することができます。すごく簡単\\\└('ω')┘////
新規チャネルの作成
Developerの登録が終わると、「新規チャネル作成」の画面になります。簡単な必要事項を入力するだけでokです。
テンプレートメッセージを実装
では、メインのテンプレートメッセージを実装します。
フレームワークはとっても使いやすいFlask
を使います。
ライブラリの準備
$ pip install flask
$ pip install line-bot-sdk
ディレクトリ構成
特に気を使わず、同階層で大丈夫です。
├── Procfile
├── app.py
├── requirements.txt
└── runtime.txt
テンプレートメッセージの返信機能を実装
今回は、とりあえず動かすことを目的としていますので、細かい解説は、省きます。
import os
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TemplateSendMessage, CarouselTemplate, CarouselColumn)
app = Flask(__name__)
LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"]
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():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def response_message(event):
# notesのCarouselColumnの各値は、変更してもらって結構です。
notes = [CarouselColumn(thumbnail_image_url="https://renttle.jp/static/img/renttle02.jpg",
title="【ReleaseNote】トークルームを実装しました。",
text="creation(創作中・考え中の何かしらのモノ・コト)に関して、意見を聞けるようにトークルーム機能を追加しました。",
actions=[{"type": "message","label": "サイトURL","text": "https://renttle.jp/notes/kota/7"}]),
CarouselColumn(thumbnail_image_url="https://renttle.jp/static/img/renttle03.jpg",
title="ReleaseNote】創作中の活動を報告する機能を追加しました。",
text="創作中や考え中の時点の活動を共有できる機能を追加しました。",
actions=[
{"type": "message", "label": "サイトURL", "text": "https://renttle.jp/notes/kota/6"}]),
CarouselColumn(thumbnail_image_url="https://renttle.jp/static/img/renttle04.jpg",
title="【ReleaseNote】タグ機能を追加しました。",
text="「イベントを作成」「記事を投稿」「本を登録」にタグ機能を追加しました。",
actions=[
{"type": "message", "label": "サイトURL", "text": "https://renttle.jp/notes/kota/5"}])]
messages = TemplateSendMessage(
alt_text='template',
template=CarouselTemplate(columns=notes),
)
line_bot_api.reply_message(event.reply_token, messages=messages)
if __name__ == "__main__":
port = int(os.getenv("PORT", 5000))
app.run(host="0.0.0.0", port=port)
設定ファイルを作成
pythonのバージョンの管理やライブラリの指定をします。
web: python app.py
Flask==1.0.2
line-bot-sdk==1.7.2
python-3.6.6
※ 公式サイトによると、Pythonのバージョンは、python-3.7.0
python-3.6.6
python-2.7.15
のいずれかを指定する必要があるみたいです。
Herokuの準備
Herokuの公式サイトからもダウンロードできますし、下記のコマンドからでもインストールできます。
$ brew install heroku/brew/heroku
ちょいつまった
(上のコマンドで正しくインストールされれば、飛ばしてください。)
上のコマンドを打ったら、下のように怒られた。
Error: heroku 7.16.0 is already installed
To upgrade to 7.19.3, run `brew upgrade heroku`
アップグレードするだけでOK!
$ brew upgrade heroku
Herokuへログイン
ターミナルで下記のコマンドを打つと、
$ heroku login
ブラウザに移行して、メールアドレスとパスワードを求められます。
無事、ログインに成功すると、下の画面になります!
※ 初めてHerokuを使う場合は、挙動が少し違う可能性があります。
Herokuへアプリケーションの登録
# 英字の大文字はうまく登録できないようです
$ heroku create <自分のアプリ名>
Herokuとチャネルの連携
管理画面から、Channel Secret
とアクセストークン
をコピーして、設定します。
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app <自分のアプリ名>
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app <自分のアプリ名>
Webhookの設定
下のように設定してください。
管理画面から、Webhookの設定をします。
Webhook送信:利用する
Webhook URL:https://<自分のアプリ名>.herokuapp.com/callback
デプロイ
commitして、pushしたら、デプロイ完了です。(Herokuって楽\(^o^)/)
$ git init
$ git add .
$ git commit -m "new commit"
$ git push heroku master
これで、デプロイ完了です。
管理画面から、ご自身のQRコードをLINEで友だち追加して、遊んでみてください。
つまったところ
デプロイしたのに返信が返ってこない
原因:
エラーの原因は、たくさん考えられます。なので、logを見て判断してください。Herokuのログを見るコマンドは、以下の通りです。
$ heroku logs
参考サイト
PythonでLine botを作ってみた
LINE Messaging APIのテンプレートメッセージをまとめてみる
[python] LINEで画像を送ると商品検索するbotを作ってみた
おまけ
最後までお付き合いいただき、ありがとうございました。
少しでもお役に立てたのであれば、嬉しいです。
今後、プッシュ通知や他の機能に関しても、記事を書いていく予定です。