Erinnerungen in Telegram – 3 Wege
Erinnere mich täglich um 9.00 Uhr an Kaffee und jeden 1. und 15. eines Monats an Oma
Messenger sind perfekt für Erinnerungen, weil sie eh ständig laufen. Telegram bietet mehrere Möglichkeiten, Termine und Erinnerungen zu planen: Im Client selbst, einfach mit einem passenden Bot oder etwas individueller über ein simples, einzeiliges Skript. Einzige Crux: Die Ausgeburt der Hölle namens "Aufgabenplaner" von Windows ;)
Telegram-intern
Für einmalige Erinnerungen könnt Ihr direkt den Bereich Gespeichertes/Saved Messages im Telegram-Client nutzen: Einfach eine Nachricht tippen, dann per Rechtsklick auf den Absenden-Pfeil klicken und Set a reminder wählen. In Gruppen und sonstigen Chats gibt es dieselbe Funktion unter dem Begriff Schedule message.
Skeddy
Eine super einfache Variante für Erinnerungen ist der Skeddy: Ihr könnt den Bot über den Link hinzufügen oder im Telegram-Client danach suchen und dann hinzufügen. Anschließend müsst Ihr das Ding nur noch starten und könnt mehr oder weniger natürlichsprachige Anweisungen geben, standardmäßig auf Englisch: "Coffee in 5 Minutes" zum Beispiel. Über die Einstellungen stehen aber auch weitere Sprachen zur Verfügung (auch wenn das hier nicht so recht funktionieren wollte).
Skeddy hat auch ein Web-Interface, über das Ihr besonders bequem Termine anlegen könnt - auch komplexere Erinnerungen, beispielsweise für jeden Ersten des Monats um 18.00 Uhr.
Der Skeddy-Bot ist ziemlich gut und dürfte für die meisten Nutzer reichen. Andererseits: Vielleicht wollt Ihr Erinnerungen ja auch in Gruppen ausspielen, Dateien an Erinnerungen hängen oder einfach nicht von einem mehr oder weniger anonymen Bot-Betreiber abhängig sein.
Skript erstellen
Bots sind im Grunde nichts weiter als Skripte, die auf die Telegram-Bot-API zugreifen und Informationen aus einzelnen Chats auslesen oder eben posten. Das Skript selbst kann dabei aus einer einzigen popeligen Anweisung bestehen, beispielsweise: "Sende Nachricht XY an Chat ABC." Um dies als Erinnerung zu nutzen, muss das Skript dann nur lokal auf dem Rechner geplant werden - unter Windows standardmäßig mit dem Aufgabenplaner (Task Scheduler).
Zunächst benötigt Ihr dafür einen API-Schlüssel und die gewünschte Chat-ID. Das ist im Grunde recht simpel, dürfte auf Nicht-Techies aber regelrecht verstörend wirken ;) Jedenfalls haben wir einen eigenen Artikel dazu, über den Ihr API-Key und Chat-ID bekommt.
Das eigentliche Skript könnt Ihr zum Beispiel mit Bash realisieren, für Windows am besten zu haben via Git for Windows. Sicherlich ließe sich das auch über eine Windows-native Batch-Datei erledigen, aber Scripting unter Windows mit "Eingabeaufforderung" und Batch-Dateien ist nun mal die Hölle ... Hier mal ein Beispiel-"Skript" namens telegram_notifications.sh:
curl -X POST 'https://api.telegram.org/ABCDE:12345/sendMessage?chat_id=-1234567890&text="Erinnerung:%0A5.000%20Situps"'
ABCDE:12345 steht für den API-Schlüssel, später folgt die Chat-ID und ganz hinten der gewünschte Text. Leerzeichen und Zeilenumbrüche müssen im Text URL-kodiert angegeben werden, hier eben %0A für Space und %20 für Newline.
Aufgabenplanung
Und jetzt beginnt unter Windows das große Kotzen: Die Aufgabenplanung ist schlicht und ergreifend grausig. Nicht bloß ob der schlimmen Bedienoberfläche, sondern auch wegen eines dümmlichen Bugs (hier unter Windows 10): Man kann durchaus eine Aufgabe anlegen und zum Ausführen das obige Skript angeben - funktioniert. Öffnet man die angelegte Aufgabe aber anschließend erneut, etwa um den Zeitplan zu aktualisieren, schimpft das Mistding, dass irgendein Argument falsch wäre. Sprich: Keine Änderung möglich. Bei Batch-Dateien ist die Reaktion übrigens identisch.
Der Fehler muss bei Euch aber nicht auftauchen! Wenn doch, versucht Folgendes: Ändert den Nutzernamen für die Aufgabe im Reiter Allgemein über Benutzer oder Gruppe ändern > Erweitert > Jetzt suchen. Wählt dort einfach Euren ganz normalen Nutzernamen und bestätigt die Dialogfenster wieder. Aus dem Eintrag nutzernameabc dürfte dann NUTZERNAMEABC/nutzernameabc geworden sein - also nur eine andere Schreibweise. Den Hinweis auf diesen Quark findet Ihr auch bei Microsoft selbst. Und das Beste: Zumindest hier muss diese manuelle Namensbestätigung bei jedem Zugriff auf die Aufgabe erneut durchgeführt werden ... 🤡 Aber Hauptsache Win 11 hat runde Ecken ...
Im Netz, bei Stackoverflow & Co., geistern auch viele Lösungen zur Frage "Wie nutze ich Bash-Skripte mit dem Task-Scheduler in Windows" herum, die empfehlen, ein Hilfs-Batch-Skript zu verwenden, das geplant wird und wiederum das Bash-Skript aufruft. Das Problem gibt es hier zwar nicht, aber der Vollständigkeit halber:
Lösung 1: Ein Hilfs-Batch-Skript, das das Bash-Skript aufruft:
@echo off
cd /D G:\Arbeit\Scripting\Telegram-Stuff\
bash.exe -c "./telegram_notifications.sh"
Lösung 2: Ihr plant nicht das Skript selbst, sondern bash.exe mit dem Skript als Argument.
Ob Ihr nun ein Batch- oder Bash-Skript planen wollt, das Vorgehen ist immer identisch:
- Aufgabenplanung öffnen und Aufgabe erstellen ... anklicken.
- Unter Trigger den Zeitplan festlegen.
- Unter Aktionen das Skript angeben.
- Fertige Aufgabe über das Kontextmenü zum Testen ausführen.
Wenn Ihr das Skript als Argument übergeben wollt, tragt Ihr bei der Aktion den Pfad der Bash ein, hier zum Beispiel "C:\Program Files\Git\git-bash.exe", und in das Feld Argumente direkt darunter den Pfad zum Skript.
Wozu per Skript?
Per Skript ist das Ganze natürlich aufwändiger als per Bot und überhaupt, es gibt ja etliche Apps wie ToDoist, die auf derlei Dinge spezialisiert sind. Das Schöne an der Kombination Skript und nativer Aufgabenplaner: Keine Extra-Tools und maximale Flexibilität. Beispielsweise lassen sich statt Texten auch Dateien an Telegram senden. Die Erinnerungen können genauso für Gruppen genutzt werden. Es lassen sich beliebig komplexe Bedingungen für Erinnerungen skripten, etwa, um die Telegram-Erinnerungen nur abzusetzen, wenn aktuell die Sonne scheint.
Bei Bots hat zudem dessen Betreiber auch Zugriff die Daten Eurer Erinnerungen - und bei einem weitgehend anonymen Entwickler (irgendein Mikhail, scheinbar aus Russland) ist das zumindest nicht immer angebracht.
Generell wird es erst dann spaßig, wenn andere Dienste mit einbezogen werden. Das obige curl-Skript muss sich ja nicht auf fixe Texte beschränken. Beispielsweise könnte dieses auch erst Daten aus ToDoist auslesen und jeden Mittwoch um 15.00 Uhr auf noch offene To-Dos hinweisen. Statt APIs manuell abzufragen könnt Ihr natürlich auch auf iPaaS-Plattformen (hier ein Artikel dazu von mir bei dev-insider.de) zurückgreifen - IFTTT haben wir ja des Öfteren vorgestellt.