第一章:FastAPI 與 Line Bot 系統基礎建置
歡迎來到 Course 4: Line Punch System (後端核心系統)!
在前面的 Course 6 裡,我們學會了不用寫半行程式碼,就能設定出漂亮的 Line 官方帳號與圖文選單。但是,如果我們想要讓這隻機器人真的具有商業價值:把員工的「上班打卡」與 GPS 定位紀錄寫進資料庫,甚至在月底自動回傳計算好的當月薪水,我們就不能只依靠 Line 的內建功能了。 我們需要自己架設一個強大的「後端大腦 (Backend Server)」!
為了讓這個大腦跑得又快又穩,我們將放棄老舊笨重的 Django 或 Flask,轉而使用 Python 搭配目前全球最火熱、效能最變態且極度現代化的非同步框架:FastAPI。
🎯 本章目標
- 建立 Python 開發必須的獨立虛擬環境。
- 認識什麼是 Webhook (網路鉤子),它是怎麼運作的?
- 使用 Vibe Coding 讓 AI 幫你寫出第一支會回應「Hello」並包含加密驗證的 Line API。
- 體驗現代化開發的魅力。
🐍 第一步:Python 環境與套件準備
在開始寫 Code 之前,確保你的電腦已經安裝了 Python。 在上一章我們學過,開發 Python 專案時,建立一個虛擬環境 (Virtual Environment, venv) 來隔離不同專案的套件,是一個專業工程師的基本素養。
🔥【Vibe Prompt 實戰咒語】
我想要開發一個 Python 後端專案,使用最新的 FastAPI 和官方的 line-bot-sdk v3 版本。1. 請給我建立 Python 虛擬環境 (venv) 並啟動的終端機指令 (Mac 與 Windows 都要)。2. 請給我安裝以下套件的 pip 指令:fastapi, "uvicorn[standard]", line-bot-sdk, python-dotenv, httpx。3. 請告訴我如何產生 requirements.txt 檔案,以便未來部署使用。
AI 會教你這樣做 (請在你的專案資料夾底下執行):
# 1. 建立虛擬環境
python3 -m venv venv
# 2. 啟動它 (Mac/Linux)
source venv/bin/activate
# 或 (Windows)
venv\Scripts\activate
# 3. 安裝必備武器庫
pip install fastapi "uvicorn[standard]" line-bot-sdk python-dotenv httpx
🎣 第二步:什麼是 Webhook (網路鉤子)?
在我們開始寫 FastAPI 之前,必須先顛覆你對網頁的傳統認知。
以前你在寫前端 (React) 時,是你的網頁「主動去問」別人的伺服器:「請問有新的商品資料嗎?」這叫做 Polling (輪詢)。 但如果 Line Bot 也用這種方式,你的伺服器每秒鐘都要去問 Line:「有人傳訊息給我嗎?」這會把雙方的伺服器都操到當機。
所以,Line 發明了 Webhook 機制。 Webhook 的概念是反過來的:你不用來問我,只要有客人在 Line 上面傳訊息給你的官方帳號,Line 的官方伺服器就會「主動打電話 (發送 HTTP POST 請求)」到你的 FastAPI 伺服器!
因此,我們今天最重要的任務,就是在 FastAPI 裡面開一個專門接聽這通電話的「網址端點 (Endpoint)」。
🚀 第三步:用 AI 生成防偽 Webhook 接收端點
在過去,要自己手刻 Line Bot 的 Webhook 非常痛苦。因為 Line 為了防範駭客,規定每一通打來的電話,都必須經過極度複雜的 數位簽章驗證 (Signature Validation)。只要演算法寫錯一個字,驗證就會失敗。
現在,我們把這件痛苦的事情交給 AI 處理。
🔥【Vibe Prompt 實戰咒語】
我正在使用 Python FastAPI 開發 Line Bot。請幫我寫一份 main.py。需求如下:1. 強制使用 line-bot-sdk v3 版本 (非常重要!請用新版語法,不要用舊版的 LineBotApi)。2. 從 .env 讀取 LINE_CHANNEL_SECRET 與 LINE_CHANNEL_ACCESS_TOKEN 兩個環境變數。3. 建立一個 @app.post("/callback") 的 endpoint 作為 Webhook 接收點,並實作正確且安全的 X-Line-Signature 驗證邏輯。4. 當收到文字訊息 (MessageEvent, TextMessageContent) 時,實作一個簡單的 Echo Bot (把使用者說的話加上 "你剛剛說了:" 前綴,然後回傳給他)。5. 請在程式碼中加上豐富的中文註解。
AI 會瞬間產生一份架構完美的 main.py。
這份程式碼不僅幫你寫好了 API,連 Line 最討厭的防偽簽章驗證都幫你寫得滴水不漏!
# 💡 (AI 生成的程式碼片段範例 - 驗證區塊)
@app.post("/callback")
async def callback(request: Request):
# 1. 取得 Line 伺服器送來的專屬加密簽章
signature = request.headers.get("X-Line-Signature", "")
# 2. 取得對方傳來的訊息本體
body = await request.body()
body_str = body.decode("utf-8")
try:
# 3. 交給 SDK 的 handler 去驗證簽章是否相符
handler.handle(body_str, signature)
except InvalidSignatureError:
# 如果簽章不對,立刻把駭客踢出去!
raise HTTPException(status_code=400, detail="Invalid signature")
return "OK"
你可以下達 uvicorn main:app --reload 讓這支程式跑起來。
💼 [商業應用場景] 為什麼要用 FastAPI 而不是 Node.js?
很多人會問:「我之前學的是前端 JavaScript,為什麼寫 Line Bot 突然要換成 Python FastAPI?」 答案很現實:因為商業需求與生態系。
當你幫客戶寫 Line Bot 時,客戶 99% 會要求你:「我要這個機器人能看懂客人的發票照片 (OCR)」、「我要這個機器人能像 ChatGPT 一樣跟我聊天 (AI LLM 串接)」、「我要它能幫我爬蟲競爭對手的售價」。
在這些領域:影像辨識、自然語言處理、網路爬蟲、數據分析。Python 是地球上唯一的霸主。
如果你用 Node.js 寫 Line Bot,當客戶提出要串接 AI 語音辨識時,你會痛苦萬分。但如果你用 Python FastAPI,你只要 pip install openai,三行程式碼就能搞定。
選擇 FastAPI 作為你的後端武器,就等於拿到了通往未來 AI 時代的門票。
✅ 本章小結
我們成功搭建了接聽 Line 伺服器通知的端點 (Endpoint)! 但目前這支程式只跑在我們的「本機 (localhost:8000)」。要知道,Line 的伺服器遠在日本,它是絕對無法把訊息送到你那藏在分享器後面的個人電腦裡的!
下一章,我們將教你如何使用外掛開發神器 ngrok,瞬間打通 Line 伺服器與你電腦之間的私密隧道,讓你享受即時修改、即時測試的極速開發體驗!