今天終於要進入主題了,首先先幫各位複習一下 Day 02 的程式碼。
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_bot_api = LineBotApi(os.environ['CHANNEL_ACCESS_TOKEN']) # 可在無法取得值時返回異常
handler = WebhookHandler(os.environ['CHANNEL_SECRET']) # 可在無法取得值時返回異常
@app.route("/callback", methods=['POST'])
def callback():
# 抓 X-Line-Signature 標頭的值
signature = request.headers['X-Line-Signature']
# 抓 request body 的文字
body = request.get_data(as_text=True)
# 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(host='0.0.0.0', port=int(os.environ.get('PORT', 5000)))
我們先看到 14 行的位置,這個就是我們 Webhook 的進入點,我是使用 /callback
當作進入點的 URL ,各位如果有想要改成其他的 URL 也都可以,並沒有限制一定為 /callback
,接著裡面需要先用 Channel Secret 來驗證我們昨天說過的是否為 Line 平台傳送的訊息,驗證通過會自動送進對應的 Handler 進行處裡,這邊基本上為固定寫法,因此知道在幹嘛就好。
接著下面是註冊我們的 Handler ,讓前面驗證完有對應的 Handler 可以處裡,而最基本的就是文字訊息的處理器。
我們接著看到 29 行,handler 先加入了一個處理函式,並指定可處裡哪一類的訊息 (MessageEvent)
,然後函式中使用 line_bot 對我們的訊息進行回復,回復的內容為 TextSendMessage
,訊息內容為傳入的文字 event.message.text
。
那麼就先到這邊,今天主要是先解釋一下 Day 02 的內容,明天會詳細解釋一下過程。
大家掰~掰~