Ein einfacher Telegram-Bot zum Übersetzen POST
Anfragen mit JSON-Nutzlast in Telegram-Push-Nachrichten. Ähnlich wie Gotify und ntfy.sh, außer ohne zusätzliche App. Nützlich für die Serverüberwachung, Alarmierung und alles andere.
Öffnen Sie Telegram, starten Sie einen Chat mit dem TelepushBot (bzw. Ihrem eigenen Bot) und geben Sie /start
ein, um ein Empfänger-Token zu erhalten.
Nachrichten werden per POST
an https://telepush.dev/api/[[inlets/<inlet_name>]|messages]/<recipient>
gesendet.
RECIPIENT_TONEN=... # Das Token, das Sie mit /start.curl -XPOST erhalten haben -H 'Inhaltstyp: application/json' -d '{ "text": "*Hello World!* (ja, das ist Markdown)" }' „https://telepush.dev/api/messages/${RECIPIENT_TONEN}“
Wenn Sie Ihre eigene Instanz hosten, ersetzen Sie die URL entsprechend.
Schlüssel | Typ | Beschreibung |
---|---|---|
text * | Zeichenfolge | Tatsächliche Nachricht im Nur-Text- oder Markdown-Format |
origin | Zeichenfolge | Was wird als Absender Ihrer Nachricht angezeigt? |
type | [ TEXT , FILE ] | Nachrichtentyp, z. B. zum Versenden von Text oder einer Datei (Standard: TEXT ) |
file ** | base64 | Base64-codierter Dateiinhalt |
filename ** | Zeichenfolge | Name der zu sendenden Datei |
options | Objekt | Zusätzliche Optionen zum Bestehen |
options.disable_link_previews | bool | Ob Vorschauen von Links im Chat angezeigt werden sollen |
*
= erforderlich für type: TEXT
, **
= erforderlich für type: FILE
Weitere Details finden Sie hier.
Nutzen Sie einfach die offiziell gehostete Instanz. Rate begrenzt auf 240 Anfragen pro Empfänger und Tag.
Wenn Sie Ihre eigene Telepush-Instanz hosten, müssen Sie zunächst einen neuen Bot mit @BotFather erstellen. Als Ergebnis erhalten Sie einen Token, den Sie dann beim Starten des Servers an Telepush weitergeben (siehe unten).
$ Docker-Volume erstellt telepush_data $ docker run -d -p 8080:8080 -v telepush_data:/srv/data --name telepush ghcr.io/muety/telepush -mode-Webhook -token <YOUR_BOTFATHER_TOKEN>
Siehe hier.
# Install$ go install github.com/muety/telepush@latest# Run (Webhook-Modus)$ ./telepush -token <YOUR_BOTFATHER_TOKEN> -mode Webhook
Sie können den Bot entweder im Long-Polling- oder Webhook-Modus ( -mode [webhook|poll]
) ausführen. Für den Produktionseinsatz empfiehlt sich aus verschiedenen Gründen die letztere Option. Sie benötigen jedoch einen Server mit einer statischen IP und einem TLS-Zertifikat.
Weitere Details zur Webhook-Einrichtung finden Sie in Marvins Marvelous Guide to All Things Webhook .
Im Webhook-Modus erfordert Telegram, dass Ihr Update-Endpunkt HTTPS verwendet. Um dies zu ermöglichen, führen Sie entweder Telepush hinter einem Reverse-Proxy (wie Caddy) aus, der TLS beendet.
Oder lassen Sie Telepush TLS selbst verwalten. Dafür benötigen Sie ein Zertifikat . Besorgen Sie sich also entweder eines von Let's Encrypt oder erstellen Sie ein selbstsigniertes Zertifikat und verwenden Sie dann -useHttps
in Kombination mit -certPath
und -keyPath
die auf Ihr Zertifikat bzw. Ihre privaten Schlüsseldateien verweisen.
Für selbstsignierte Zertifikate müssen Sie zusätzlich Ihren öffentlichen Schlüssel an die setWebhook
-Methode von Telegram übergeben, siehe diese Anweisungen.
-address
( string
) – Netzwerkadresse (IPv4), an die gebunden werden soll. Der Standardwert ist 127.0.0.1
.
-address6
( string
) – Netzwerkadresse (IPv6), an die gebunden werden soll. Der Standardwert ist ::1
.
-disableIPv6
( bool
) – Ob das Abhören sowohl auf IPv4- als auch auf IPv6-Schnittstellen deaktiviert werden soll. Der Standardwert ist false
.
-port
( int
) – TCP-Port zum Abhören. Standardmäßig ist 8080
.
-proxy
( string
) – Proxy-Verbindungszeichenfolge, die für den Long-Polling-Modus verwendet werden soll. Der Standardwert ist „Keine“.
-urlSecret
( string
) – Zufälliges Suffix zum Anhängen an Ihre Update-Route, die von den Telegram-Servern aufgerufen wird, um Spam zu verhindern. Der Standardwert ist „Keine“.
-useHttps
( bool
) – Ob HTTPS verwendet werden soll. Der Standardwert ist false
.
-certPath
( string
) – Pfad Ihres SSL-Zertifikats bei Verwendung des Webhook-Modus mit useHttp
. Standardmäßig ist „Keine“ eingestellt.
-keyPath
( string
) – Pfad Ihres privaten SSL-Schlüssels bei Verwendung des Webhook-Modus mit useHttp
. Standardmäßig ist „Keine“ eingestellt.
-dataDir
( string
) – Dateisystemspeicherort, an dem persistente Daten gespeichert werden sollen. Standardmäßig ist .
.
-inlets
( string
) – Pfad zum Ordner, der konfigurationsbasierte Inlet-Definitionen im YAML-Format enthält. Der Standardwert ist ./inlets.d
.
-blacklist
( string
) – Pfad zu einer zeilengetrennten Blacklist-Datei mit Benutzer-IDs (senden Sie /help
um Ihre ID zu erhalten). Standardmäßig ist blacklist.txt
.
-whitelist
( string
) – Pfad zu einer zeilengetrennten Whitelist-Datei mit Benutzer-IDs (senden Sie /help
um Ihre ID zu erhalten). Standardmäßig ist whitelist.txt
.
-rateLimit
( int
) – Maximale Anzahl von Nachrichten, die pro Stunde an jeden Empfänger zugestellt werden sollen. Der Standardwert ist 100
.
-truncateMsgs
( bool
) – Zu lange Nachrichten auf 4096 Zeichen kürzen, anstatt sie abzulehnen. Der Standardwert ist false
.
-metrics
( bool
) – Ob Prometheus-Metriken unter /metrics
verfügbar gemacht werden sollen. Der Standardwert ist false
.
Wenn Sie das Docker-Image verwenden, können Sie die meisten der oben genannten Konfigurationsoptionen alternativ über Umgebungsvariablen festlegen (die mit -e
an docker run
übergeben werden), z. B. APP_USE_HTTPS=true
, APP_CERT_PATH=/etc/telepush.crt
usw. Einzelheiten finden Sie entrypoint.sh
.
(auch bekannt als Zulassungsliste vs. Sperrliste)
Inlets bieten einen Mechanismus zur Vorverarbeitung eingehender Daten, die in einem anderen Format vorliegen als normalerweise vom Bot erwartet.
Dies ist besonders nützlich, wenn Daten von externen Drittanbieteranwendungen gesendet werden, die Sie nicht ändern können.
Beispielsweise möchten Sie möglicherweise Warnungen vom Alertmanager von Prometheus als Telegram-Benachrichtigungen übermitteln. Allerdings unterscheiden sich die Webhook-Anfragen von Alertmanager stark vom Standardeingabeformat von Telepush. Um sie trotzdem fit zu machen, können Sie einen Inlet schreiben, um die Daten entsprechend zu massieren.
Um einen Einlass direkt anzusprechen, fordern Sie https://telepush.dev/api/inlets/<inlet_name>
an. Beachten Sie, dass /api/inlets/default
äquivalent zu /api/messages
ist.
Folgende Einlässe sind derzeit verfügbar:
Name | Beschreibung | Status |
---|---|---|
default | Leitet die Anfrage einfach ohne Änderungen weiter | ✅ |
alertmanager | Verbraucht Alertmanager-Webhook-Anfragen | ✅ |
grafana | Verbraucht Grafana-Webhook-Anfragen | ✅ |
webmentionio | Akzeptiert Webhook-Anfragen von Webmention.io, um über eine neue Webmention eines Ihrer Artikel zu benachrichtigen | ✅ |
stripe | Akzeptiert Stripe-Webhooks, um über Änderungen des Abonnementstatus zu benachrichtigen | ✅ |
bitbucket | Akzeptiert Bitbucket-Webhook-Anfragen, um über eine Pipeline-Statusänderung zu benachrichtigen | ⏳ |
Sie können auch Ihre eigenen, benutzerdefinierten Inlets in YAML definieren . Weitere Dokumentationen hierzu und zu den einzelnen bereits bestehenden Zuläufen finden Sie hier.
Für alle Einlässe stehen die folgenden Optionen zur Übergabe als Abfrageparameter zur Verfügung:
Parameter | Beschreibung |
---|---|
disable_link_previews | Deaktivieren Sie eine Vorschauversion der in der Nachricht erkannten Weblinks. Standard: false . |
disable_markdown | Deaktivieren Sie die Nachricht, die als Markdown analysiert werden soll. Standard: false . |
Beispiel: POST https://telepush.dev/api/inlets/default?disable_markdown=true&disable_link_previews=true
.
Grundlegende Prometheus-Metriken werden unter /metrics
verfügbar gemacht, wenn das Flag -metrics
übergeben wird. Dazu gehören:
telepush_messages_total{origin="string", type="string"}
telepush_requests_total{success="string"}
panic: template: pattern matches no files: *.tpl.html
Wenn Sie Telepush als einzelne ausführbare Datei ausführen, dürfen Sie den Entwicklungsmodus nicht verwenden, es sei denn, der Quellcode von Telepush befindet sich im selben Verzeichnis. Stellen Sie sicher, dass Sie in diesem Fall nicht -env dev
übergeben.
MIT @ Ferdinand Mütsch