電光文辭 neon prose
avatar-avatar
安德(abc1231qa)
更新 發佈閱讀 3 分鐘

若要在 ngrok 免費版的限制下讓本地 Python Telegram Bot 透過 Webhook 永續對外服務,關鍵在於應對其每次重啟時變更的公開網址。本文揭示的,正是如何在機器重新啟動後自動擷取 ngrok 新址,並即時更新 Telegram Webhook 的實務之道。


#先備的準備

開始之前,你的 Telegram Bot Token 應從 BotFather 處妥善取得,ngrok 執行檔已下載至本地。系統應能啟動一個監聽本地 5000 埠的 HTTP 伺服器——以 Flask 為例最為便利。在專案根目錄建立虛擬環境並安裝所需套件,使得 python-telegram-bot、flask 與 requests 皆已就緒。


#啟動流程的設計

核心邏輯分三步進行:首先啟動 Flask 伺服器與 ngrok 隧道,其次透過 ngrok 的內部 API(位於 127.0.0.1:4040)擷取公開網址,最後將此網址註冊至 Telegram 的 Webhook 端點。整個過程應在主程式中協調進行,確保 ngrok 完全啟動後再嘗試讀取網址——通常需等待數秒並重試多次,方能確保成功。

Bot 本身應實作一個接收 POST 請求的 webhook 端點,將 Telegram 發來的更新轉交給分發器處理。在此框架下,使用者每發送一條訊息,webhook 便會接收到對應的 Update 物件,經由已註冊的命令處理器進行應答。


#透過工作排程器實現自動啟動

在 Windows 環境中,工作排程器提供了最直接的方案。開啟「工作排程器」,建立新的基本工作,設定觸發條件為「電腦啟動時」,動作則設為執行你的 Python 腳本。指定工作目錄為專案根目錄,確保相對路徑能正確解析。設定此工作以最高權限執行,以避免權限問題導致啟動失敗。


#驗證與測試

首先在命令提示字元手動執行腳本,觀察 ngrok 隧道是否正確啟動、Webhook 更新日誌是否顯示成功。接著重啟系統,驗證工作排程器是否按時觸發腳本,ngrok 是否自動產生新址且 Webhook 能否正常更新。最後的實質檢驗,便是從 Telegram 客戶端對機器人發送訊息,確認其能即時回應。


#成果

循此步驟,即便受限於 ngrok 免費版每次產生新址的特性,你亦能實現完全的自動化部署。機器重啟後,工作排程器將自動觸發腳本運行,整個流程將自行運轉,無需人工干預,確保 Bot 的對外服務始終可用。

A-rod-avatar-img
A-rod和其他 2 人喜歡這篇
avatar-img
加入討論
avatar-avatar
安德(abc1231qa)
更新 發佈閱讀 3 分鐘

若要在 ngrok 免費版的限制下讓本地 Python Telegram Bot 透過 Webhook 永續對外服務,關鍵在於應對其每次重啟時變更的公開網址。本文揭示的,正是如何在機器重新啟動後自動擷取 ngrok 新址,並即時更新 Telegram Webhook 的實務之道。


#先備的準備

開始之前,你的 Telegram Bot Token 應從 BotFather 處妥善取得,ngrok 執行檔已下載至本地。系統應能啟動一個監聽本地 5000 埠的 HTTP 伺服器——以 Flask 為例最為便利。在專案根目錄建立虛擬環境並安裝所需套件,使得 python-telegram-bot、flask 與 requests 皆已就緒。


#啟動流程的設計

核心邏輯分三步進行:首先啟動 Flask 伺服器與 ngrok 隧道,其次透過 ngrok 的內部 API(位於 127.0.0.1:4040)擷取公開網址,最後將此網址註冊至 Telegram 的 Webhook 端點。整個過程應在主程式中協調進行,確保 ngrok 完全啟動後再嘗試讀取網址——通常需等待數秒並重試多次,方能確保成功。

Bot 本身應實作一個接收 POST 請求的 webhook 端點,將 Telegram 發來的更新轉交給分發器處理。在此框架下,使用者每發送一條訊息,webhook 便會接收到對應的 Update 物件,經由已註冊的命令處理器進行應答。


#透過工作排程器實現自動啟動

在 Windows 環境中,工作排程器提供了最直接的方案。開啟「工作排程器」,建立新的基本工作,設定觸發條件為「電腦啟動時」,動作則設為執行你的 Python 腳本。指定工作目錄為專案根目錄,確保相對路徑能正確解析。設定此工作以最高權限執行,以避免權限問題導致啟動失敗。


#驗證與測試

首先在命令提示字元手動執行腳本,觀察 ngrok 隧道是否正確啟動、Webhook 更新日誌是否顯示成功。接著重啟系統,驗證工作排程器是否按時觸發腳本,ngrok 是否自動產生新址且 Webhook 能否正常更新。最後的實質檢驗,便是從 Telegram 客戶端對機器人發送訊息,確認其能即時回應。


#成果

循此步驟,即便受限於 ngrok 免費版每次產生新址的特性,你亦能實現完全的自動化部署。機器重啟後,工作排程器將自動觸發腳本運行,整個流程將自行運轉,無需人工干預,確保 Bot 的對外服務始終可用。

A-rod-avatar-img
A-rod和其他 2 人喜歡這篇
avatar-img
加入討論