Telegram-Nachrichten könnt Ihr auch im Terminal empfangen. Wir zeigen Schritt für Schritt, wie Ihr Messages von Telegram Bots oder Gruppen empfangt.

Wie Ihr Telegram-Bots erstellt und von der Kommandozeile aus Texte und Dateien sendet, haben wir Euch hier im Artikel gezeigt. Nun ist es aber auch nach der Lektüre leider nicht völlig selbsterklärend, wie Ihr anschließend Nachrichten empfangen könnt. Also zeigen wir Euch Schritt für Schritt, wie Ihr automatisch alle Nachrichten bekommt, die direkt an den Bot gerichtet sind oder aber in Gruppen gepostet werden, in denen der Bot Mitglied ist. Einzige Voraussetzung: Ihr habt einen Bot erstellt, wie in Teil 1 nachzulesen.

Die folgende Prozedur stellt den wohl einfachsten, sicherlich nicht einzigen oder elegantesten Ansatz dar – vor allem, was die Textverarbeitung angeht …

1. Bot-Privacy abschalten

Standardmäßig sieht Euer Bot nur Nachrichten, die per @EuerBot direkt an ihn gerichtet sind. Wenn er alle Nachrichten sehen soll, die in Gruppen gepostet werden, in denen er Mitglied ist, müsst Ihr den BotFather besuchen (mehr dazu in Teil 1) und diese Beschränkung über „/setprivacy“ deaktivieren (disable).

So einfach kommt Ihr an Updates – und eigentlich sind JSON-Objekte durchaus was Schönes.

2. Neue Nachrichten abrufen

Genau genommen ruft Ihr nicht Nachrichten, sondern in der einfachsten Form schlicht Updates ab – dazu gehören beispielsweise auch neue Einladungen in Gruppen und dergleichen. Die Grundversion:

curl -X POST „https://api.telegram.org/bot123123:ABCABCabcabc_FOO-A/getUpdates“

Damit bekommt Ihr alle Updates in einem eher unschönen Textpaket, wo auch Nutzernamen, IDs und so weiter enthalten sind, sowie die entsprechenden Feldnamen (das ganze ist ein JSON-Objekt). Das muss schöner werden.

So einfach kommt Ihr an Updates – und eigentlich sind JSON-Objekte durchaus was Schönes.

3. Text umformen

Im letzten Screenshot seht Ihr, dass der eigentliche Nachrichtentext immer mit „text:“ anfängt – ein guter Ansatzpunkt, um das Ergebnis zu filtern und zu formatieren. Eine Simpel-Variante:

curl -X POST „https://api.telegram.org/bot123123:ABCABCabcabc_FOO-A/getUpdates | egrep –color=always -o „text\“:.*}“

egrep sucht also nach „text:“, dann beliebig viele beliebige Zeichen (.*) und zum Abschluss eine geschweifte Klammer (}); per -o wird nur dieser gefundene Teil, nicht die ganze Zeile ausgegeben und per –color=always wird zur Verdeutlichung noch eingefärbt. An dieser Stelle natürlich der Hinweis: Mit dem Output ließe sich deutlich professioneller umgehen, aber es soll ja schön einfach bleiben.

Ein wenig greppen, und schon wird’s „ansehnlicher“.

4. Nachrichten kontinuierlich abrufen

Natürlich wollt Ihr neue Nachrichten sofort sehen, ohne jedesmal einen Befehl absenden zu müssen. Auch hier wieder die einfachst mögliche Variante:

watch -n 1 ‚curl -X POST „https://api.telegram.org/bot123123:ABCABCabcabc_FOO-A/getUpdates“|egrep –color=always -o „text\“:.*}“|cut -c18-| rev | cut -c 9- | rev‘

Der ganze Befehl wird einfach per watch-Befehl einmal pro Sekunde ausgeführt – und schon habt Ihr eine Live-Ansicht für eingehende Nachrichten. Nebenbei sind hier noch ein paar Klammern und der text-Kram vor der Nachricht verschwunden, was sich einfach mit den beiden cut-Befehlen machen lässt (das aber nur nebenbei, daher in Kürze: das erste cut schneidet die ersten 18 Zeichen ab; dann wird der Text per rev umgedreht, es werden die ersten neun Zeichen abgetrennt und dann wieder umgedreht.)

