Telegram bietet eine Funktion, mit der man automatisiert Nachrichten versenden kann – über einen Bot. Dies kann man zum Beispiel in der Heimautomation ganz wunderbar nutzen, um über aktuelle Geschehnisse informiert zu werden, indem man sich Nachrichten aufs Mobiltelefon senden lässt. In diesem Beitrag möchte ich euch einmal zeigen, wie man einen eigenen Bot einrichtet und wie man ihn per URL-Aufruf nutzen kann.
Dass ihr bereits einen Account bei Telegram habt setze ich einfach mal voraus.
Inhalt
Telegram Bot einrichten
Wir beginnen, indem wir in Telegram einen Chat mit @BotFather starten. Im Chat-Fenster klicken wir auf die Schaltfläche Start
oder geben /start
ein.
Als nächstes legen wir mit /newbot
einen neuen Bot an, geben ihm einen beliebigen Namen (ich nenne ihn indiBot
) und vergeben zusätzlich einen eindeutigen Telegram-Benutzernamen. Meiner heißt indiBits_bot
. Die Benutzernamen für Bots müssen immer mit „bot“ oder „Bot“ enden.
Der Benutzername ist sozusagen die Telefonnummer des Bots und muss Telegram-weit eindeutig sein. Der Name hingegen ist der Eintrag im Telefonbuch und kann beliebig gewählt werden.
Anschließend bekommen wir den Token für unseren Bot angezeigt. Meiner lautet 5035750014:AAEV9N2H0TBhtmnTv2lbvYjWMv5ERRaozao
. Den Token benötigen wir gleich noch.
Mein Bot ist nun unter @indiBits_bot erreichbar.
Eigene User-ID abfragen
Damit wir uns gleich selbst Nachrichten zusenden können benötigen wir noch unsere eigene User-ID (die nochmal etwas anderes ist, wie Name oder Benutzername).
Dazu beginnen wir einen Chat mit @userinfobot und klicken auf die Schaltfläche Start
, bzw. geben /start
ein. Wir bekommen direkt die nötigen Informationen zugesandt.
Nachrichten versenden
Wir wollen uns Nachrichten mittels einfachem URL-Aufruf zusenden. D.h., wir geben eine Adresse im Webbrowser ein, die bereits alle Informationen enthält, sodass allein dieser Aufruf dazu führt, dass wir eine Nachricht aufs Mobiltelefon bekommen.
Die Adresse setzt sich aus mehreren Teilen zusammen:
https://api.telegram.org/
(Adresse der Bot-API)bot<Token>/
(Der Token unseres Bots, den uns @BotFather angezeigt hat; dem Token wird das Wortbot
vorangestellt)sendmessage?
(Befehl, den der Bot ausführen soll)chat_id=<User-ID>&
(Die User-ID, die uns @userinfobot angezeigt hat)text=<Text>
(Inhalt der Nachricht, Leerzeichen ggf. durch%20
ersetzen – je nachdem, wie sich die Anwendung verhält, mit der der Text versendet wird)
Ein zusammengesetztes Beispiel könnte so aussehen:
https://api.telegram.org/bot5035750014:AAEV9N2H0TBhtmnTv2lbvYjWMv5ERRaozao/sendmessage?chat_id=238470164&text=Liebe Grüße vom indiBot
Fügt man diese Adresse nun in der Adresszeile eines Webbrowsers ein bekommt man unmittelbar eine Telegram-Nachricht mit dem Inhalt „Liebe Grüße vom indiBot“ zugesandt. Allerdings muss man zuvor aktiv den Bot kontaktieren und genau wie bei @BotFather und @userinfobot den Chat starten.
Nachrichtentext formatieren
Man kann Inhalte auch formatieren, um beispielsweise die Lesbarkeit zu verbessern. Dazu stehen die Formatierungsoptionen Markdown und HTML zur Verfügung. Besonders viel ist damit nicht möglich, aber die grundlegenden Funktionen sind vorhanden. Welche Formatierung angewendet werden soll, wird mit dem zusätzlichen Parameter parse_mode=
in der URL angegeben.
Formatierung | Markdown V2 | HTML | Darstellung |
---|---|---|---|
parse_mode= | markdownv2 |
html |
|
Fett-Schrift | *bold \*text* |
<b>bold</b> |
fett |
Kursiv | _italic \*text_ |
<i>italic</i> |
kursiv |
Unterstrichen | __underline__ |
<u>underline</u> |
unterstrichen |
Durchgestrichen | ~strikethrough~ |
<s>strikethrough</s> |
|
Spoiler | ||spoiler|| |
<tg-spoiler>spoiler</tg-spoiler> |
<versteckter Text> |
Inline-Links | [Linktext](http://.../) |
<a href="http://.../">Linktext</a> |
Schau dir das mal an |
Inline-Code | `Inline-Code` |
<pre>Inline-Code</pre> |
Inline-Code |
Code-Block | ```python |
<pre><code class="language-python">Code-Block</code></pre> |
Formatierungen können auch ineinander verschachtelt werden, allerdings kann Code naturgemäß keine weiteren Formatierungen beinhalten.
Weder in der Desktop-App, noch auf dem iPhone gibt es einen sichtbaren Unterschied zwischen Inline-Code und einem Code-Block. Ob es sich dabei um einen Bug handelt, oder das so beabsichtigt ist, konnte ich bisher nicht herausfinden.
Aus Kompatibilitätsgründen gibt es auch noch Markdown V1 (parse_mode=markdown
), diese bietet jedoch weniger Möglichkeiten als V2, daher gehe ich nicht weiter darauf ein.
Hinweise zu Markdown V2
- Innerhalb von
pre
undcode
müssen`
und\
mit einem vorangestellten Escape-Zeichen (Backslash\
) angekündigt werden. Möchte man also einen Backslash schreiben, muss man diesen doppelt ausführen (\`
oder\\
). - Innerhalb von
(...)
eines Inline-Links muss)
und\
ein Backslash vorangestellt werden (\)
oder\\
). - Innerhalb von normalem Text müssen die Zeichen
_
,*
,[
,]
,(
,)
,~
,`
,>
,#
,+
,-
,=
,|
,{
,}
,.
,!
mit einem vorangestellten Backslash maskiert werden. - Gemäß der offiziellen Telegram-API-Dokumentation muss eine Unterstreichung mit \r beendet werden, wenn sie in Kombination mit kursivem Text verwendet werden soll. Ich bin jedoch der Meinung, dass das nicht korrekt funktioniert, da das Steuerzeichen \r trotzdem mit ausgegeben wird.
___kursiv_unterstrichen__
wird zu kursivunterstrichen___kursiv%20unterstrichen_\r__
wird zu kursivunterstrichenr (das r wird mitgeschrieben)___kursiv%20unterstrichen___
verursacht eine Fehlermeldung
Hinweise zu HTML
- Es werden nur die angegebenen HTML-Tags unterstützt.
- Alle
<
,>
und&
Zeichen, die nicht Bestandteil eines HTML-Tags sind, müssen in der entsprechenden HTML-Schreibweise angegeben werden (<
wird zu<
,>
wird zu>
und&
wird zu&
). - Alle numerischen HTML-Entitäten werden unterstützt (
‰
wird zu ‰, usw.) - Die API unterstützt folgende benannte HTML-Entitäten:
<
,>
,&
und"
. - Mit verschachtelten
pre
undcode
Tags kann die Programmiersprache für einen Code-Block angegeben werden. - In alleinstehenden
code
Tags kann keine Programmiersprache angegeben werden.
Beispiele
Der Token und weitere Einstellungen
Sollte man mal den Token vergessen, kann man jederzeit @BotFather kontaktieren und diesen mit dem Befehl /token
abfragen. Oder solltet ihr, so wie ich hier, alles öffentlich gemacht haben, lässt sich mit dem Befehl /revoke
der Token zurücksetzen. Dabei wird dann ein neuer Token generiert, unter dem der Bot künftig erreichbar ist.
Es gibt noch weitere Einstellungen, die man vornehmen kann. Im Begrüßungstext zeigt euch @BotFather, was möglich ist. Am leichtesten geht es mit dem Befehl /mybot
, der euch ein interaktives Menü zeigt, mit dem man sich durch alle Einstellungen klicken kann.
Anwendung des Telegram Bots
Wer jetzt noch keine Idee hat, was man mit einem Bot nun anstellen soll, nachfolgend eine kleine Inspiration:
Man hat irgendwo ein Programm beliebiger Art laufen und möchte sich Fehlermeldungen oder Werte zusenden lassen. An der Stelle, wo die Fehlermeldung erzeugt wird, baut man sich die URL aus https://api.telegram.org/bot<Token>/sendmessage?chat_id=<User-ID>&text=
und einem dynamisch generierten Text zusammen, den man einfach an die URL anhängt. Anschließend lässt man das Programm die Gesamt-URL aufrufen und schon hat man die Fehlermeldung auf dem Mobiltelefon.
Für viele Systeme gibt es schon Telegram-Plugins, aber eben nicht für alle. Ein HTTP-Request ist dann der einfachste Weg, eine Nachricht zu versenden.
Weiterführende Links
- Proxmox: „Failed to connect to Server“ mit Safari auf MacOS - 28. Januar 2023
- Loxone: Benachrichtigung per Telegram - 15. Januar 2022
- Telegram: Nachrichten per Bot von der Heimautomation aufs Handy - 2. Januar 2022
1 Comment