Software

Einführung in Telegram-Bots: Nachrichten und Dateien aus dem Terminal senden

Für Telegram gibt es sogenannte Bots – letztlich sind das einfach Nutzer-Accounts für Programme/Roboter statt Menschen. Diese Konten lassen sich dann per API/Schnittstelle ansprechen und ganz „normal“ in Telegram nutzen.

Ihr könnt also beispielsweise Umfragen für Terminvereinbarungen in eine Telegram-Gruppe einbauen, eigene Clients schustern, von der Kommandozeile aus Dateien, Fotos oder Text senden, Nachrichten als Telegram-Messages anzeigen und so weiter. Das Schicke daran: Den Bot erstellt Ihr ganz simpel über das Telegram-Standard-Konto Botfather im Dialog. Wir zeigen Euch Schritt für Schritt, wie Ihr einen Bot erstellt und von der Kommandozeile aus Texte und Dateien sendet. Vorwissen wird nicht benötigt.

[UPDATE] Im zweiten Teile zeigen wir Euch, wie Ihr Nachrichten im Terminal empfangen könnt.

[UPDATE 2] Da der Artikel schon was älter ist: Stand September 2017 funktioniert das Vorgehen für Telegram-Bots immer noch. Wenn irgendetwas nicht funktioniert, kontrolliert die Anführungszeichen!

Natürlich gibt es auch fertige Telegram-Bots, für Hundebilder und sowas, hier geht es aber darum, eigene Bots zu erstellen:

1. Botfather integrieren

Fügt zunächst den „Nutzer“ @botfather hinzu – über die Suchfunktion oder den Link auf der Homepage.

telegra-bots
Zunächst fügt Ihr den @Botfather hinzu – ein Angebot, dass Ihr nicht …

2. Telegram-Bot erstellen

Um Euren Bot zu erstellen, sendet dem neuen Nutzer Botfather einfach die Nachrichten

/newbot

und vergebt anschließend auf Nachfrage Nutzer- und Bot-Namen – letztere müssen auf bot enden. Zum Abschluss bekommt Ihr den sogenannten Token, eine längere Zeichenkette, die Euren Bot eindeutig identifiziert. Am besten kopiert Ihr Euch den Token-Code direkt. Optional könnt Ihr noch eine About-Seite, ein Nutzerbild für den Bot etc. einrichten – sendet einfach im Telegram-Client Befehle wie /setuserpic, /help und so weiter. Nicht vergessen: Ihr müsst den Bot jetzt starten und eine erste Nachricht versenden, sonst funktioniert der nächste Schritt nicht.

telegram-bot
Sehr cool: Bots erstellt Ihr im Dialog mit @botfather

3. ID des Chats herausfinden

Um eine Nachricht an einen Telegram-Chat oder eine Telegram-Gruppe zu senden, benögtigt Ihr die entsprechende Chat-ID, die Ihr über folgendes Kommando bekommt:

curl -X POST https://api.telegram.org/bot123456:abcde1234ABCDE/getUpdates

Zunächst: 123456:abcde1234ABCDE müsst Ihr natürlich durch Euren Token-Code ersetzen – das vorangestellte „bot“ muss aber bleiben. Das Linux-Standard-Werkzeug curl dient lediglich dazu, eine HTTP-Anfrage an Telegram abzusetzen. Unter Windows müsst Ihr zunächst curl für Windows installieren. Übrigens: cURL steht für „see url“, aber egal. Das Ergebnis dieser Anfrage ist etwas in der Art:

