LINE Py Webhook 是我專為 LINE Messaging API 設計的 Webhook 伺服器範例,利用 Python 與 Flask 框架實現快速開發,並結合 Docker Compose 以簡化部署流程。此專案的主要功能是處理 LINE 官方帳號的訊息互動,當使用者傳送訊息時,伺服器會自動回應 "您說了:+ 使用者傳送的內容",藉此提供即時的雙向通訊體驗。值得一提的是,本範例採用了 Reply API 的回覆方式,不會計入傳訊量費用,適合進行測試或開發用途。為了確保服務穩定性與安全性,建議在雲端或 VPS 環境中部署此應用,並透過 Nginx 配合 Let's Encrypt 憑證進行 HTTPS 加密。Docker Compose 的引入更進一步降低了系統設定的複雜性,透過簡單的指令即可完成容器化應用的建構與啟動,大幅提升專案的可維護性與移植性。
此專案的核心程式碼——「app.py」,負責處理 LINE Messaging API 傳入的 Webhook 請求,包含簽名驗證與訊息回覆邏輯。開發者僅需替換 Channel Access Token 與 Channel Secret,即可輕鬆整合到自己的 LINE 官方帳號中。此外,Dockerfile 以精簡的方式定義了應用的依賴與執行環境,並搭配 docker-compose.yml 文件進行多容器協作設定,若要加入更多其他依賴容器也是可行的,此 Webhook 伺服器預設在 5000 埠運行。更新與維護方面,專案提供了一個實用的 Shell 腳本——「update_system.sh」,可一鍵完成容器停止、程式碼更新、映像檔重建與服務重新啟動。
🔗 GitHub 儲存庫:https://github.com/qwe987299/line_py_webhook
📝 app.py
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__)
# 替換為您的 Channel Access Token 和 Channel Secret
line_bot_api = LineBotApi('Channel Access Token')
handler = WebhookHandler('Channel Secret')
@app.route("/callback", methods=['POST'])
def callback():
# 獲取請求中的 Line 簽名
signature = request.headers['X-Line-Signature']
# 獲取請求主體
body = request.get_data(as_text=True)
try:
# 驗證簽名並處理請求
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
# 處理文字訊息事件
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_message = event.message.text
reply_text = "您說了:" + user_message
# 回覆使用者
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=reply_text)
)
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
app.py
是 LINE Py Webhook 專案的核心程式碼,負責處理來自 LINE Messaging API 的 Webhook 請求,並實現訊息的即時互動。此程式基於 Python 的 Flask 框架開發,具備輕量化和高擴展性的特點。程式中設定了伺服器的端點 /callback
,用於接收並處理 LINE 傳遞的 POST 請求。在請求進入時,程式首先驗證其簽名是否正確,以確保數據來源的安全性,接著將訊息內容傳遞給指定的處理邏輯。在處理訊息時,app.py
使用了 LINE Bot SDK 提供的功能,專注於接收文字訊息並回覆。程式的核心邏輯在 handle_message
方法中實現,它會提取使用者傳送的訊息內容,並回傳一段經過簡單處理的文字,例如 "您說了:" 加上使用者的訊息。這種即時互動的設計不僅適合基礎開發,也提供了一個簡單直觀的範例,幫助開發者快速上手。開發者僅需替換 Channel Access Token 和 Channel Secret,即可實現與自己的 LINE 官方帳號整合,為開發或測試提供了穩定可靠的基礎框架。
📝 docker-compose.yml
services:
line_py_webhook:
build:
context: .
dockerfile: Dockerfile
container_name: line_py_webhook
ports:
- "5000:5000"
environment:
- FLASK_ENV=production
docker-compose.yml
是此專案的重要組件,負責定義應用的容器化部署配置,透過簡單的 YAML 格式來描述服務的運行環境與相關設定。該文件定義了一個名為 line_py_webhook
的服務,指定了應用的建構上下文與使用的 Dockerfile,確保容器能正確地從項目目錄中生成。服務預設綁定本地的 5000 埠,對應於 Flask 應用內部的伺服器埠號,方便開發者在本地或遠端進行測試與調試。該文件還允許設定環境變數,例如 FLASK_ENV,被設置為生產模式,確保應用在部署時以穩定且高效能的狀態運行。這樣的配置使得服務在多個環境中保持一致性,降低因環境差異導致的錯誤風險。透過 docker-compose.yml
,開發者可以簡化容器的啟動與管理,僅需執行簡單的 docker compose up
命令,即可完成從映像檔建構到容器啟動的所有流程,無需手動執行繁瑣的命令。這種設計充分發揮了 Docker Compose 的優勢,使得應用的部署與維護更加高效和易於擴展,是現代應用開發的理想選擇之一。
📝 Dockerfile
# 使用 Python 基礎映像檔
FROM python:3.9
# 設定工作目錄
WORKDIR /app
# 複製程式碼到容器
COPY app.py /app/
COPY requirements.txt /app/
# 安裝所需套件
RUN pip install --no-cache-dir -r requirements.txt
# 暴露 Flask 預設的 5000 埠
EXPOSE 5000
# 啟動應用
CMD ["python", "app.py"]
Dockerfile
是此專案中定義應用容器化環境的基礎配置文件,負責描述如何構建應用的 Docker 映像檔。在此專案中,Dockerfile
使用 Python 3.9 作為基礎映像檔,為應用提供一個穩定且輕量化的運行環境。該文件首先設置了工作目錄 /app
,並將專案的核心文件 app.py
和 requirements.txt
複製到容器內。接下來,Dockerfile
透過執行 pip install
指令來安裝 Flask 與 LINE Bot SDK 等應用的必要依賴,確保容器具備執行程式所需的完整環境。同時,文件也將 Flask 的預設埠 5000 暴露,以便容器與外部進行通訊。最後,透過指定 CMD
,定義了容器啟動時的執行指令,讓應用程式以 python app.py
的方式啟動。
📝 requirements.txt
Flask==2.3.2
line-bot-sdk==2.2.1
requirements.txt
是專案中用來管理 Python 套件依賴的文件,列出了應用程式執行所需的所有必要庫及其版本。該文件在專案中包含兩個主要套件:Flask
和 line-bot-sdk
。Flask
是輕量級的 Python Web 框架,負責提供 Webhook 的伺服器端功能,處理 HTTP 請求和回應。line-bot-sdk
則是 LINE Messaging API 的官方軟體開發工具包,用於與 LINE 平台進行互動,實現訊息的接收與回覆。透過這份文件,開發者能輕鬆管理專案的依賴項,並確保應用在不同環境中的一致性。
📝 update_system.sh
#!/bin/bash
# 停止並移除與 Docker Compose 相關的容器和映像檔
echo "Stopping and removing existing containers..."
docker compose down
# 更新程式碼
echo "Pulling latest code from Git..."
git pull
# 重建映像檔
echo "Building new Docker image..."
docker compose build --no-cache
# 啟動服務
echo "Starting new container..."
docker compose up -d
echo "Update and deployment completed successfully!"
update_system.sh
是專案中的自動化腳本,用於簡化應用的更新與部署流程。該腳本整合了一系列 Docker Compose 操作指令,包含停止現有容器、拉取最新的 Git 儲存庫程式碼、重建映像檔以及重新啟動服務等步驟。透過這一腳本,開發者只需執行單一命令,即可完成整個更新過程,避免了手動操作可能導致的錯誤或遺漏。腳本首先透過 docker compose down
停止並移除現有的容器,然後執行 git pull
確保本地程式碼與遠端儲存庫同步。接下來,它使用 docker compose build --no-cache
重新建構 Docker 映像檔,確保新的程式碼和依賴被正確應用,最後以 docker compose up -d
啟動更新後的容器。
▲ 實際上在終端機是這樣 git clone 與部屬的,基本上執行指令 sh update_system.sh
就能搞定首次安裝與執行。
▲ 可以在專案目錄下透過指令 docker compose ps
查看容器運作狀態,如果要停止伺服器則可以透過指令 docker compose down
。
留言區 / Comments
萌芽論壇