使用 Python 與 LINE Bot SDK 來建立聊天機器人

Cosine Chen
6 min readApr 13, 2023

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” 的訊息就是成功了。

LINE Developers Webhook settings.

設定完成後,使用 Bot basic ID 或 QR code 將機器人加為好友,就可以開始與機器人對話了。

LINE Bot 聊天室截圖。

--

--

Cosine Chen
Cosine Chen

Written by Cosine Chen

Hi 我是 Cosine。我是正在前往前後端之路的菜鳥工程師,不擅長寫文章,只是隨筆紀錄自己的學習歷程。因為不喜歡看太多字的文章,也無法一次吸收太多的內容,每篇的內容都不會太長,偏向實作性質,如果你也是正在學習的 Coding 人,希望這些筆記也能夠幫助到你。如果分享的內容有誤的話,也歡迎留言指正,或直接與我聯繫!

No responses yet