第八章:為什麼機器人不理我?解密 Webhook 錯誤與 Log 排查法

當你跟著前幾章的教學,開心地把程式碼複製貼上,用 ngrok 建立了一條完美的加密隧道,滿懷期待地拿起手機在 Line 打卡系統輸入「上班」。 結果,機器人完全沒有任何反應。沒有已讀,沒有回話,連個錯誤訊息都不給你,螢幕上一片死寂。 你盯著 main.py 看了半小時,覺得每一行程式碼都跟教材上一模一樣,完美無缺。問題到底出在哪?

開發 Webhook (如 Line Bot、金流串接) 最大的挫折感來源,就是「它不會主動告訴你錯誤發生在哪裡」。 因為這是一場涉及手機、Line 伺服器、ngrok 隧道、以及你本機 Python 伺服器的四方通訊接力賽。中間只要有一個環節斷掉,球就傳不到。 這章我們將教你如何像個資深軟體偵探一樣,一步步抓出兇手。

🎯 本章目標

  1. 掌握排查 Webhook 無反應問題的三個黃金檢查點。
  2. 認識 Line Developers 後台的 Error Statistics 錯誤日誌。
  3. 學會看懂 FastAPI 終端機噴出的 Server Log 紅字。

🕵️ 檢查點一:隧道有通嗎?(觀察 ngrok 流量日誌)

首先,先不要看你的 Python 程式碼,那是最後才要看的東西。 請先去看看你跑著 ngrok 的那個黑色終端機畫面 (或是去瀏覽器打開 http://127.0.0.1:4040 的 ngrok 監控儀表板)。

當你在手機按下傳送訊息的瞬間,ngrok 畫面上應該會閃過一行字: POST /callback 200 OK

這行字隱藏著極大的資訊量:

  • 如果有閃過 200 OK 恭喜!隧道是暢通的,代表 Line 的訊息已經成功飛越半個地球,抵達你電腦裡的 FastAPI 伺服器,而且伺服器正常收下了。如果這時機器人沒回話,問題 100% 出在你寫的 Python 回覆邏輯 (例如資料庫寫入失敗、或者忘記呼叫 reply_message)。
  • 如果有閃過 500 Internal Server Error 訊息成功送達,但是你的 Python 程式碼大爆炸崩潰了!(例如變數名稱寫錯、少 import 套件、或是出現空值)。這時候,請立刻切換去跑 FastAPI 的那個終端機視窗,裡面一定有一大片紅色的 Traceback 錯誤,把紅字全部複製丟給 AI!
  • 如果什麼都沒閃過: 案情陷入膠著,訊息根本沒送到你的電腦!Line 的伺服器在半路就把訊息丟掉了。請進入下一個檢查點。

🕵️ 檢查點二:Line 官方有沒有報錯?(檢查 Developers 後台)

如果 ngrok 完全沒反應,代表問題出在「Line 官方伺服器」到「ngrok 網址」這一段路斷了。 請立刻前往 Line Developers 後台,進入你的 Channel,點擊上方的 Statistics -> Error messages 頁籤。

在這裡,Line 官方會把他們無法送達訊息的原因列出來。通常有兩個最致命的新手地雷:

  1. Webhook URL 貼錯或過期了: 去 Webhook settings 檢查你的網址。因為我們用的是免費版 ngrok,每次重開電腦,那個 https://xxxx.ngrok-free.app 的網址就會變動!你有沒有記得把新的網址貼到後台?另外,網址最後面是不是忘記加上你程式碼設定的路由 (例如 /callback)?
  2. 沒有開啟 Use webhook 選項: 在 Webhook settings 下方,有一個非常不起眼的 Use webhook 綠色開關。這是新手的墳墓!如果這個沒打開,Line 官方就算收到了使用者的訊息,也會判定「這個機器人不想收訊息」,直接把資料扔進垃圾桶,絕對不會轉發給你的伺服器!

🕵️ 檢查點三:身分證 (Token) 過期或失效了嗎?

還有一種極其詭異的情況: ngrok 確實顯示了 200 OK (訊息收到了),但機器人還是死都不回話。 你去檢查 FastAPI 的終端機,發現雖然沒有大當機,但印出了一行警告: LineBotApiError: status_code=401, error_response={"message":"Authentication failed due to invalid access token"}

這代表你的 LINE_CHANNEL_ACCESS_TOKEN 不對! 伺服器收到訊息後,試圖用這把鑰匙打開 Line 的大門把回覆送出去,結果被警衛一腳踢出來,說你的鑰匙是假的 (401 未授權)。

⚠️ [常見地雷] 空格的詛咒 有時候你在從網頁複製 Token 貼到 .env 檔案時,不小心在字串的最後面多複製了一個「空格 (Space)」,或者前後有隱形的換行符號。這會導致整串 Token 驗證失敗!請打開 .env 仔細檢查游標能不能在字尾往右移動。


🤖 終極解法:遇到未知的 Bug 怎麼跟 AI 求救?

如果在排除了上述三個檢查點後,問題還是無法解決,請記住 Vibe Coding 的核心:不要自己猜,讓證據說話! 把你收集到的案發現場證據,統整起來交給 AI。

🔥【Vibe Prompt Debug 實戰】 我的 Line Bot 突然沒有反應了,請幫我排查。以下是案發現場的證據: 1. ngrok 儀表板顯示有收到 POST /callback 請求,但狀態碼是 500。 2. 我的 FastAPI 終端機顯示了以下錯誤日誌: (貼上你在終端機看到的所有紅字,例如 KeyError: 'events' 或是 TypeError: Object of type User is not JSON serializable) 3. 我使用的是最新版的 line-bot-sdk v3 版本。 請問這是哪一行的程式碼出錯了?請幫我分析原因並給出修正後的程式碼。

AI 看到這些精準的 Log,一秒鐘就能告訴你:「啊!那是因為新版的 SDK 送來的 JSON 結構變了,你存取 events 陣列的方法寫錯了!」 這就是為什麼學會看 Log,比學會寫程式更重要。

✅ 本章小結

開發 Webhook 應用程式,本質上就是一場「網路接力賽與前後端踢皮球」的遊戲。 只要掌握了觀察 ngrok 流量、解析 FastAPI 報錯日誌、以及查看 Line 官方日誌這「三把斧頭」,再怎麼靈異的 Bug 都無所遁形。 掌握 Debug 的能力,不僅能保護你的肝臟,更是你在接案時面對客戶緊急故障能處變不驚的底氣!

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!