Fast schon brauchbar: Sekündlich aktualisiert kommen neue Nachrichten an den Bot oder dessen Gruppen rein.

Sinnvollerweise könntet Ihr neben der Nachricht auch noch den Absender mit ausgeben lassen und vielleicht noch ein wenig an der Formatierung feilen – aber als einfachstmögliche Quick&Dirty-Lösung sollte das reichen. Außerdem soll es ja nur zeigen, wie Ihr per URL/Kommandozeile an die Nachrichten kommt.

P.S.: Damit Ihr immer nur die letzten zwanzig aktuellsten Nachrichten seht, könnt Ihr hinten noch ein „| tail 20“ anhängen.
P.P.S.: Nach 100 Updates scheint Telegram keine weiteren mehr anzuzeigen, vielleicht ein Problem mit dem Offset-Wert … wird bei Zeiten vielleicht noch gelöst.

[UPDATE] Yep, es ist ein Offset-Problem: Standardmäßig bekommt Ihr maximal 100 Updates auf einmal – danach muss Telegram mitgeteilt werden, dass Ihr erst Nachrichten ab Update Nummer 100 haben wollt, dann ab 200, dann ab 300 und so weiter. Mit anderen Worten, Eure URL müsste wie folgt aussehen:

https://api.telegram.org/bot123123:ABCABCabcabc_FOO-A/getUpdates?offset=100″

Bekommt Ihr immer nur die alten Updates angezeigt, tragt als Offset-Wert die letzte update_id ein, die mit ausgegeben wird. Im Fall des Tutonaut-Telegram-Chats ist das die ID „586715624“. Für eine Live-Ansicht, wie sie hier im Artikel umrissen wird, müsstet Ihr also für den Produktivbetrieb noch einen Zählmechanismus einbauen. Eine Supersimpel-Quick&Dirty-Variante für die Anzeige der jeweils zehn aktuellsten Updates/Nachrichten als Skript:

#!/bin/sh
u=$( curl -X POST „https://api.telegram.org/bot123123:ABCABCabcabc_FOO-A/getUpdates“|egrep –color=always -o „update_id\“:.,“|egrep -o ‚[0-9]{8,}’|tail -1 )
u=$(($u-10))
curl -X POST „https://api.telegram.org/bot123123:ABCABCabcabc_FOO-A/getUpdates?offset=$u“|egrep –color=always -o „text\“:.
}“|cut -c18-| rev | cut -c 9- | rev | tail -20

Dieses Skript könntet Ihr dann etwa per

watch -n 1 telegram-updates.sh

aufrufen. In aller Kürze: In der Variablen $u wird die letzte update_id gespeichert und um 10 reduziert. Dann wird $u als Offset-Wert in die URL gesetzt. Die Anzeige der maximal 100 Updates startet also ab 10 Updates vor dem letzten Update – wenn Ihr immer 40 Updates sehen wollt, zieht eben 40 ab. Wenn jemand mehr über die $u-egrep-Baustelle wissen will: Einfach in den Kommentar posten, dann kommt mehr Input.

Über den Autor

Mirco Lang

Mirco Lang

Am Anfang war der C-64 des großen Bruders des besten Freundes in der Grundschule ...

Der echte Technikwahn kam dann mit einer Ausbildung bei Saturn - als Computer noch erklärt werden mussten, Soundkarten benötigten, ein gutes Monatsgehalt kosteten und das Internet nur bei Nerds und mit 38 kbp/s lief, bestenfalls.

Ein Studium der Informationswirtschaft und ein paar Jahre als Redakteur bei Data Becker später, sitzt hier ein freier Journalist, der auf Old-School-Computing (cli ftw!), Free Software, Frickelei, Kodi und "Hundedinger" steht - und Grauseligkeiten wie Bild und Heftig.co zutiefst verabscheut.

Und sonst so? Sauerländer, BSI-Mitarbeiter, untalentierter Musikinstrumentebesitzer und seit 24 Jahren Skateboarder, ein ziemlich alter. Und manchmal kommt das abgebrochene Philo-Studium wieder durch ...

Sag' Deine Meinung