這篇文章是我自己吸收後打出來的文章如果有錯(cuò)記得跟我說!!
前情提要:
因?yàn)橐咔殛P(guān)係導(dǎo)致很多東西都用Line通知並因?yàn)楣疽恍┫到y(tǒng)也利用 Line notify 去做通知,導(dǎo)致這份小小的 Side Project 產(chǎn)生出來,當(dāng)然也是由我接下我才會(huì)打這篇文 XD
正題:
我們要做Line Bot前要先理解一些他們的傳送資料的方法和架構(gòu)!
簡(jiǎn)單來說就是我們 User 傳送的資料or文字都會(huì)透過 LineBot-API 先傳到 Line,之後會(huì)轉(zhuǎn)到我們掛在 Heroku 上用 Python+Flask 建立的網(wǎng)頁(yè),然後網(wǎng)頁(yè)收到資料後去執(zhí)行對(duì)應(yīng)的程式碼,再回傳回去 Line 並執(zhí)行對(duì)應(yīng)的程式碼(Ex:傳資料給User)。
實(shí)作:
註冊(cè):
先到我們的 Account 裡選擇 Products 然後選擇 Messaging API 然後點(diǎn) Start Now
之後就開始填一些基本資料,有些資料可以不用填
這樣我們就有了基本的 LineBot 了
然後就可以建立一個(gè) App
之後也是填一下資料就建立好了
程式方面:
我們是用 Python+Flask 建構(gòu)一個(gè)網(wǎng)頁(yè)掛在 Heroku
因?yàn)槲覀円?Heroku 所以需要安裝 Git 跟 HerokuCLI
然後我是用 Python 3.8.6 去開發(fā)
然後安裝一些套件
pip install line-bot-sdk
pip install Flask
不過這些事如果你要在本地執(zhí)行程式測(cè)試才會(huì)需要裝的因?yàn)槲覀冎饕獣?huì)掛在 Heroku 上所以我們只要把這些套件裝在 Heroku 上就OK了!
東西都裝完之後就能開始看我們的程式碼了
=> Main.py
# 初始化LINT BOT import os
from flask import Flask from linebot import LineBotApi, WebhookHandler
app = Flask(__name__)
line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN']) handler = WebhookHandler(os.environ['CHANNEL_SECRET'])
# 利用 handler 處理 LINE 觸發(fā)事件 from linebot.models import MessageEvent, TextMessage, TextSendMessage
@handler.add(MessageEvent, message=TextMessage) def handle_message(event): line_bot_api.reply_message( event.reply_token, TextSendMessage(text=f"Hello {line_bot_api.get_profile(event.source.user_id).display_name}!") )
# 利用 route 處理路由 from flask import request, abort from linebot.exceptions import InvalidSignatureError
@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' |
我們可以看到程式碼裡面有 CHANNEL_ACCESS_TOKEN 跟 CHANNEL_SECRET
都是在我們剛剛創(chuàng) LineBot 的地方看到
Channel secret 在 Basic Setting 下 ,Channel access token 在 Messaging API 下
然後在 Messaging API 裡有一個(gè) Webhook URL 的地方是等等要用的
可以先填上 https://你heroku的APP名字.herokuapp.com/callback
先別急著按 Verify 因?yàn)槲覀冞€沒把程式上傳
之後就要回到 Heroku 的部分因?yàn)槲覀円蟼鞯?Heroku,我們先把程式碼的部分搞定在上傳
我們要把程式上傳到 Heroku 需要幾個(gè)東西讓 Heroku 去安裝他要的東西跟指定要跑的程式等等...
要上傳Heroku有幾個(gè)必要的東西 Procfile(不要懷疑就是沒有副檔名),requirements.txt,runtime.txt 這三個(gè)東西跟你的主程式
Procfile:主要是寫說你這個(gè)程式是捨麼東西並主要執(zhí)行的程式
我們要在裡面填上 web: gunicorn main:app –preload
Ex:web: gunicorn main:app –preload
這是一個(gè) Web 用 Gunicorn 搭建一個(gè) Web 服務(wù)然後是用 main 這個(gè)檔案
等等上傳就可以在你的 Heroku 上看到
requirements.txt:這很重要!這是要把我們需要用到的 Library 去跟 Heroku 說他會(huì)在上傳程式碼時(shí)一起裝起來
這是我有裝的東西基本上就是 套件名字==版本
Flask==2.0.2
gunicorn==19.9.0
line-bot-sdk==2.0.1
requests==2.27.1
psycopg2==2.9.3
numpy==1.19.4
Pillow==8.0.1
pygsheets==2.0.5
runtime.txt:這裡面是寫說你要用什麼語言去執(zhí)行
我填上的是 python-3.8.6 就這樣
之後我們就照著 Heroku 裡 Deploy 下的步驟一步一步操作就能上傳程式碼到 Heroku 上了
過程跟上傳 Github 的方法87%像
之後我們剛剛可以看到程式碼裡有這兩句
line_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN'])
handler = WebhookHandler(os.environ['CHANNEL_SECRET'])
這邊的用的 os.environ['CHANNEL_ACCESS_TOKEN'],是利用我們 Heroku 上設(shè)定一些變數(shù)並當(dāng)你跟 Heroku 要的時(shí)候會(huì)吐出指定的東西給他那要整麼設(shè)定呢?
在你的 Heroku App 裡的 Setting 可以看到 Config Vars 把旁邊的點(diǎn)開就能看到兩行可以輸入的東西,我們就在這邊輸入我們 LineBot 的資訊就不用吧他寫在程式裡摟!!
我們有了剛剛講的這三個(gè)跟主程式就上傳到你的 Heroku 就能回去剛剛的 LineBot 裡的Webhook URL 按 Verify 正常過的話就是代表能用摟!!
如果不行就檢查一下
先檢查 Webhook URL 是否有對(duì)到你的 HerokuAPP
再 CHANNEL_ACCESS_TOKEN 跟 CHANNEL_SECRET 是否填對(duì)
如果你不覺的是 Heroku 的問題也能改成直接寫在程式裡
Ex:
line_bot_api = LineBotApi('CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('CHANNEL_SECRET')
過來就是檢查上傳 Heroku 的資料是否都有,再檢查是否有上傳成功
我知道我講的有點(diǎn)簡(jiǎn)略,但可以搭配之有一些前輩的文章一起參考喔!(我下面會(huì)付)
如果都不行或是還有疑問就留言吧!如果我會(huì),我就盡量回答!!
參考資料:
賴田捕手 iT幫幫忙
卡米狗 iT幫幫忙
[ChatBot] 創(chuàng)造自己的 Line bot,第一次就上手!(1) — Line bot 架構(gòu)及工具簡(jiǎn)介