LINE Bot 定時推送與 Google Scheduler 整合實戰
LINE Bot 定時推送與 Google Scheduler 整合實戰¶
本文將著重介紹如何將 LINE Messaging API 整合到 Google Cloud Run 託管服務中,並利用 Google Cloud Scheduler 實現固定時間的訊息廣播通知。
如果你還沒有一個佈屬的服務,請參考文章來佈屬。
一、 LINE Messaging API 與 Google Cloud Run 的運作模式¶
1. 託管環境的優勢¶
- 雲端環境: 我們的 LINE Bot 託管在 Cloud Run 上。Cloud Run 是一個全託管的無伺服器平台,它根據請求自動擴展或縮減(甚至縮減到零),這對於處理 LINE Webhook 的突發流量和 Cloud Scheduler 的定時單次請求非常高效和經濟。
- LINE SDK 整合: 透過 Python 的 line-bot-sdk,我們可以直接使用 MessagingApi 中的 broadcast 方法來發送訊息給所有好友,而無需關心底層的 HTTP 請求細節。
2. 核心通知機制:/trigger-push 路由¶
為了實現定時通知,我們在 line_bot_scheduler.py 中專門定義了一個 HTTP POST 路由:
@app.post("/trigger-push")async def trigger_broadcast(): # ... 處理 LINE 廣播邏輯 ...
這個路由的設計原則是:
- 安全性: 它預期由 Cloud Scheduler 呼叫,但由於服務是公開的,我們在程式碼中加入了錯誤捕獲,確保即使有人惡意呼叫,也不會導致程式崩潰。
- 執行功能: 接收到 POST 請求後,它會執行 messaging_api.broadcast() 呼叫,完成一對多的訊息推送。
- 錯誤回報: 最重要的是,我們在程式碼中導入了 ApiException,並使用 try...except 區塊,以便在 LINE API 呼叫失敗時(例如 Access Token 錯誤),能將詳細的錯誤狀態碼和內容記錄下來,避免 Cloud Scheduler 收到籠統的 500 錯誤。
二、 使用 Google Cloud Scheduler 實現定時推送¶
Cloud Scheduler 是一個完全託管的企業級 Cron 作業服務,它允許您以規律的時間間隔執行任何 HTTP 請求。
1. 排程設定與 Cron 表達式¶
為了實現「每週六晚上 11:00 發送」的需求,我們必須使用 Cron 表達式 (Cron Expression)。
- 目標表達式: 0 23 * * 6
- 0: 分鐘
- 23: 小時 (23:00)
- *: 每月中的每一天
- *: 每月
- 6: 星期六 (0=週日, 6=週六)
2. 任務建立步驟:圖像介面 (Google Cloud Console)¶
設定 Cloud Scheduler Job 最直觀的方式是透過 Google Cloud Console。
進入服務: 登入 Google Cloud Console,導航至 Cloud Scheduler 頁面。
建立任務: 點擊「建立工作」。
設定排程:
- 頻率 (Frequency): 輸入目標 Cron 表達式,例如 0 23 * * 6。
-
時區 (Timezone): 選擇正確的時區(例如 Asia/Taipei),確保任務在正確的時間觸發。
設定目標 (Target): -
目標類型: 選擇 HTTP。
- URL: 填入 Cloud Run 服務的 /trigger-push 路由 URL,例如 https://linebot-reminder-xxxxxxxxxxxx.asia-east1.run.app/trigger-push。
-
HTTP 方法: 選擇 POST。
設定驗證: -
授權標頭 (Auth Header): 由於 Cloud Run 服務是公開的,可設定為 無驗證 (None)。
測試: 任務建立完成後,可以在 Cloud Scheduler 列表頁面中找到該任務,點擊「立即執行 (Force Run)」進行手動測試。
3. 任務設定要點 (總結)¶
- 目標 URL: 必須是 Cloud Run 服務的 /trigger-push 路由。
- HTTP Method: 必須是 POST。
- 時區: 設定正確的時區,以確保是您希望的時間。
- 身份驗證: 由於 Cloud Run 服務是公開的 (--allow-unauthenticated),Cloud Scheduler 任務可以設定為無驗證,簡化部署流程。
三、 Google Cloud Scheduler 的免費額度介紹¶
對於小型或個人專案,Cloud Scheduler 提供的免費額度非常慷惠,使其成為理想的排程工具:
這表示您為這個 LINE Bot 專案設置一個排程任務的成本為 $0。搭配 Cloud Run 的免費額度(每月 18 萬次免費請求),這種架構在運行成本上極具優勢。
相關連結:
- Google Cloud Scheduler 官方文件
- Google Cloud Free Tier 介紹
Comments
Loading comments…
Leave a Comment