這是一個完整的 Line Bot 專案,可以接收用戶訊息並自動記錄到 Google Sheets 中,適合部署在 Zeabur 平台。
- 🤖 接收 Line 用戶的文字訊息
- 📊 自動將訊息資料寫入 Google Sheets(時間戳記、用戶ID、用戶名稱、訊息內容)
- ✅ 回覆用戶確認訊息已記錄
- 🔄 包含重試機制處理 API 失敗
- 🚀 支援 Zeabur 部署
- 🛡️ 完整的錯誤處理和日誌記錄
- 🔒 支援多種憑證管理方式,保護機密資料
├── main.py # 主應用程式
├── requirements.txt # Python 依賴套件
├── .env.example # 環境變數範例
├── .gitignore # Git 忽略檔案
└── README.md # 專案說明
- 前往 Line Developers Console
- 建立新的 Provider 和 Messaging API Channel
- 取得以下資訊:
- Channel Secret
- Channel Access Token
- 前往 Google Cloud Console
- 建立新專案或選擇現有專案
- 啟用 Google Sheets API:
- 前往 APIs & Services > Library
- 搜尋 "Google Sheets API"
- 點擊啟用
- 前往 IAM & Admin > Service Accounts
- 點擊 "Create Service Account"
- 填入服務帳戶名稱和描述
- 點擊 "Create and Continue"
- 不需要指派角色,點擊 "Continue"
- 點擊 "Done"
- 點擊剛建立的服務帳戶
- 前往 "Keys" 分頁
- 點擊 "Add Key" > "Create new key"
- 選擇 JSON 格式
- 下載金鑰檔案
- 建立一個新的 Google Sheets 文件
- 從 URL 中複製 Sheet ID(例如:
1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms) - 將服務帳戶的 email 加入 Sheet 的協作者(編輯權限)
- 在 Sheet 中建立標題列:
- A1: 時間
- B1: 用戶ID
- C1: 用戶名稱
- D1: 訊息內容
本專案提供兩種憑證管理方式,讓您可以根據環境選擇最安全的方式:
- 將 Google 服務帳戶 JSON 檔案放在本地目錄
- 憑證檔案不會被提交到 Git 儲存庫
- 使用
GOOGLE_SHEETS_CREDENTIALS_FILE環境變數指定檔案路徑
- 將 JSON 憑證作為環境變數存儲
- 適合 Zeabur、Heroku 等雲端平台
- 使用
GOOGLE_SHEETS_CREDENTIALS環境變數
- ✅ 本地開發: 使用憑證檔案,避免在
.env中存儲完整 JSON - ✅ 雲端部署: 使用平台的環境變數功能,避免硬編碼
- ❌ 避免: 將憑證直接寫在程式碼中或提交到 Git
git clone <your-repo-url>
cd line-bot-google-sheetspip install -r requirements.txt複製 .env.example 為 .env:
cp .env.example .env- 建立
credentials目錄:
mkdir credentials- 將下載的 Google 服務帳戶 JSON 檔案放入
credentials目錄:
mv ~/Downloads/your-service-account-key.json ./credentials/service-account-key.json- 編輯
.env檔案:
# Line Bot Configuration
LINE_CHANNEL_SECRET=your_line_channel_secret_here
LINE_CHANNEL_ACCESS_TOKEN=your_line_channel_access_token_here
# Google Sheets Configuration (使用檔案路徑)
GOOGLE_SHEETS_CREDENTIALS_FILE=./credentials/service-account-key.json
GOOGLE_SHEET_ID=your_google_sheet_id_here
GOOGLE_SHEET_NAME=Sheet1
# Server Configuration
PORT=5000如果您仍想使用環境變數方式,可以註解掉 GOOGLE_SHEETS_CREDENTIALS_FILE 並使用:
# GOOGLE_SHEETS_CREDENTIALS_FILE=./credentials/service-account-key.json
GOOGLE_SHEETS_CREDENTIALS={"type":"service_account",...} # 完整的 JSON 字串python main.py使用 ngrok 或其他工具建立公開 URL:
ngrok http 5000在 Line Developers Console 中設定 Webhook URL:
https://your-ngrok-url.ngrok.io/callback
- 前往 Zeabur Dashboard
- 建立新專案
- 連接你的 GitHub 儲存庫
在 Zeabur 專案設定中加入以下環境變數:
LINE_CHANNEL_SECRET: Line Bot Channel SecretLINE_CHANNEL_ACCESS_TOKEN: Line Bot Channel Access TokenGOOGLE_SHEETS_CREDENTIALS: Google 服務帳戶 JSON 憑證(完整字串)GOOGLE_SHEET_ID: Google Sheets 文件 IDGOOGLE_SHEET_NAME: 工作表名稱(預設為 Sheet1)PORT: 埠號(Zeabur 會自動設定)
- 推送程式碼到 GitHub
- Zeabur 會自動偵測並開始部署
- 部署完成後,複製提供的 URL
在 Line Developers Console 中更新 Webhook URL:
https://your-zeabur-app.zeabur.app/callback
POST /callback- Line Bot Webhook 端點GET /health- 健康檢查端點GET /- 基本狀態端點
- 自動重試機制(最多 3 次)
- 完整的日誌記錄
- 優雅的錯誤回應
- Webhook 簽名驗證
- 環境變數儲存敏感資訊
- Webhook 簽名驗證
- 適當的異常處理
- 不在日誌中記錄敏感資訊
-
Line Bot 無法接收訊息
- 檢查 Webhook URL 是否正確
- 確認環境變數設定正確
- 查看應用程式日誌
-
Google Sheets 寫入失敗
- 確認服務帳戶有 Sheet 編輯權限
- 檢查 Sheet ID 是否正確
- 確認服務帳戶 JSON 格式正確
-
部署失敗
- 檢查 requirements.txt 是否包含所有依賴
- 確認環境變數在 Zeabur 中正確設定
- 查看部署日誌錯誤訊息
在 Zeabur 中可以查看即時日誌來診斷問題:
- 前往專案儀表板
- 點擊服務
- 查看 "Logs" 分頁
- Web 框架: Flask
- Line Bot SDK: line-bot-sdk
- Google Sheets: gspread + google-auth
- 環境變數: python-dotenv
- 部署平台: Zeabur
MIT License