一个简单的 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
)设置上述大部分配置选项,例如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