一個簡單的 Telegram Bot,用於將帶有 JSON 負載的POST
請求轉換為 Telegram 推播訊息。與 Gotify 和 ntfy.sh 類似,只是沒有額外的應用程式。對於伺服器監控、警報和其他任何事情都很有用。
開啟 Telegram,開始與 TelepushBot(或您自己的機器人)聊天,然後輸入/start
以獲得收件人代幣。
訊息透過POST
傳送至https://telepush.dev/api/[[inlets/<inlet_name>]|messages]/<recipient>
。
RECIPIENT_TONEN=... # 您使用 /start.curl -XPOST 收到的令牌 -H '內容類型:application/json' -d '{ "text": "*Hello World!* (是的,這是 Markdown)" }' “https://telepush.dev/api/messages/${RECIPIENT_TONEN}”
當託管您自己的執行個體時,請分別取代 URL。
鑰匙 | 類型 | 描述 |
---|---|---|
text * | 細繩 | 純文字或 Markdown 格式的實際訊息 |
origin | 細繩 | 您的訊息的寄件者將顯示為什麼 |
type | [ TEXT , FILE ] | 訊息類型,即傳送文字或檔案(預設: TEXT ) |
file ** | 64位基數 | Base64 編碼的文件內容 |
filename ** | 細繩 | 要傳送的文件的名稱 |
options | 目的 | 要通過的附加選項 |
options.disable_link_previews | 布林值 | 是否在聊天中顯示連結預覽 |
*
= type: TEXT
, **
= type: FILE
更多詳細資訊請參閱此處。
只需使用官方託管執行個體即可。每位收件者每天的請求數限制為 240 位。
當託管您自己的 Telepush 實例時,您需要先使用 @BotFather 建立一個新機器人。因此,您將獲得一個令牌,然後在啟動伺服器時將其傳遞給 Telepush(請參閱下文)。
$ docker 磁碟區建立 telepush_data $ docker 運行 -d -p 8080:8080 -v telepush_data:/srv/data --名稱電話推送 ghcr.io/muety/telepush -模式網路鉤子 -令牌 <YOUR_BOTFATHER_TOKEN>
請參閱此處。
# 安裝$ go install github.com/muety/telepush@latest# 運行(webhook 模式)$ ./telepush -token <YOUR_BOTFATHER_TOKEN> -mode webhook
您可以在長輪詢或 webhook 模式 ( -mode [webhook|poll]
) 下執行機器人。對於生產用途,出於多種原因,建議使用後一個選項。但是,您需要一台具有靜態 IP 和 TLS 憑證的伺服器。
有關 Webhook 設定的更多詳細信息,請參閱Marvin 的 Webhook 一切奇妙指南。
在 Webhook 模式下,Telegram 要求您的更新端點使用 HTTPS。若要啟用此功能,請在反向代理程式(例如 Caddy)後面執行 Telepush,這會終止 TLS。
或者,讓 Telepush 本身處理 TLS。為此,您需要一個證書,因此要么從 Let's Encrypt 獲取證書,要么創建一個自簽名證書,然後將-useHttps
與-certPath
和-keyPath
結合使用,分別指向您的證書和私鑰文件。
對於自簽名證書,您還需要將公鑰傳遞給 Telegram 的setWebhook
方法,請參閱這些說明。
-address
( string
) – 要綁定的網路位址 (IPv4)。預設為127.0.0.1
。
-address6
( string
) – 要綁定的網路位址 (IPv6)。預設為::1
。
-disableIPv6
( bool
) – 是否停用 IPv4 和 IPv6 介面上的偵聽。預設為false
。
-port
( int
) – 要偵聽的 TCP 連接埠。預設為8080
。
-proxy
( string
) – 用於長輪詢模式的代理連接字串。預設為無。
-urlSecret
( string
) – 附加到 Telegram 伺服器呼叫的更新路由的隨機後綴,以防止垃圾郵件。預設為無。
-useHttps
( bool
) – 是否使用 HTTPS。預設為false
。
-certPath
( string
) – 將 webhook 模式與useHttp
結合使用時的 SSL 憑證路徑。預設為無。
-keyPath
( string
) – 在useHttp
中使用 webhook 模式時您的 SSL 私鑰的路徑。預設為無。
-dataDir
( string
) – 儲存持久資料的檔案系統位置。預設為.
。
-inlets
( string
) – 包含 YAML 格式的基於配置的入口定義的資料夾路徑。預設為./inlets.d
。
-blacklist
( string
) – 包含使用者 ID 的行分隔黑名單檔案的路徑(傳送/help
取得您的 ID)。預設為blacklist.txt
。
-whitelist
( string
) – 包含使用者 ID 的行分隔白名單檔案的路徑(傳送/help
以取得您的 ID)。預設為whitelist.txt
。
-rateLimit
( int
) – 每小時傳送給每位收件者的最大訊息數。預設為100
。
-truncateMsgs
( bool
) – 將太長的訊息截斷為 4096 個字符,而不是拒絕它們。預設為false
。
-metrics
( bool
) – 是否在/metrics
下公開 Prometheus 指標。預設為false
。
使用 Docker 映像時,您可以透過環境變數(使用-e
傳遞給docker run
) entrypoint.sh
上述大部分配置選項,例如APP_USE_HTTPS=true
、 APP_CERT_PATH=/etc/telepush.crt
等。 entrypoint.sh
。
(又稱允許清單與封鎖清單)
入口提供了一種機制來預處理傳入數據,這些數據的格式與機器人通常期望的格式不同。
如果資料是由您無法修改的外部第三方應用程式發送的,這尤其有用。
例如,您可能想要將 Prometheus 的 Alertmanager 中的警報作為 Telegram 通知而發送。然而,Alertmanager 的 webhook 請求看起來與 Telepush 的預設輸入格式有很大不同。為了仍然使它們適合,您可以編寫一個 Inlet 來相應地處理資料。
若要直接定址入口,請要求https://telepush.dev/api/inlets/<inlet_name>
。請注意, /api/inlets/default
等同於/api/messages
。
目前有以下入口:
姓名 | 描述 | 地位 |
---|---|---|
default | 簡單地傳遞請求而不進行任何更改 | ✅ |
alertmanager | 使用 Alertmanager Webhook 請求 | ✅ |
grafana | 使用 Grafana webhook 請求 | ✅ |
webmentionio | 接受 Webmention.io webhook 請求以通知您的一篇文章有新的網路提及 | ✅ |
stripe | 接受 Stripe webhooks 來通知訂閱狀態更改 | ✅ |
bitbucket | 接受 Bitbucket Webhook 請求以通知管道狀態更改 | ⏳ |
您也可以在 YAML 中定義自己的自訂入口。有關於此以及有關各個預先存在的入口的更多文件可在此處找到。
對於所有入口,以下選項可作為查詢參數傳遞:
範圍 | 描述 |
---|---|
disable_link_previews | 停用訊息中偵測到的 Web 連結的預覽版本。預設值: false 。 |
disable_markdown | 停用嘗試將訊息解析為 Markdown。預設值: false 。 |
範例: POST https://telepush.dev/api/inlets/default?disable_markdown=true&disable_link_previews=true
。
如果通過了-metrics
標誌,則基本的 Prometheus 指標將在/metrics
下公開。它們包括:
telepush_messages_total{origin="string", type="string"}
telepush_requests_total{success="string"}
panic: template: pattern matches no files: *.tpl.html
當將 Telepush 作為單一可執行檔運行時,不得使用開發模式,除非 Telepush 的原始碼位於同一目錄中。在這種情況下,請確保不傳遞-env dev
。
麻省理工學院@Ferdinand Mütsch