使用 Python 與 LINE Bot SDK 來建立聊天機器人
Line Bot 帳號申請
可以參考此教學文章進行操作:[Day01] LINE Bot 帳號申請。
建立一個Flask App
首先,先安裝所需要的套件。
pip install line-bot-sdk
pip install flask
參考 Github 範例 (LINE Messaging API SDK for Python),撰寫一個 Flask App。其中 callback() 作為 Webhook Handler,handle_message() 為 Event Message Handler。
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
# 設定 LINE Bot 的認證資訊
line_bot_api = LineBotApi('CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('CHANNEL_SECRET')
@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()
如果希望將接收到的用戶訊息做一些處理後再進行回覆,像是使用一些 NLP 等技術進行意圖識別與回答生成、或是自己撰寫邏輯處理,則可以於 handle_message() 中進行修改。
以下以收集用戶歷史訊息為例。新增一個 /message 路由來進行收集,並將成功接收的訊息回傳給 LINE Bot API 來回覆訊息。
...
@app.route('/message', methods=['POST'])
def message():
user_id = request.form.get('user_id')
message = request.form.get('message')
if user_id not in user_messages:
user_messages[user_id] = []
user_messages[user_id].append(message)
return 'Hello, your message has been received.'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_id = event.source.user_id
message = event.message.text
message_url = url_for('message', _external=True)
response_message = requests.post(message_url, data={
'user_id': user_id,
'message': message
})
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=response_message)
)
...
啟動 Flask App 並將伺服器對外公開
由於 LINE Bot Webhook URL 需使用 https URL,如果是將 Flask App 於本地端啟動的話,URL會像是這樣:http://127.0.0.1:5000。想要能夠簡單測試的話,可以使用 `ngrok` 來讓你的網址可以對外公開。
到 ngrok官網 下載 ngrok 壓縮檔,點兩下啟動後即可在終端機上執行指令。
./ngrok http 8080 #要監聽的port
設定 LINE Bot Webhook
啟動 Flask App 後,在 LINE Developers 中的 Messaging API 設定 Webhook。將 Webhook URL 設定為 Flask 伺服器的 URL (https://{your_domain}/callback),並將 Use webhooks 的選項打開。設定完後可以透過 Verify 進行測試,如果跳出 “Success” 的訊息就是成功了。
設定完成後,使用 Bot basic ID 或 QR code 將機器人加為好友,就可以開始與機器人對話了。