Telegram Bot Messages mit Textdateien austauschen

  • Hier habe beschrieben, wie ich mit einem Telegram Bot (im folgenden nur Bot) Messages mit Hilfe von Textdateien auf meinem Pi austausche.
    Es können also Textdateien angelegt werden, die vom Pi ausgelesen werden und dann wird eine Message in den Chat mit dem Bot gestellt. Diese Richtung habe ich Outbound genannt.
    Wird im Chat eine Antwort an den Bot gesendet, so kann diese Antwort als Textdatei abgelegt werden. Diese Richtung habe ich Inbound genannt.

    Om folgenden wird vorausgesetzt, dass ein Bot bereits eingerichtet wurde und dass die Chat-ID des Chats mit dem Bot genauso bekannt ist wie der Token zum Bot.

    Inbound (eine Nachricht wird im Chat an den Bot gesendet):
    Als erstes habe ich mir zunächst ein Verzeichnis /home/pi/telegram angelegt. Hier werden alle Messages als Textdateien abgelegt, die im Chat an den Bot gesendet werden.
    Danach habe ich mir dann ein Python-Script gebaut, das mittels telepot den Chat "beobachtet" und Messages, die an den Bot gehen, auslesen kann. Nach dem Auslesen werden die Messages als Textdatei gespeichert. In dem Python-Script ist der Token abzuspeichern.
    Das Python-Script habe ich als Attachement angehngt und sieht so aus:


    In dem Python-script wird ein Parser aufgerufen, der einen eindeutigen Dateinamen für die Textdatei erzeugt. Der Parser sieht dann so aus:

    In der Praxis sieht das nun wie folgt aus. Hier ein Screenshot des Telegram-Clients auf meinem Windows-PC (den Namen des Bot habe ich verdeckt):
    telegram_01l2sl5.jpg
    Und hier die Textdatei, die auf dem Pi dazu angelegt wurde (die Chat-ID habe ich verfälscht):

    Code
    Name: message_from_chat
    ID: 3xxxxxxxxx7
    Message: Hier sind wir wieder.

    Damit nun auch beim Starten des Pi das Ablegen der Textdateien automatisch erfolgt, habe ich mir eine Service-Datei für systemd angelegt, diese sieht so aus:


    Es hat sich herausgestellt, dass (leider) eine gewisse Wartezeit nach dem Start des Pi bis zum eigentlichen Start des Pollings vergehen muss, damit telepot eine saubere Verbindung zum Telegram-Server aufbauen kann. Diese Wartezeit ist mit ExecStartPre=15 angegeben. Vielleicht kann man diese auch verkürzen, aber ich habe keine Lust, das Herauszufummeln.

    Outbound (Versand vom Pi aus an den Chat des Bots):
    Will man nun eine Message vom Pi aus in den Chat mit dem Bot stellen, geht das bei mir wie folgt. Zunächst wird ein Unterverzeichnis angelegt, um die Textdatei zu speichern. Ich habe es /home/pi/telegram/outgoing_to_bot genannt.
    In dem Verzeichnis wird nun eine Textdatei abgelegt, die den folgenden Aufbau haben muss (den Token in Zeile 1 und die Chat-ID in Zeile 2 habe ich ebenso verfälscht):

    Code
    Token: xxxxxxxxxxxxx
    To: yyyyyyy
    Message: Und hier antwortet der Pi zurück.


    Anhand des Tokens und der Chat-ID ist eindeutig festgelegt, wo die Message hingehen soll.

    Mit einem Bash-Script wird nun in dem Verzeichnis in einer Schleife nach Dateien gesucht. Wird eine Datei gefunden, wird mit einem Aufruf von curl die Message an den Chat gesendet. Das Bash-Script sieht so aus:

    Das Script ist so gebaut, dass es mit Parameter start beginnt. Wenn man in einem anderen Terminal das gleiche Script mit Parameter stop aufruft, so beendet es sich.

    Hier ein weiterer Screenshot vom Telegram-Client, nachdem die Textdatei in dem Verzeichnis abgelegt wurde und rausgesendet wurde:
    telegram_02qvszj.jpg

    Um das Versenden von Messages an den Chat mit dem Bot nach dem Start des Pi automatisch beginnen zu lassen, habe ich mir diese Service-Datei für systemd aufgebaut:

    Mit diesem Konstrukt ist es nun möglich, dass aus Programmen auf dem Pi heraus die Textdateien erzeugt werden um Messages per Telgram zu versenden. Andererseits kann ein Progamm nun die Inhalte der Textdateien auswerten und darauf reagieren. Für mich stellt dies eine Basis dar, um mein Programm message2action entsprechend erweitern zu können.
    Abschließend sei erwähnt, dass auch mit dem Telegram-CLI eine solche Verarbeitung von Textdateien möglich ist. Das stelle ich auf Wunsch in einem anderem Beitrag gerne vor.

    Anregungen und Feedback sind natürlich willkommen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!