第一章:FastAPI 與 Line Bot 系統基礎建置

歡迎來到 Course 4: Line Punch System (後端核心系統)

在前面的 Course 6 裡,我們學會了不用寫半行程式碼,就能設定出漂亮的 Line 官方帳號與圖文選單。但是,如果我們想要讓這隻機器人真的具有商業價值:把員工的「上班打卡」與 GPS 定位紀錄寫進資料庫,甚至在月底自動回傳計算好的當月薪水,我們就不能只依靠 Line 的內建功能了。 我們需要自己架設一個強大的「後端大腦 (Backend Server)」!

為了讓這個大腦跑得又快又穩,我們將放棄老舊笨重的 Django 或 Flask,轉而使用 Python 搭配目前全球最火熱、效能最變態且極度現代化的非同步框架:FastAPI

🎯 本章目標

  1. 建立 Python 開發必須的獨立虛擬環境。
  2. 認識什麼是 Webhook (網路鉤子),它是怎麼運作的?
  3. 使用 Vibe Coding 讓 AI 幫你寫出第一支會回應「Hello」並包含加密驗證的 Line API。
  4. 體驗現代化開發的魅力。

🐍 第一步: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 伺服器與你電腦之間的私密隧道,讓你享受即時修改、即時測試的極速開發體驗!