{"ok":true,"result":[{"update_id":638422092,
"message":{"message_id":9,"from":{"id":268963852,"first_name":"Gizlog"},"chat":{"id":268963852,"first_name":"Gizlog"},"date":1437389925,"text":"c"}},{"update_id":638422093, 

Wichtig ist hier die ID des Chats, in diesem Beispiel also 268963852. Anmerkung: Natürlich könnt Ihr Euren neuen Bot wie jeden anderen Account einer Gruppe hinzufügen – dann taucht beim obigen Ergebnis auch die ID des Gruppen-Chats auf, den Ihr nutzen könnt, um in die Gruppe zu posten. Falls keine Chats erscheinen: Postet eine Nachricht in den gewünschten Chat – ohne Nachrichten gibt es natürlich auch keine Updates!

telegra-bots
Die ID des Chats müsst Ihr auslesen.

4. Nachrichten und Dateien an Telegram senden

Auch zum Senden von Nachrichten nutzen wir wieder curl:

curl -X  POST 'https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=-4194264&text="texty text"'

Ihr seht schon, es ist wieder dasselbe Konstrukt wie oben, aber mit der Methode/dem Befehl „sendMessage“ und daran angefügt, abgetrennt per ?, zunüchst die Chat-ID und dann mit & abgetrennt der zu sendende Text. Und schon landet die Nachricht „texty text“ in Eurem Telegram-Account, abgesandt von „Nutzer“ TutoBot in unserem Beispiel. Das Senden von Dateien und Fotos ist dann selbsterklärend:

curl -X  POST "https://api.telegram.org/bot123456:abcde1234ABCDE/sendDocument" -F chat_id=-419426123 -F document="@/home/mirco/misto.txt"

Die Methode heißt nun sendDocument – allerdings muss die HTTP-Anfrage im Format „multipart/form-data“ gesendet werden, weshalb Chat-ID und Dokumentenpfad separad via F-Parameter an den curl-Befehl angehängt werden. In diesem Beispiel wird die Datei misto.txt an unseren Tutonaut-eigenen Gruppen-Chat gesendet (der Strich gehört zur Gruppen-Chat-ID!). Denkt an das @ vor dem Dokumentenpfad. Der Foto-Befehl ist komplett analog:

curl -X  POST "https://api.telegram.org/bot123456:abcde1234ABCDE/sendPhoto" -F chat_id=-4194264 -F photo="@/home/mirco/rathaus.jpg"
Messaging aus der Bash - viel einfacher kann API-Nutzung kaum sein.
Messaging aus der Bash – viel einfacher kann API-Nutzung kaum sein.

Telegram-Bots produktiv nutzen

Bis hierher ist das ganze freilich nur Spielerei – wie geht’s weiter? Zum einen könntet Ihr Telegram natürlich auch über Programmiersprachen ansprechen und ganze Programmlogiken darum herum stricken. Aber schon auf der Kommandozeile geht noch einiges: Statt eines fixen Texts könnt Ihr natürlich auch eine Variable einsetzen, also statt „texty text“ etwa „$text“ – und diese Variable ließe sich über Skript oder Nutzeranfragen ganz einfach besetzen. Ein Super-Simpel-Beispiel wäre ein Mini-Skript wie:

echo "Gib die Nachricht ein:" &&
read text &&
curl -X  POST "https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=-4194264&text=$text"

Wenn Ihr das etwa als Alias oder Skript abspeichert und dann aufruft, wird zunächst „Gib die Nachricht ein“ ausgegeben, dann gebt Ihr eben die Nachricht ein und per Return wird der eingegebene Text an Telegram gesendet. Soweit einfach mal als Einstieg.

Wenn was unklar ist, einfach fragen, „dumme“ Fragen gibt es bei so einem Thema eh nicht. Und was macht Ihr mit Bots? Oder würdet Ihr gerne machen? Was haltet Ihr überhaupt davon?

Wir haben mittlerweile übrigens eine ganze Reihe von Telegram-Artikeln, etwa zu einem schicken CLI-Client.

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de

149 Kommentare

  1. Seit dem Update auf Bot API Version 6.7 vom 21.04.23 funktioniert mein Curl Aufruf unter Windows nicht mehr. Auch der Wechsel auf die aktuellste Curl Version 8.0.1_7 hat nichts gebracht. Bei mir bricht er bei TLS Handshake ab („Recv failure: Connection was reset“). Hat jemand eine Idee was man da machen kann?

    1. Etwas wirklich Konkretes kann ich dazu leider nicht beisteuern, aber vielleicht in eine Richtung zeigen. Zunächst: Just getestet, mein alter curl-Aufruf im Terminal funktioniert nach wie vor. Und da auch die Release Notes nichts in der Richtung sagen, dürfte es zumindest nicht an der neuen API-Version liegen.

      Sofern an Einstellungen rund um Proxies, Firewalls und dergleichen nichts geändert wurde, würde ich es zunächst mal mit einem System-Update und -Neustart versuchen – alles, was mit Verifizierung zu tun hat kann an allen möglichen Kleinigkeiten scheitern. Bestätigen könnte das ein Versuch auf einem anderen System, zum Beispiel einen virtuellen Linux.

      Ansonsten bleibt Dir nichts anderes übrig, als mit allen Informationen nach Hilfe zu suchen, zum Beispiel bei Stackoverflow. Die abgekürzte Fehlermeldung mit TLS-Hinweis gibt nicht genug her.

  2. Hallo :)
    Sehr guter Artikel und schön erklärt. Ich bin neu auf dem Gebiet und habe eine Frage. Ist es möglich einen Telegramm Gruppenchat auslesen zu lassen und bestimmte Texte daraus automatisch ändern zu lassen, zum Beispiel wenn es sich immer die gleiche Textzeile handelt und dann in einen anderen Gruppenchat weiterleiten zu lassen. Sozusagen alles automatisiert ?

    1. Das geht auf jeden Fall. Einerseits könnte man das mit Python oder sonst einer Programmiersprache in schön machen – wenn man denn eine beherrscht. Und wenn es eine echte App werden soll, müsste das auch sein, zumal das dann auch irgendwie online ablaufen sollte.

      Andererseits ginge das auch über den Terminal – für kleinere Zwecke sollte das genügen. Oben im Artikel steht ja, wie man den Text senden kann. Im zweiten Teil steht, wie man Text auslesen kann. Insofern fehlt nur der Teil in der Mitte – und Texte lassen sich auf der Kommandozeile ganz wunderbar mit sed verarbeiten. Workflow wäre also:

      • Text aus Gruppe holen – wie in Teil 2 beschrieben
      • Geholten Text mit sed analysieren/ändern
      • Text in Gruppe schreiben – wie oben beschrieben

      Das ist sicherlich nicht die eleganteste Lösung, aber tendenziell einfacher, als „mal eben“ eine richtige Programmiersprache zu lernen. sed dürfte schon nicht jedem sofort gefallen ;) Die sed-Syntax ist zwar im Grunde ziemlich simpel, aber man muss sich mal mit regulären Ausdrücken befassen, um die gesuchten Muster im Text automatisch erfassen und verändern zu können. Falls Dir Regex nichts sagen: Hier haben wir einen Einstieg, und ein wenig mehr zu sed hier (Muster über mehrere Zeilen suchen) oder direkt im Terminal:

      curl cli.help/sed
      

      Der Aufwand für das ganze Vorhaben dürfte recht überschaubar sein – zuzüglich der Regex-Lernerei! Wenn Du dann am Ende, keine Ahnung, vielleicht Lobeshymnen auf den FC Köln automatisch auf den BVB ummünzen und in einem anderen Chat posten möchtest … – ginge.

  3. Hallo
    wie muss ich die URL gestalten das es mir die Nachrichten ohne Benachrichtigung sendet
    irgendwie mit disable_notification muss es gehen.
    Danke im Voraus

  4. Hallo Mirco,

    ich versuche mit folgendem Befehl das letzte (neueste) Foto aus dem Kamera Ordner (/var/lib/hkcam/data) über Telegram zu versenden:

    curl -X POST „https://api.telegram.org/bot123456:abcde1234ABCDE/sendDocument“ -F chat_id=-4194264 -F document=“@$(ls -rt1 /var/lib/hkcam/data | tail -1)“

    Leider bekomme ich ständig folgende Fehlermeldung:
    curl: (26) couldn’t open file „902511643.jpg“

    Folgender Befehl funktioniert, also liegt es nicht an der Datei:
    curl -X POST „https://api.telegram.org/bot123456:abcde1234ABCDE/sendDocument“ -F chat_id=-4194264 -F document=“@/var/lib/hkcam/data/902511643.jpg“

    Muss am Befehl etwas angepasst werden, oder kennst du einen Work-Around?

    Danke und Gruß, Mathias

    1. Ich habe es mal kurz mit einer vereinfachten Variante versucht, hier funktioniert folgende Schreibweise für den document=-Teil:

       document="@/d/tmp/"$(echo test.png)
      

      Heißt: Dein ls-Befehl gibt lediglich den Dateinamen aus, aber nicht samt Pfad! Du kannst den Pfad (hier eben /d/tmp/) manuell angeben oder versuch es mit

      ls $PWD/data/*.jpg
      

      Durch das $PWD bekommst Du den kompletten Pfad. Wie genau das am besten bei Dir passt, musst Du testen. Man könnte auch über den find-Befehl gehen oder sonstwas.

      1. Hallo,

        Ich möchte das bestimmte Informationen aus meiner Webseite an meinen jeweiligen Angestellten auf telegram automatisch weitergeleitet werden, wie kann ich das machen. Ein bot habe ich bereits erfolgreich erstellt. Lg

  5. Hallo kann man per bot auch einen Telegramm Kanal auslesen und automatisch zum Beispiel auf einem Blog Spiegeln?
    Ich betreibe einen Telegramm kanal wo ich Reiseberichte und Fotos teile. Ich würde den aber gerne auf meiner Website den nicht Telegramm Nutzern zugänglich machen!
    Website basiert auf WordPress in der aktuellen Version.

    1. Wie das Auslesen im Terminal geht, steht im zweiten Teil des Artikels. Dann hätte man die Inhalte schon mal lokal und von dort bekommt man sie auch wieder in WordPress gespielt, zum Beispiel über dessen CLI-Client. Das ist aber sicherlich mit etwas Frickelei verbunden.

      Da fällt mir ein, ich hatte mal eine Artikel dazu geschrieben, wie das mit IFTTT funktioniert – ist eine Zeit lang her, wäre aber vielleicht einen Versuch wert. (Auch wenn die kostenlose Version von IFTTT mittlerweile recht beschränkt ist.)

      Andere Lösungen habe ich spontan nicht gefunden, die vielen WordPress-Plugins scheinen auch keine Hilfe.

      1. Hallo Mirco
        Weist du wie man ein bot erstellt der von einem Kanal die Datei automatisch kopiert und in einem neuen Kanal postet ?

        Ich habe mit einem Freund 2 Kanäle, mein Kumpel postet was in seinem Kanal und wir wollen das ein bot das direkt kopiert vom Kumpel Kanal und automatisch in mein Kanal postet. Wäre sowas möglich ?

      2. Es gibt die Methode forwardMessage, damit sollte sich das machen lassen – also irgendwie in der Art: Erst Nachrichten (samt IDs) per getUpdates abrufen, dann per forwardMessage unter Angabe der ID weiterleiten. Wie genau, weiß ich aber gerade nicht.

        Alternativ ginge es natürlich „manuell“ per Skript: Nachrichten wie in Teil 2 beschrieben abholen, Dateien wie bei Stackoverflow beschrieben herunterladen und wie oben beschrieben senden – verpackt in eine Endlosschleife. Wenn man ein NAS oder sonst einen Rechner immer am Netz oder einen echten Server hat versteht sich … Das wäre aber wohl nur sinnvoll, wenn eben nicht die ganze Nachricht weitergeleitet werden soll, sondern zum Beispiel nur bestimmte Dateien. Oder mehrere Dateien als Archiv. Oder Dateien vorher in ein anderes Format konvertiert werden sollen. Oder oder oder …

        Alternativ gibt es auch fertige Forwarding-Bots, die das übernehmen – allerdings können dann natürlich Dritte mitlesen! Und da es da meist keinen Hersteller gibt, verzichte ich mal auf Links ;) Tendenziell müsste das auch mit IFTTT gehen; die Variante Telegram-Nachricht an WordPress habe ich früher mal beschrieben. Natürlich kann dann auch IFTTT mitlesen, aber das ist zumindest ein etablierter Anbieter. Nachteil: Die Nachrichten müssen ein Trigger-Wort und „/ifttt“ enthalten, was es vermutlich etwas unpraktisch machen dürfte …

    1. Hi Rico,

      Bin auch ein absoluter Neuling und hatte das selbe Problem. Habe dann in den Chat nochmal hallo geschrieben und die Seite nochmal aufgerufen mit dem gewünschte Ergebnis.

      Hoffe das hilft dir.

      Lg

  6. Hallo Mirco,
    vielen Dank für dein Tutorial.
    Soweit funktioniert alles.
    Was ich allerdings leider nicht hin bekomme ist, der sendMessage Methode in reply_markup etwas mitzugeben.
    Also z.B. ein forcereply. Ich schaffe es offensichtlich leider nicht den forcereply Typen korrekt anzugeben.
    curl -d text=’TEST‘ -d chat_id=XXXX -d forcereply(force_reply=true)
    Wenn ich nur curl -d text=’TEST‘ -d chat_id=XXXX schicke, funktionierts.
    Wenn ich dann noch das -d forcereply(force_reply=true) anhänge, bekomme ich in Telegram nur die Nachricht, ohne die Reply Funktion.
    Hast du oder jemand anderes eine Idee, wie ich den forcereply Typen korrekt einbaue?

    1. Okay, da musste ich ein wenig suchen – die API-Nutzung via schlichter Kommandozeile ist irgendwie nicht so toll dokumentiert, nutzt vermutlich kaum jemand ;) Was bei Dir noch fehlt ist der Part „reply_markup“, in dem wiederum „force_reply“ genutzt werden kann, also im Sinne von:

      &reply_markup='{"force_reply":true}'
      

      Allerdings muss der force_reply-Part URI-kodiert werden:

      Vorher: '{"force_reply":true}'
      Nachher: '%7B%22force_reply%22%3Atrue%7D'
      

      Der ganze Teil sieht dann so aus:

      &reply_markup='%7B%22force_reply%22%3Atrue%7D'
      

      Ein kompletter Link folglich:

       curl -X  POST 'https://api.telegram.org/botXXX/sendMessage?chat_id=-XXXXXXX&text="test"&reply_markup='%7B%22force_reply%22%3Atrue%7D''
      

      Das Kodieren kannst Du online erledigen lassen.

      1. Hallo Marco,
        du warst nicht der erste, den ich gefragt habe aber der Einzige, der mir diese Frage korrekt beantworten konnte.
        Vielen Dank und RESPEKT dafür!
        Ich hatte noch kurz Probleme mit den ‚ in deiner Antwort. Aber wenn ich die einfach weg lasse, klappt es tatsächlich.
        Auch dein Link für das Kodieren ist hilfreich.
        Darf ich dich nach deiner/einer Quelle für deine Hilfe fragen?
        Ich würde mich freuen, wenn ich mich da evt. nach weiterem Wissenswerten umschauen könnte.
        Viele Grüße
        Christian

      2. Hi Christian,
        schön, dass es klappt! Und ja, Anführungszeichen sind nahezu immer eine Option für Fehler, die wanken leider teils von Shell zu Shell (ich nutze unter Windows die Bash aus Git for Windows statt cmd).

        Was mich letztlich auf die Antwort gebracht hat war der schlichte Hinweis in einer Stackoverflow-Frage: You need to encode the markup text too. Da geht es zwar um Google Apps Script, aber für Shell-Skript/HTTP ließ sich dann entsprechend ableiten. Allgmein findet man deutlich mehr Infos zu derlei Dingen, wenn man mit JavaScript, Python oder sonst einer Skript-/Programmiersprache arbeitet.

        Ganz generell ist Stackoverflow die mit Abstand beste Seite für derlei Fragen, es gibt wohl kaum einen Entwickler, der noch ohne die Seite arbeiten könnte ;)

        Grüßend,
        Mirco

  7. Hallo lieber Mirko,
    Danke für deine Hilfe hier auf dieser Seite. Ich habe ein Problem mit dem Captcha bei der Begrüßung. Wie viele andere Gruppen auf telegram soll auch in meiner ein bestätigungstext erscheinen, wo man eine Schaltfläche anklickt und damit bestätigt, dass man ein Mensch ist und kein bot oder Roboter. Irgendwas haut da nicht hin. Der @GroupHelpBot liess mich eigentlich alles genau einstellen. Kann es sein, dass ich, wenn ich einen Willkommens Text an anderer Stelle definiert habe, dieser den Captcha Text überlagert oder verdrängt?

    1. Da bin ich so spontan leider überfragt, mit dem Group Help Bot habe ich mich bislang noch nie beschäftigt. Werde ich die Tage aber mal nachholen und mich melden, wenn sich da was ergibt.

      1. … okay, oder auch nicht, nach ein wenig Recherche. Der Bot speichert so ziemlich alles an Daten, was er in die Finger bekommt – bis zu 20 Jahre nach Löschung eines Telegram-Accounts. Wo? Wie? Keine Infos. Es gibt so gut wie keine Infos zum Hersteller (Bruno Andreuccetti), kein Impressum und vor allem absolut nichts über die Software dahinter. Und so etwas mache ich ungern zum Admin einer Gruppe.

        Um es ganz klar zu sagen: Der/Die/Das Betreiber des Bots kann alle Nachrichten mitlesen, mit Nutzer-IDs, Email-Konten aus Zahlungsvorgängen, Biographie und so weiter verknüpfen – und zwar über die betroffene Gruppe hinweg! Mir persönlich fallen da sehr schnell sehr viele sehr unredliche Einsatzmöglichkeiten ein. Gut, Telegram selbst kann das natürlich auch, aber Telegram als Serviceanbieter ist dann doch noch etwas anderes als ein Add-on einer Einzelperson, über die so gut wie nichts bekannt ist.

      2. Frage: ich habe eine Gruppe, aber keine Ahnung von bots. Über die Hilfe (hilfe-bot) bekam ich Infos und irgendwann das Angebot einen von den Typen privat an zu schreiben. Hab ich dann auch gemacht. Er hat mir sehr geholfen, bot erstellt und programmiert und anschließend hat er sie Gruppe wieder verlassen.

        Jetzt möchte ich gerne etwas am captcha ändern (Sprache und zeit). Ich erreiche ihn aber nicht mehr, bzw. Er antwortet nicht.

        Darum meine Frage: Hat er von außen zugriff auf den bot wenn er nicht mehr in der Gruppe ist? Habe ich Möglichkeit zu zugriff auf die Einstellungen des bot, wenn ich ihn nicht selbst programmiert habe?

        Im Notfall löschen ich alle bots und muss dann eben schauen, wie ich das regle, dass ich da wieder einen bot rein kriege. Ist das schwer für einen Laien ohne Vorahnung so einen bot ein zu stellen?

      3. Ja, das sind natürlich noch völlig ungeklärte Aspekte. Schwierig, da die richtige Entscheidung zu treffen. Aber derzeit bin ich auf diesen Bot in meiner Gruppe sehr angewiesen, da er mir die vielen asiatischen Trolle vom Leib hält.

    2. Inzwischen klappt soweit alles. Vielleicht musste man einfach eine Weile warten, bis sich im Netz von Telegram die Befehle durchgesetzt hatten. /reload hilft ja auch manchmal.

    1. Bist du der Admin der besagten Gruppe? Wenn ja, dann kannst du mit /Settings ein umfangreiches Konfigurations- Menü aufrufen, in dem du zum Beispiel einstellen kannst, dass kein Gruppen- Teilnehmer Bot-Kommandos aufrufen darf. Damit bist du schon mal abgesichert.

  8. Hallo,
    ich habe mehrere Telegram-Gruppen. Teilweise sind diese bereits mit Bots versehen (haben mir liebe Menschen er- und eingestellt) – teilweise haben wir jetzt neue Gruppen – bisher ohne Bots – in denen wir verschiedene Probleme haben und deshalb Bots einrichten würden. Somit denke ich ist es langsam mal an der Zeit, mich in die Thematik Bot einzuarbeiten. Dazu könnte man doch die in den anderen Gruppen vorhandenen Bots (z.B. Alexis, Rose etc.) auch für die neuen Gruppen nutzen?

    Ich bin zwar schon Ü50 – aber durchaus noch lernfähig – und möchte nicht immer die Zeit anderer Menschen in Anspruch nehmen mir die nächsten Gruppen mit Bots zu versorgen.

    Mein Problem ist – ich will keine neuen Bots erstellen, sondern nur die bereits vorhandenen nutzen – installieren – und entsprechend einstellen. Z.B. daß niemand Nutzer mit arabischen Schriftzeichen im Namen zufügen kann, eine Begrüßung neuer Mitglieder mit einer Reaktion die sie ausführen müssen etc.

    Hab jetzt läger gegoogelt – aber ich finde nur Anleitungen zum Erstellen neuer Bots – aber nicht zum Konfigurieren von bereits erstellten Bots. Kann mir da jemand Links geben – oder mir helfen?

    1. Bots lassen sich Gruppen genauso hinzufügen wie Nutzer, also einfach „Neuer Nutzer“ und dann den Bot suchen und hinzufügen. Bots, die noch nicht in den KOntakten sind lassen sich auch ganz normal über die Suchfunktion finden und dann im direkten Dialog starten – in der Regel erscheint bei Auswahl eines Bot-Kontos auch gleich entsprechende Information.

      Die Konfiguration läuft bei eigenen Bots in der Regel über den BotFather, dort zeigt zum Beispiel ein „/mybots“ Deine eigenen Bots an. Oder der Bot lässt sich im direkten Dialog konfigurieren – ein / zeigt die Optionen an.

      1. Danke für die Antwort. Das Zufügen ist nicht das Problem. Soweit bin ich schon drin in der Materie. Und man muß ihm dann Admin-Rechte geben – stimmts?

        Ich würde einfach die gleichen Bot für die neuen Gruppen nutzen wie in meinen bereits bestehenden – die mir ein netter Mensch instaliert und konfiguriert hat. Weil die einfach funzen. Aber an die Konfiguration trau ich mich noch nicht ganz ran. Vor allem finde ich das total doof – daß jeder in dieser Gruppe dann sehen kann was ich mache – und sich notfalls schlapp lachen kann. Gibt’s da keine Möglichkeit das im Hintergrund einzustellen – und dann erst auf die Gruppe loszulassen?

        Sehe ich das richtig – ich füge den Bot der Gruppe hinzu, gebe ihm Admin-Rechte – und schaue dann mit / was ich wie konfigurieren kann?

      2. Hast du es schon mal mit dem @GroupHelpBot versucht? Wenn du den mal über die Suchfunktion innerhalb Telegramm einmal ausfindig gemacht hast, kannst du ihn starten und konfigurieren. Es öffnet sich dabei ein eigenes Chatfenster, nur für diese Konfigurationen. Dort findet er dann von selbst die Gruppen, in denen du Admin bist. Du musst ihn dann als nächstes als Gruppenmitglied hinzufügen und ebenfalls zum Admin machen. Dann kannst du über eine recht anschauliche Oberfläche, in der auch Dinge erklärt werden (!), steuern. Es ist nicht immer „what you see is what you get“, aber indem man probiert, kommt man schon vorwärts.

    2. Liebe Katrin,
      @GroupHelpBot
      kannst du so einstellen, dass weder „chinesische“ noch „kyrillische“ oder „arabische“ Schriftnutzer reinkommen (separat einstellbar). Siehe hier meine ausführlichere Antwort dazu weiter unten / oben .

  9. Hi Mirco!
    Bei uns in der Gruppe ist ziemlich was los und wollten einfach mal schauen, welcher Nutzer die meisten Leute eingeladen hat, wer am aktivsten ist usw.
    Jetzt wollte ich mal fragen, ob man das irgendwie mit dem Bot machen kann.
    Bin ziemlich neu bei Telegram und bin dankbar für jede Hilfe!!

    Beste Grüße Dominik

    1. Sorry, übersehen … falls noch relevant:
      Sicher bin ich da nicht, aber die API scheint – nach kurzem Drübergucken! – derlei Informationen nicht direkt zu liefern. Vermutlich müsste man dafür dann doch etwas mehr programmieren. Die Möglichkeiten von Bots findest Du jedenfalls in der API-Übersicht ganz gut dokumentiert:
      https://core.telegram.org/bots/api

      Solche administrativen Aufgaben dürften aber nicht untypisch sein, insofern würde ich erstmal schauen, ob es nicht bereits irgendwo irgendwas Fertiges dafür gibt. Nennen könnte ich aus dem Stand allerdings keines.

  10. Hallo, ich versuche mich gerade in das Thema Bot einzuarbeiten.
    Ich habe in Botfather einen Bot erstellt und kann ihn nun verwenden um likes oder comments unter meine Beiträge zu stellen. In meiner Gruppe funktioniert das nicht.

  11. Hallo,
    ich lasse mir mit
    curl -X POST „https://api.telegram.org/bot12345:abcdefgh/sendMessage“ -F chat_id=-1234567 -F text=“%1 %2 %3 %4 %5 %6 %7″
    einen Satz in eine Telegram Chat schreiben. Geht soweit. Wenn der Satz aber Umlaute enthält geht es aber nicht und ich bekomme die Fehlermeldung: string must be encoded in utf-8
    Wie kann ich das umsetzen?

      1. Vielen Dank für deine Antwort. Das wird so sicher funktionieren. Ich benutze aber Platzhalter alsText. Der Satz kommt von einem anderen Programm. Es soll alles automatisch ablaufen. Gibt es einen besseren Platzhalter als die „%1“ die ich verwende? Oder muss ich einen Umweg über eine Text-Datei nehmen und die in utf-8 übersetzen?

      2. Ich habe nun eine Lösung gefunden. Am Anfang der Batch @chcp 65001 einfügen und die neueste Version von Curl benutzen. Windows 10 bringt auch Curl mit. Diese Version ist aber zu alt. Desweiteren den Pfad zu der neuen Curl.exe angeben, damit nicht die Version von Win10 benutzt wird. Beispiel:

        c:\curl\bin\curl -X POST "https://api.telegram.org/bot12345:ABCDE/sendMessage" -F chat_id=-12345 -F text="%*"
        
  12. Hi,
    weiß vielleicht jemand ob man mit dem Telegram Bot per VBA auch Umfragen erstellen kann? Wenn ja wie würde die https Befehlszeile denn aussehen?

    Derzeit habe ich nur ein VBA um Texte, Dateien und Fotos zu senden.

    Mit freundlichen Grüßen
    Chris

    1. In einer einzigen curl-Anfrage wird das nicht funktionieren. Aus dem Bauch heraus würde ich zum Posten in mehrere Chats die ID aus der curl-Anfrage einfach durch eine Variable ersetzen:

      id1=botABCDE:123456
      id21=botZDXYW:99887766
      curl -X  POST 'https://api.telegram.org/'$id1'/sendMessage?chat_id=-111111111&text="texty text"'
      curl -X  POST 'https://api.telegram.org/'$id2'/sendMessage?chat_id=-111111111&text="texty text"'
      

      Da könntest Du dann bei Bedarf per Schleife Dutzende Chats bespaßen.

  13. Vielen Dank für die Hilfe… leider funktioniert das wie o.g. nur bei Linux.
    Ich habe es nach langem tüfteln und mit Hilfe rausbekommen.

    Trotzdem vielen Dank

  14. Hey,
    Vielen Dank für deine Anleitung. Leider komme ich nicht weiter, weil ich die ChatID einfach nicht bekommen.
    Mein Bot ist schon einige Jahre alt und ich benutze ihn regelmäßig. Trotzdem bekomme ich das (auch weiter oben mehrmals von anderen erwähnte):
    {„ok“:true,“result“:[]}
    als Antwort mit curl…
    Ich habe dann extra nochmal einen neuen Bot erstellt mit dem selben Ergebnis. Neben „/start“ habe ich auch einfach mal „teeeest“ etc in den Chat mit dem Bot geschrieben. Leider ohne Erfolg.
    Hast du noch nen Tip für mich? Geht die Methode evtl nicht mehr um die ID zu erfahren? (Wenn man die ID mal hat, könnte es ja sein, dass es weiterhin funktioniert).
    Vielen Dank im Voraus
    Max

      1. Hey,
        vielen Dank für die schnelle Antwort.
        Leider steht da bei mir nur „@BOTNAME“ oder „@CHATNAME“ und keine ID…
        also im Chat mit botfather steht da „@botfather“ in meinem testkanel „@testkanal“.
        Nur bei der Meldung von Telgram, dass sich jemand im Netz angemeldet hat (ich – gerade im Browser), steht eine ID… Alle anderen Chats und Kanäle sind nur per Name benannt :(

      2. Da ich dasselbe Problem habe, wie Max M, nämlich die Chat ID nicht herausbekomme, habe ich Deinen Tipp probiert. Leider ohne Erfolg.
        Bei mir wird in der Adresszeile des Browsers nicht die Chat-ID, sondern die des Bots angezeigt :(
        Hat jemand eine andere Idee? Bkn am verzweifeln …

    1. Das dürfte an den Privacy-Einstellungen liegen: Im Botfather über /setprivacy deaktivieren oder versuch mal, eine Nachricht in dem Chat abszusetzen, die mit / beginnt, also zum Beispiel /foobar. Nachrichten mit / kann der Bot trotz gesetzter Privacy-Option lesen. In beiden Fällen nicht vergessen, erst eine Nachricht abzusenden, dann über curl das getUpdates absenden – sonst bleibt das Updaten natürlich leer.

      1. Hey,
        auch dir danke für die schnelle Antwort.
        Leider hat das keinen Erfolg gebracht. Beide bots waren tatsächlich auf „enable“ bei /setprivacy gesetzt. Das disablen hat aber leider nichts gebracht.
        Ich habe beide Bots abgefragt und beim zweiten kam die Meldung, dass zwei Bot Instanzen laufen (nach ein paar Sekunden, dann aber wieder die „leere“ Antwort).
        Ich habe bei meinem alten Bot schon sehr viele /1234abc Nachrichten geschickt seit es den gibt.
        EDIT: Während ich das hier geschrieben habe, habe ich weiter probiert und plötzlich ging es. Es scheint, als ob irgendwas ein paar Gedenk minuten braucht um zu reagieren. Außerdem scheint es wichtig zu sein, einen Kanal anzulegen und den Bot hierein einzuladen? Ich muss jetzt leider arbeiten und kann nicht weiter testen. Aber folgendes ist jetzt passiert:
        BOTalt ist in einem öffentlichen Kanal (von mir erstellt) zusammen mit mir. Ich habe dort über die WEBapi eine nachricht geschrieben. Wenn ich jetzt über CURL den BOTneu abfrage, bekomme ich IDs angezeigt der Nachrichten im Kanal mit dem alten Bot… Also irgendwie seltsam… Ich Frage den neuen Bot ab und bekomme die Nachrichten im Kanal mit dem alten Bot angezeigt? Wenn ich von der Arbeit komme, versuche ich es nochmal andersrum und dann versuche ich es nochmal nachdem ich den BOTneu mal lösche.

      2. So, ich bin jetzt zuhause und habe es getestet.
        Mit meinem Bestandsbot klappt es einfach nicht. Ich habe alles so gemacht wie beim neuen bot und bekomme einfach keine ID… sehr seltsam. Muss ich wohl zwei Bots unterhalten:(

      3. Also, um mich selbst zu korrigieren.
        Wenn ich mit dem Token des neuen Bots den CURL Befehl eingebe, bekomme ich die ID des ALTEN Bots angezeigt, sowie die Chat-ID des Kanals in dem der ALTE Bot ist.
        Andersrum klappt es nicht. Ist mir aber auch egal, da ich den NEUEN Bot jetzt gelöscht habe und über den CURL….sendMessage Befehl inkl Token des ALTEN Bots jetzt Nachrichten an den alten Bot und den Kanal mit dem alten Bot schicken kann. Alles etwas komisch, aber es klappt

  15. Servus

    folgende Frage
    Ich bekomme regelmäßig Faxe… aber immer mit Datum und Uhrzeit versehen. Das sich natürlich ändert..
    Hier muss ich ja den genauen Dateinamen angeben. Gibt es eine Möglichkeit das er das immer sendet trotz anderen ziffern?
    Am besten gleich mit der möglichkeit nach dem versenden an Telegram zu löschen im Ordner…..

    (BEISPIEL)
    curl -X POST „https://api.telegram.org/botxxxxxx:xxxxxxx/sendDocument“ -F chat_id=-12345678 -F document=“@//Fritz-nas/fritz.nas/Sony-StorageMedia-01/FRITZ/faxbox/25.08.19_14.19_Telefax.080000854334565.pdf“

    1. Es kommt ein wenig drauf an, was genau Du tust und was in den Ordner liegt. Angenommen in dem Ordner liegt nur diese eine PDF-Datei, die verschickt und dann gelöscht werden soll, dann wäre das hier ein möglicher Workflow:

      fax=$(ls *.pdf)
      curl -X POST „https://api.telegram.org/botxxxxxx:xxxxxxx/sendDocument“ -F chat_id=-12345678 -F document=“@//Fritz-nas/fritz.nas/Sony-StorageMedia-01/FRITZ/faxbox/$fax“
      rm $fax
      

      Du gibst also eine Variable statt des Dateinamens an. Wie genau Du den korrekten Dateinamen in die Variable bekommst, hängt von den Umständen ab. Ein „ls *.pdf“ funktioniert natürlich nur, wenn es nur ein PDF im Ordner gibt. Ansonsten müsstes Du mit regulären Ausdrücken arbeiten, also (recht komplexen) Beschreibungen des Dateinamens:

      fax=$(find . -maxdepth 1  -printf "%f\n" | egrep '^[[:digit:]]{2}\.[[:digit:]]{2}\.[[:digit:]]{2}_[[:digit:]]{2}\.[[:digit:]]{2}_Telefax.080000854334565.pdf')
      

      Die Regex nach egrep passt, wenn die Zeile mit zwei Ziffern beginnt (^), dann ein Punkt folgt (.), dann wieder zwei Ziffern, ein Punkt, zwei Ziffern, ein Unterstrich, zwei Ziffern, ein Punkt, zwei Ziffern, ein Unterstrich und dann Telefax.080000854334565.pdf.

      Zum Testen kannst Du auf Regex101 herumspielen.

  16. Servus

    folgende Frage
    Ich bekomme regelmäßig Faxe… aber immer mit Datum und Uhrzeit versehen. Das sich natürlich ändert..
    Hier muss ich ja den genauen Dateinamen angeben. Gibt es eine Möglichkeit das er das immer sendet trotz anderen ziffern?
    Am besten gleich mit der möglichkeit nach dem versenden an Telegram zu löschen im Ordner…..

    (BEISPIEL)
    curl -X POST „https://api.telegram.org/botxxxxxx:xxxxxxx/sendDocument“ -F chat_id=-12345678 -F document=“@//Fritz-nas/fritz.nas/Sony-StorageMedia-01/FRITZ/faxbox/25.08.19_14.19_Telefax.08213240.pdf“

  17. Hallo, ich betreibe einen Chat auf unserer Vereinshomepage. Ich lasse mir per Telegrambot eine Nachricht schicken, wenn jemand den Chat betreten hat. Ich möchte jetzt auch die Nachricht bekommen, dass sich der Chatuser auch ausloggt!
    Bin kein php oder html Kenner und habe mir bisher alles aus dem Internet zusammen gelesen, aber für die Logout habe ich absolut nichts gefunden.
    Kannst du mir helfen?
    Danke Christof

    1. Da muss ich passen, das ist eher eine Frage des eingesetzten Chats.

      Grundsätzlich sehe ich zwei Möglichkeiten: Entweder in der Chat-Software wird das Ein- und Ausloggen schlicht mit einem zusätzlichen (PHP-)Befehl versehen, sprich es wird eine URL aufgerufen, die der hier im Artikel beschriebenen Terminal-Variante recht ähnlich ist. Vielleicht hilft hier ein Beitrag auf Stack Overflow weiter. Oder wenn das nicht geht: Basteln/Scripting. Auch hier kommt es auf die Chat-Software an, aber vermutlich könnte man irgendwie die angemeldeten Nutzer auslesen, in einer temporären „Datenbank“ (Array, Textdatei, echte Datenbank) speichern, diese zum Beispiel fünfminütlich abfragen und bei Änderungen entsprechend per Telegram Meldungen verschicken.

      Aber wie gesagt, da kann vermutlich der Hersteller der Chat-Software eher helfen. Ich weiß, dass das nicht immer in Frage kommt, aber die einfachste Variante wäre vermutlich: Chat von der Website in eine Telegram-Grupp verlegen ;) Aber gut, da müssten dann alle Mitglieder mitziehen …

  18. Hallo,

    ich verwende einen Telegram-Bot mit ioBroker. Habe mir ein script geschrieben, das mir den Status meiner Smarthome-Geräte via Telegram schickt. Soweit funktioniert auch alles, allerdings bekomme ich nach jeder Nachricht eine zweite geschickt. Der Inhalt der Nachricht lautet: „Test message“.
    Warum wird mir diese Nachricht geschickt und wie bekomme ich die weg?

    LG,
    Philipp

    1. Ich muss ein wenig raten … Von Telegram dürfte die Nachricht eigentlich nicht stammen, ist mir jedenfalls noch nie untergekommen und ich wüsste auch nicht wo die herkommen sollte. Nutzt Du vielleicht den ioBroker telegram adapter von https://github.com/iobroker-community-adapters/ioBroker.telegram? Falls ja: In den Beispielaufrufen kommt exakt „Test message“ vor – da würde ich vermuten, dass Dir beim Aufsetzen irgendwo so ein Beispiel mit rein gerutscht ist. Die einzige Alternative, die mir spontan einfällt wäre, dass irgendein Smarthome-Gerät diese Nachricht schickt – erscheint mir aber nicht sonderlich plausibel.
      Wie gesagt, ich muss ein wenig raten, für alles andere gibt es da für mich zu viele Unbekannte (Skripte, genutzte Geräte etc.).

      1. Hallo Mirco,

        Ja ich benutze den https://github.com/iobroker-community-adapters/ioBroker.telegram Adapter.

        Habe ihn jetzt auch schon gelöscht und ihn nochmals installiert. Die Meldung wird weiterhin gesendet.

        Habe schon in allen Objekten die den telegram adapter betreffen und auch die von text2command nachgeschaut. Finde jedoch nichts was das auslösen könnte.

        Habe jetz ein einfaches JavaScript erstellt, und führe dieses aus.

        sendTo(„telegram“, „send“, {
        text: ‚Hallo Welt!‘
        });

        Immer noch die zweite nachricht die mir Test message anzeigt.

        Keine Ahnung.
        Danke für deine Antwort!
        LG,
        Philipp

  19. curl -X POST ‚https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=-4194264&text=“texty text“‚
    […]
    Und schon landet die Nachricht „texty text“ in Eurem Telegram-Account, abgesandt von „Nutzer“ TutoBot in unserem Beispiel.

    Das ist leider nicht der Fall, es kommt lediglich eine Fehlermldung (not found). Das war’s dann wohl. Ich liebe solche Anleitungen, die davon ausgehen, dass alles klappt, und wenn nicht, dann eben nicht…

    1. So ist das eben mit Anleitungen, man kann darin nicht jede Eventualität abbilden … Wenn Du ein paar mehr Infos als die unvollständige Fehlermeldung hast, wuppen wir Dich bestimmt noch auf die klappt-Seite. Wenn Du zum Beispiel „command not found“ meinst, könnte schlicht das Programm curl fehlen.

      Ich habe den Befehl eben nochmal getestet – funktioniert immer noch. In Deinem zitierten String steht der ganze http-String in Kommata, obwohl da einfache Anführungszeichen hingehören, also so:

      curl -X  POST 'https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=-4194264&text="texty text"'
      

      Ohne die Anführungszeichen würde der Terminal alles nach dem & als neuen Befehl interpretieren und entsprechend für den Nicht-Befehl „text“ ein „command not found“ ausgeben. Hilft das vielleicht schon?

  20. Für Dummies:
    Wann ist das online? Muss der PC dafür an sein? Muss man einen Server mieten? Oder läuft das über Telegrams Server dauerhaft?

  21. Irre ich mich, oder steht wirklich nirgends, wozu man das gebrauchen kann? Wenn ich richtig verstehe, kann ich Texte versenden, aber ich erkenne nicht, an wen ich die versenden kann. Gibt es vielleicht irgendwo eine Erläuterung, die man verstehen kann, wenn man nicht schon vorher Bescheid weiß?

    1. An wen Du schreibst, steht unter Schritt 2 – an die herausgefundene Chat-ID. Die Chat-ID steht für einen der Kontakte/Chats. Über die Namen der Kontakte geht das leider nicht.

  22. Hallo!

    Toller Beitrag!
    Gibt es auch eine Möglichkeit Videoanrufe zu tätigen?
    Ich möchte, dass mich der Bot auf Anfrage anruft und mir einen Livestream meines 3D Druckers sendet.

    1. Danke! Und: Sehr schöne Frage, hört man auch nicht alle Tage ;)
      Ich glaube eher nicht dran, die Bot-API scheint nichts zum Initiieren von Anrufen herzugeben, da müsstest Du vermutlich über die Telegram-API richtig programmieren, einen Video-Call-only-Client oder sowas. Sicher bin ich mir da allerdings nicht.

      Ich hab’s eher mit kruden Umwegen.
      So aus dem Bauch heraus: Man könnte bestimmt einen Telegram-(Web)-Client so einstellen, dass er immer nur die neueste Nachricht zeigt. Und da so ein Webcam-Livestream nur eine Reihe von Bildern ist, könnt man ihn in Einzelbilder zerlegen davon 25 pro Sekunde an Telegram schicken; oder wie viele auch immer die Technik überhaupt möglich machen würde. Einfacher dürfte es sein, ein Skript auf Zuruf ein X-Skunden langes Video zu machen und dann per Telegram zu verschicken – wenn es nur um kurze Kontrollen geht. So oder so ist es Skripterei-Bastelarbeit.

      Ich persönlich würde vermutlich den Aufwand scheuen und einfach die Weboberfläche einer Webcam nutzen …

      1. Die Bot-API könnte doch was hergeben: Beim Senden von Videos gibt es eine Option „supports_streaming“ – vielleicht läuft das eine Möglichkeit hinaus. Wenn die Kamera in eine Videodatei streamt – wer weiß, vielleicht ließe sich diese Datei senden und noch vielleichter würde das als Stream ankommen … Ich würde jedenfalls mal da ansetzen.

  23. Vielen Dank für diese Super-Beschreibung! Mein Sohn wollte für seine HomeMatic Überwachung diesen Dienst nutzen, hatte aber nichts zu Senden an Gruppen gefunden. Mit dieser Anleitung hat es bei mir auf Anhieb geklappt.

  24. Wie kann ich Telegram beibringen, mir zu bestimmten Zeiten das Guten Morgen und gute Nacht Wünschen abzunehmen? Wahlweise meinetwegen mit Emojis…

  25. Danke für die Anleitung
    die erst Hürde zur Erkennung der ChatID (Chat erst starten) könnte man evtl. noch einfacher darstellen

    und mit curl unter Windows war auch trickreich
    Die Hochkommata tausch war bei mir nicht genug, das Minus – vor der Chat-ID hat er auch nicht angenommen.
    Falls da noch jemand drüber stolpern sollte :)
    curl -X POST „https://api.telegram.org/botBOTID/sendMessage?chat_id=CHAT-ID&text=’texty text'“

  26. Erst einmal danke für das gute Tutorial hat mir sehr geholfen.
    Nun hätte ich eine Frage, am einer bestimmten Anzahl an Updates werden nur noch die gleichen Messages angezeigt, wie bekomme ich die neuesten Nachrichten?

    VG
    Sven

  27. Hallo

    Ich nutze mehrere Überwachungskamera mit Gprs Funktion, wo ich die Bilder per Mail bekomme, das ist aber sehr unübersichtlich.
    Ich möchte möchte diese Bilder direkt auf Telegram senden evtl auch direkt in eine Gruppe , gibt es da schon eine Anleitung.
    Danke schon im Voraus

    Gruß Michael

  28. Hallo ich möchte eine URL die mir die datei Test.mp3 zusendet wenn ich die URL öffne (ich habe curl nicht installiert)
    wenn ich diese Url
    … text=$text
    im Firefox öffne wird mir eine Nachricht mit „text“ gesendent bis jetzt habe ich es noch nicht hinbekommen das mir die MP3 geschickt wird.

    Kann mir da jemand helfen?

  29. Abend zusammen, kann mir jemand erklären ob es das auch als Group basierende Lösung gibt? Fand bislang nur Möglichkeiten für den benannten Channel. Ob der Bot dabei ist oder nicht, ist erst einmal für mich nicht wichtig.

    Lieben Gruß, schönen Abend
    Tobi

  30. Eine Frage zu den Gruppen – ich würde gerne automatisch Antworten an den Bot per Skript auswerten … dies funktioniert allerdings bei mir aktuell nur, wenn ich den Bot direkt anschreibe – schreib ich in die Gruppe, kriegt er nix mit. (es steht auch bei den Gruppeneinstellungen beim Bot „keinen Zugriff auf Nachrichten“) – ist das eine generelle Einschränkung oder mach ich da was falsch?

    Danke,
    Philipp

    1. „Keinen Zugriff auf Nachrichten“ ist die Standardeinstellung für die Privatsphäre, Du kannst Bots auch den Zugriff auf Nachrichten erlauben. Einfach im BotFather /setprivacy ausführen und dann die Privacy-Einstellung auf Disabled setzen.

  31. Hallo
    danke für deine Infos

    wie aber kann ich zum Beispiel

    hostname
    hostname –ip-address

    df -T /

    diese Infos in einem Telegram versenden?
    muss ich diese Infos in ein file schreiben
    dann das file auslesen mit cat auslesen und senden?

    1. Ah – Du bist schon selbst auf die Lösung gekommen ;) Dann war die Antwort von eben wohl überflüssig.

      Statt über eine Textdatei ließe sich das sicherlich auch über Variablen regeln, aber im Grunde passt das schon so wie Du geschrieben hast: Der Text muss Telegram schon direkt übergeben werden. Eine Datei schicken und sie quasi auf Client-Seite auszulesen, klingt aus dem Bauch heraus nicht wirklich machbar.

  32. Hallo
    ich hab ein problem bei Textfile versenden unter Debian (im Verzeichniss telegram ist das file und lesbar

    hostname > fdisk3.txt
    fdisk -l >> fdisk3.txt
    curl -X POST „https://api.telegram.org/botNUMMER -F chat_id=NUMMER -F document=“@/telegram/fdisk3.txt“

    im command line habe ich am schluss nur ein
    >

    1. Versuch es mal mit
      curl -X POST „https://api.telegram.org/botNUMMER“ -F chat_id=NUMMER -F document=“@/telegram/fdisk3.txt“

      Bei Dir fehlt ein Anführungszeichen hinter „botNUMMER“.

      1. Hallo, danke Für die Anleitungen:)
        Eine Frage dazu, gibt es eine Befehl, den Inhalt des Chats zu löschen. (Per bot Befehl)

      2. Das ist auch so gedacht ;) Wenn Du den Inhalt einer Textdatei schicken willst, nutz einfach den normalen Text-Senden-Befehl. Statt fixem Text setzt Du dort eine Variable, der Du wiederum vorher den Text zuordnest

      3. Das Prinzip mit der Variablen entspricht dem letzten Kapitel „Telegram-Bots produktiv nutzen“, nur dass die Variable hier nicht eingelesen sondern vorher manuell zugewiesen wird. Zum Beispiel das Senden des Inhalts der Datei MeineDatei.txt:

        a=$(cat MeineDatei.txt)
        curl -X POST „https://api.telegram.org/botBlaBlaBlaBlaBla/sendMessage?chat_id=-123456789&text=$a“‚

        Statt nach dem Gleichzeichen zu sendenden Text direkt zu schreiben, kommt dort einfach die Variable hin. Wie Du die Variable vorher belegst, ist Dir überlassen. Statt cat könnte man beispielsweise irgendwelche Befehle direkt „in die Variable schreiben lassen“, etwa:

        a=$(ls ./MeinVerzeichnis)
        a=$(curl https://www.tutonaut.de)
        a=$(MeinSkript.sh)

  33. hallo,
    #
    kann mir jemand helfen ?
    habe einen telegram bot .
    Nach diesem Skript sehe ich den ersten Post auf meiner PHP Webseite
    dafür steht die [0]
    möchte aber alle posts anzeigen lassen !
    Wie realisiere ich das ?

    $bottoken = „kjbkjebflkneföfokrogjorjgpr“;
    $website = „https://api.telegram.org/bot“.$bottoken;

    $update = file_get_contents($website.“/getupdates“);
    $updatea = json_decode($update, TRUE);

    $text = $updatea[„result“][0][„message“][„text“];
    print_r($text);

    1. Soweit ich das sehe benutzt du Array in php und um diese auszulesen brauchst du eine Schleife, die solange läuft bis kein Datensatz mehr übrig ist.
      Ich hoffe dir ein Stück näher an dein Ziel zu kommen, geholfen zu haben.

  34. Hallo Mirco

    habe nun nach deiner Anleitung mir einen Text schicken können, jedoch ein Docoment oder ein Foto will weder als URL Eingabe im Firefox noch als Terminal Eingabe funktionieren (Text funktioniert beides)

    #send message (funktioniert)
    curl -X POST ‚https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=123456789&text=“texty text“‚

    #send photo (funktioniert nicht)
    curl -X POST ’https://api.telegram.org/bot123456:abcde1234ABCDE/sendPhoto“ -F chat_id=123456789 -F photo=“@home/benutzer/test.jpg“‚

    #send docoment (funktioniert nicht)
    curl -X POST ’https://api.telegram.org/bot123456:abcde1234ABCDE/sendDocument“ -F chat_id=123456789 -F document=“@/home/benutzer/test.jpg“‚

    Habe nun einige Varianten durchgespielt mit den Anführungszeichen oder Leerzeichen, usw

    Kannst du mir hier bitte weiterhelfen, denn eigentlich sollte das doch zu schaffen sein.
    Zumindest denk ich so
    Der Fehler kann doch nur in der Zeile zu finden sein, oder?

    gruß Stefan

    1. #send message (funktioniert)
      curl -X POST ‚https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=123456789&text=“texty text“‚

      nach „texty text“ wird ein Beistrich angeführt, schreibe dies aber schon mit ’ falls es Ungereimtheiten kommen sollte

    2. Also in Deinen Beispielen passen die Anführungszeichen nicht: Vor https ein einzelnes und hinter sendDocument ein doppeltes. Wenn Du das erste änderst, sollte es passen. Zumindest wäre dann die Syntax korrekt. Wenn Dateipfad, ID und Token stimmen, dürfte es funktionieren.
      Falls nicht: Was kam denn für eine Fehlermeldung?

  35. Hi Mirco,
    ich habe eine interessante Anwendung deines Artikels gefunden, komme aber an einer Stelle nicht weiter.
    Der bot pusht Bilder die ich aus dem internet adressiere, jedoch keine lokalen Bilder vom NAS oder meinem PC.

    Die Anwendung wäre das Commando später in die Commandozeile der Axis CCTV Kamera einzutragen.
    Diese wird im Step 1 vorweg einen snapshoot erstellen und per FTP zu einem synology NAS laden.
    Im Step 2 soll der telegram Befehl abgegeben werden und das Bild zum Iphone senden.

    Der Trigger der Kamera ist Bewegungserkennung.
    Ergebnis: Bild auf dem Iphone & Watch wenn Bewegung an Haustür.

    Testen versuche ich unter Win10, Eingabe in Firefox Adressleiste.

    das klappt: (ID’s geändert)
    https://api.telegram.org/bot12345678:AAabababababababZw/sendPhoto?chat_id=141414141&photo=https://www.rattengift.com/wp-content/uploads/2011/04/ratten-paar.jpg

    das nicht:
    https://api.telegram.org/bot12345678:AAabababababababZw/sendPhoto?chat_id=141414141&photo=http:/192.168.1.44/image.jpg

    auf der IP ist das synology NAS mit apache Webserver.

    auch nicht so:
    https://api.telegram.org/bot12345678:AAabababababababZw/sendPhoto?chat_id=141414141&photo=„http:/192.168.1.44/image.jpg“

    Das Bild ansich ist im firefox über http:/192.168.1.44/image.jpg auch anzeigbar.

    Adressiere ich falsch?
    Fehler 400 „Bad Request: wrong file identifier/HTTP URL specified“

    Ich peil es nicht.. so schwer kann das doch nicht sein…
    Hast Du eine Idee für mich?

    1. Ich habe nie mit Online-Dateien herumgespielt, aber mal aus dem Bauch heraus: Du übergibtst die lokale Adresse 192.1268.1.44 an den Telegram-Server – und der kann mit Deiner lokalen Adresse vermutlich nichts anfangen. Eigentlich komisch, weil ja auch ein normaler Dateipfad funktioniert, aber spontan fällt mir da nichts besseres ein.
      Falls Du einen DDNS nutzt, versuch es mal über die Adresse.

  36. Hey…ich hab jetzt alles so gemacht, wie in der Anleitung beschrieben…ich hab zwar ne id, kann aber per message.sendmessage (ka, ob das richtige schrieben ist) keine Nachrichten an den bot versenden…woran liegt das?

  37. Hallo kannst du mir sagen wie ich Button in einen Bot einbauen kann?
    Also sprich das nicht zb /1 als Befehl eingeben werden muss sondern man einen Button dafür hat.
    Das wäre cool :-)

    1. Sorry, habe die Kommentare zuerst nicht gesehen. Man muss erst etwas dahin posten.
      „/start“ reicht übrigens nicht, wie oben geschrieben.

      1. Hallo,

        ich habe das gleiche Problem. Ich habe meinen Bot eingerichtet und ich kann auch FHEM aktion auslösen usw.
        Nun brauche ich allerdings die ChatID für Tasker.

        Jemand eine Idee?

        Habe testweise einen weiteren Bot erstellt (/start natürlich gemacht und mehrmals Texte geschreiben) da bekomme ich auch nur
        {„ok“:true,“result“:[]}

      2. Hab ich auch versucht. Beim neuen Bot das gleiche Ergebnis. getMe funktioniert, getUpdates immer nur {„ok“:true,“result“:[]}.
        Auch hat meine Suche an anderen Stellen des Netzes nix gebracht. Ein Tip wäre schön! Danke

  38. Danke für Deine tolle Anleitung. Ich benutze den Bot für ioBroker und Hausautomation. Das heisst, ich kann mit meinem Haus chatten und z.B. das Licht aus den Ferne einschalten oder Status Meldungen erhalten. Das funktioniert prima. Um nun mit IFTTT zu arbeiten, muss ich Befehle über die URL versenden, da es zur Zeit noch keine Telegram Instanz für IFTTT gibt. Um die Chat ID zu bekommen, bin ich Deiner Anleitung gefolgt, erhalte aber immer: {„ok“:false,“error_code“:404,“description“:“Not Found“} als Ergebnis.

    Am Mac Terminal benutze ich folgende Eingabe:

    sudo curl -X POST

    Wenn der Bot R2D2 heißt und er Username Peter ist, dann gebe ich ein R2D2, Peter@R2D2 oder R2D2_bot ein? Ich habe alle Varianten durch und bestimmt keinen Fehler beim Token gemacht. Was kann ich noch tun?

    1. Der Bot-Name muss gar nicht in die URL, nur der Token, den den der Botfather ausgegeben hat, so dass dann sowas rauskommt: …/botTOKEN/getUpdates. „bot“ steht hier nicht stellvertretend für den Bot-Namen, es sollten tatsächlich die drei Buchstabe bot sein. Wenn das hilft, gib doch mal kurz bescheid, dann füge ich noch einen Hinweis in den Text ein.

      1. Das hat geholfen. Jedenfalls etwas ;-)
        Ich bekomme jedoch immer {„ok“:true,“result“:[]} als response. Die Gruppe ist aktiv, ich habe Nachrichten versendet und vom Bot empfangen. Nur der Parameter getMe bringt die Chat ID vom Bot. Der Parameter getUpdates bringt immer nur das leere Ergebnis.

  39. Gute Beschreibung. Danke.
    Ich schaffe es nur leider nicht die ID zu Bekommen. Ich erhalte immer nur ein:

    {„ok“:true,“result“:[]}

    Die API stimmt, ändere ich eine Zahl kommt soort als Antwort ein Fehler.
    Haben die was geändert?
    Grüße,
    Gal

  40. Ich habe folgendes „Problem“ und bin mir nicht ganz klar darüber, ob ich das mit Telegram-Bots lösen kann bzw. sollte oder ob es das einfachere/bessere Methoden gibt :

    mehrere Personen werden per E-Mail von einem Server automatisch alarmiert und jeder muß dann entscheiden, ob er zum Einsatz fährt oder nicht. Bis jetzt gibt es keine Möglichkeit, die anderen alarmierten Personen darüber zu informieren, ob man kommt und wie lange die Anfahrt dauert. So kann es passieren, daß wir überbesetzt sind oder – noch schlimmer – zu wenige Leute sind, da jeder meint, der andere wird eh schon fahren. Das möchte ich mit einer Feedbackmöglichkeit an alle Alarmierten ändern.
    Es werden von den Leute die unterschiedlichsten Endgeräte, Betriebssysteme und E-Mail-Programme benutzt.

    Macht das Sinn, das mit so einem Telegram-Bot zu lösen ? Gibt’s Meinungen/Vorschläge dazu ?

    1. Mmmhhh, auf Anhieb klingt das so, als würde es helfen, statt oder zusätzlich zu Mails Telegram-Nachrichten an zu verschicken. Das könnte einfach an eine Gruppe geschickt werden, in der alle drin sind – Feedback könnte dann jeder ganz einfach geben. Ein wenig mehr Aufwand würde es bedeuten, das per Bot zu lösen, der zum Beispiel sowas könnte: Nachricht geht an die einzelnen Nutzer und diese antworten über einen Ja/Nein-Button und vielleicht noch eine Auswahl für die Zeit, etwa 15/30/45/60 Minuten.

      Generell würde ich sagen, Telegram wäre eine gute Lösung dafür, da es im Gegensatz zu Mail synchrone Kommunikation ist – und „Einsatz“ klingt jetzt eher nach was Dringlichen. Die Frage ist, wie die bisherige Mail verschickt wird. Variante 1: Macht das jemand manuell, kann derjeniger auch eine Telegram-Nachricht an die Gruppe verschicken – technischer Aufwand ist dann gleich null. Variante 2: Wenn die Mail automatisiert, etwa von einem Informationssystem, verschickt wird und dann einfach zusätzlich die Telegram-Nachricht raus soll, müsste das irgendwie per Skript gelöst werden – technischer Aufwand hängt vom Mail-Verschick-System ab, auf Telegram-Seite wäre es in etwa das, was hier im Artikel steht. Variante 3: Wenn das ganze komfortabel per Bot passieren soll, muss dafür ein wenig Logik erstellt werden – das dürfte nicht allzu schwierig sein, aber man bräuchte schon einen Menschen, der Grundwissen Scripting/Programmierung hat und die Zeit, sich einzuarbeiten.

      Alternativ kannst Du auch mal schauen, ob es nicht Quick&Dirty-Möglichkeiten gibt. Beispielsweise gibt es den @PollBot, der Umfragen samt Antwortmöglichkeiten per Button und Auswertungen erstellt. Du erreichst den Bot über die Suchfunktion von Telegram – vielleicht ließe sich der zweckentfremden.

      Wenn „Einsatz“ hier nicht zeitkritisch ist, und bei E-Mail muss ich eigentlich davon ausgehen, würde es mich allerdings wundern, wenn sich nicht irgendwo ein entsprechendes Stück Software finden lassen würde; beispielsweise als Add-on für ein Content Management System. Stichworte die hier zielführend sein könnten: Vereinsverwaltung, Leitsystem, Konferenz-Management, Echtzeit-Terminverwaltung (Doodle auf Bot-Basis wäre perfekt ;) ) oder vielleicht auch irgendwas aus dem Bereich Feuerwehr, da scheint es auch Open-Source-Leitsystem-Lösungen zu geben …

      Ist jetzt alles ein wenig Brainstorming-mäßig, aber vielleicht ist ja ein passender Ansatz dabei.

      1. Vielen Dank für die schnelle Antwort.
        Das Beispiel von der Feuerwehr geht schon in die Richtung, wir sind aber Teil des Rettungsdienstes. Alarmiert werden wir vollautoamtisch von der Leitstelle, aber in erster Linie über den Piepser (also Funk) und nur zusätzlich per E-Mail und SMS. Der Piepser ist aber nur Funkempfänger und kann nichts Zurücksenden. Dass das nicht optimal ist, ist bekannt, aber zur Zeit gibt’s dafür noch keine akzeptierte Lösung.
        Bis da was kommt wollen wir hier vor Ort zumindest eine Quick&Dirty-Lösung haben, die auch nur als Zusatzinfo genutzt werden wird – 100% darauf verlassen werden wir uns sicher nicht.

        Beim Leitstellensystem können wir nix ändern und sicherlich auch die ITler nicht dazu überreden; alles was wir machen ist sowieso nicht amtlich und damit Grauzone. Die Varianten 1 + 2 fallen also aus.

        Brainstorming war schon richtig. Ich war mir hier nur nicht im Klaren, ob ich das Bot-System richtig verstanden habe.
        Ich such dann also mal weiter und werd nich bei Bedarf nochmal melden.

        Vielen herzlichen Dank für die Mühe und die Antwort !

      1. result[] bleibt leer, wenn der bot zuvor nicht in Aktion getreten ist. Also einfach einmal den bot anschreiben. Der Botfather gibt dir bei der Erstellung des bots einen Link hierfür. Danach nochmal getUpdates ausführen und es sollte funktionieren.

  41. Hallo
    bei mir kommt der fehler,
    curl: (60) SSL certificate problem: self signed certificate in certificate chain
    More details here: https://curl.haxx.se/docs/sslcerts.html

    curl performs SSL certificate verification by default, using a „bundle“
    of Certificate Authority (CA) public keys (CA certs). If the default
    bundle file isn’t adequate, you can specify an alternate file
    using the –cacert option.
    If this HTTPS server uses a certificate signed by a CA represented in
    the bundle, the certificate verification probably failed due to a
    problem with the certificate (it might be expired, or the name might
    not match the domain name in the URL).
    If you’d like to turn off curl’s verification of the certificate, use
    the -k (or –insecure) option.

    was mache ich da falsch
    mfg Farmer

    1. Irgendwo auf dem Weg von Dir zum angesprochenen Server liegt ein ungültiges SSL-Zertifikat – wo und warum genau kann ich nicht sagen. Du könntest wie vorgeschlagen den Schalter „-k“ nutzen, der auch SSL-Verbindungen ohne Zertifikatscheck erlaubt. Im Zweifelsfall könnte die Transportverschlüsselung über SSL somit angreifbar/unsicher sein. Sofern es zunächst mal ums Testen geht und/oder keine lebenswichtigen Daten telegrammiert werden, ist das nun aber auch nicht so tragisch.
      Was das Problem an sich angeht: Funkst Du vielleicht aus einem komplexeren Netzwerk heraus? Konfiguriert da jemand selbst SSL? (Falls ja: DER muss es wissen.) Oder hat sich das Problem mittlerweile vielleicht schon erledigt?

  42. Zu dieser Anmerkung hätte ich ’ne Anmerkung ;)

    → »Anmerkung: Natürlich könnt Ihr Euren neuen Bot wie jeden anderen Account einer Gruppe hinzufügen«

    Denn wenn ich versuche, in einem Kanal von mir (in dem nur ich selbst Mitglied bin, da auch nur für mich selbst gedacht) meinen Bot hinzuzufügen (über den Web-Client), so erscheint bei mir folgende Fehlermeldung:

    ===
    Fehler
    Eine Parameter fehlt oder ist ungültig.
    Method: channels.inviteToChannel
    Result: {„_“:“rpc_error“,“error_code“:400,“error_message“:“USER_BOT“}
    Stack: Error
    at u https://web.telegram.org)

    Ist Dir dieser „Fehler“ bekannt?

    Danke!
    webaschtl

  43. … dann gilt dies bei mir = nur unter Windows ;)

    Denn curl -X POST ‚https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=-4194264&text=“texty text“‚ konnte ich NICHT ausführen. Erst nachdem ich die Anführungszeichen „umgedreht“ hatte …

    Doch ’ne ganz andere Frage: ließen sich mit einem solchen Bot auch die Nachrichten eines Kanals auslesen, den nur ich selbst „fülle“, quasi nur für eigene Zwecke nutze?

    DANKE & demnächst ’ne Gute Nacht! :)

      1. Hallo,

        Mit:

        curl -X POST

        ich bekomme keine chat ID sondern:

        {„ok“:true,“result“:[]}

        Gruss

      2. Auch wenn du es wahrscheinlich nicht mehr brauchst. Für die nach uns :D

        Du musst deinen Bot auch erst mit einer Nachricht anschreiben. Das Standardmäßige „/start“ reicht auch schon

      3. Bei mir lag es daran das ich bereits ein Beispielscript am laufen hatte und es somit keine „unbearbeiteten“ Updates gab.

      4. Hi Mirco,

        Vielen Dank für die gute Anleitung.

        Ich habe jedoch ein kleines Problem damit.

        Ich habe folgendes script:

        output=$(date)

        curl -X POST „https://api.telegram.org/bot123456:abcde1234ABCDE/sendMessage?chat_id=-4194264&text=“$output“

        Der bot soll schicken: Tue Dec 24 12:40:32 UTC 2019

        Es kommt jedoch nur folgendes an: Tue

        Frohe Weihnachten

        Malte

      5. Frohe Weihnachten!

        Das Anführungszeichen vor $output muss weg, dann sollte es funktionieren. Tendenziell bekommst Du nach dem Befehl oben auch nicht direkt das „Tue“, sondern erst ein „>“ im Terminal, das mit Enter bestätigt werden muss – weil eben auf ein schließendes Anführungszeichen gewartet wird. Ein Tue, oder hier ein „Mi,“ entsteht, weil das erste Leerzeichen in der Variablen quasi als Ende des Variablenwerts gewertet wird.

        Bei Bash-Bedingungen gibt es das auch, etwa:

        a="Hallo Welt"
        [ $a = $a ] && echo "echo wird nie ausgeführt, weil die Aussage unwahr ist ..."
        [ "$a" = "$a" ] && echo "Mit Anführungszeichen ist die Aussage wahr"
        Lustigerweise:
        [[ $a = $a ]] && echo "Wahr - aber das ist ein anderes Thema ;)"
        

        Das nur mal nebenbei. Die eigentliche Erkenntnis: Es sind immer die verdammten Anführungszeichen schuld :(

  44. Uuups – Danke für den Hinweis, das stimmte in der Tat was mit den Anführungszeichen nicht. Der POST-Befehl war in der Art:

    POST ' blabla "'
    

    sollte aber sein:

    POST " blabla " 
    

    also nur ganz normale Anführungszeichen um die Adresse herum. Hab’s geändert, sollte jetzt passen.
    Ich hatte das aus meinem Alias herauskopiert, weshalb hinten dran das „‚“ war – und dann habe ich irgendwann wohl verschlimmbessert. Wenn im Terminal was nicht klappt, sind’s aber auch fast immer diese ollen Anführungszeichen … ;-(

  45. Hallo,

    schöne Einführung. Allerdings will dein Befehl mit der Variablen nicht funktionieren. Als Resultat erhalte ich nur „$text“.
    Muss da noch was geändert werden?

    Gruss Andreas

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Schaltfläche "Zurück zum Anfang"