為了讓一些本地端服務可長期用於監聽事件(event)並觸發(trigger)相應工作,Ngrok隨機產生暫時性的webhook URL是不合適的,因經實際測試,隨機產生的webhook URL開啟超過24小時就失效了,僅僅只能用於開發簡單測試用,如該篇參考文章。
然而Ngrok針對免費用戶有提供一個固定網域的webhook,免費額度看來也相當充裕,使得上述的需求可以被滿足,配置環境和實作步驟如下。
配置環境:
1. 硬體: Raspberry Pi 4b/8G
2. 作業系統: Ubuntu 22.04 desktop LTS
3. 軟體: Docker version 28.1.1
2. 作業系統: Ubuntu 22.04 desktop LTS
3. 軟體: Docker version 28.1.1
4. 請先申請一個line bot
實作步驟:
1. 申請ngrok的免費網域
到Ngrok官網上,申請一個免費網域,完成後,可在左側導航欄點擊domain選項,即可看到網域資訊,如圖一所示。
![]() |
圖一、申請和取得Ngrok domain |
2. 利用Ngrok的免費網域和Authtoken來啟動docker
- 切換到Ngrok的Authtoken頁面,並取得Authtoken,如圖二所示。
![]() |
圖二、取得Ngrok Authtoken |
- 接著,利用docker run來啟動Ngrok,其中可看到固定網域被加入docker配置中,與原隨機產生的Ngrok網址的docker配置明顯不同。另外,指令中的http 5000指的是利用port 5000與第3步驟的python flask伺服器服務port 5000對接。而--domain定義ngrok的對外網域。
sudo docker run -d --name=ngrok \
--net=host \
-e NGROK_AUTHTOKEN=xxxxxxxxxx \
--restart unless-stopped \
ngrok/ngrok:latest http 5000 --domain=your-domain.ngrok-free.app
--net=host \
-e NGROK_AUTHTOKEN=xxxxxxxxxx \
--restart unless-stopped \
ngrok/ngrok:latest http 5000 --domain=your-domain.ngrok-free.app
3. python flask伺服器程式碼
一個簡易範例,linebot的回覆訊息等於使用者的輸入訊息,可參考該篇文章或Github程式碼。
4. 設定LINE Developer後台的webhook URL,並啟用webhook
Line webhook設定如下,因為flask程式碼中配置一個路由/callback,記得加上。
https://your-domain.ngrok-free.app/callback
最後由line介面輸入訊息給該line bot,若返回相同訊息,即大功告成。
沒有留言:
張貼留言