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. Neu: Mastodon

149 Kommentare

  1. 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

  2. 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?

  3. 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

  4. 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.

  5. 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.

  6. 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)

  7. 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.

  8. 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?

  9. 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.

  10. 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?

  11. 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

  12. 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.

  13. 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

  14. 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.

    1. Ja, wie unter Schritt 4 durchexerziert: Für Bilder gibt es die photo-Option, für Dokumente die document-Option – wobei „document“ hier auch ein Video sein kann.

  15. Hallo
    Hab diesen Fehler gefunden, hatte -s vergessen vor -X zu setzen, jetzt bekomme ich aber leider keinen Request mehr, bleibt alles lehr

  16. 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?

  17. 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

  18. … 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 :(

  19. 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 … ;-(

  20. 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"
Schließen

Ooopsi!

Bitte deaktiviere Deinen Adblocker.