Telegram Messenger und die Bot API - Teil 2

Im ersten Teil - Telegram Messenger und die Bot API - bin ich auf einige Grundlagen eingegangen wie man einen Telegram-Bot einrichtet und diesen nutzt um sich Nachrichten, Informationen und sonstiges bequem auf sein Handy Handy zu schicken. Da sich dieses Werkzeug als äußerst praktisch erwiesen hat, habe ich mich dazu entschlossen den vorherigen Beitrag nochmal aufzugreifen und etwas aufzubohren sprich zu erweitern.

Es geht darum nicht mehr bloß irgendwelche Informationen zu einem vordefinierten Zeitpunkt zu erhalten, sondern vereinfacht gesagt in mehr oder weniger direktem Kontakt mit seinem Backend zu treten. Hier ein Beispiel wie man seinem Messenger-Bot beibringt auf eure Nachrichten zu reagieren. Um das Ganze relativ kurz und knackig zu halten werde ich hier nur die Einrichtung des Webhooks und das Verarbeiten eines Kommandos mit einem einfachen PHP-Script erklären. Bei allem weiteren was Programmierung angeht sind der eigenen Kreativität keine Grenzen mehr gesetzt. ;-)

Wie in Teil 1 schon erwähnt gibt es in der Dokumentation der Telegram Bot-API die Funktion setWebhook. Diese nutzt man um dem eigenen Telegram-Bot zunächst mitzuteilen wohin in Zukunft empfangene Nachrichten gesendet werden sollen. Hier übermittelt man einmalig u.a. eine URL zum Script auf eurem Server, welches die Nachrichten verarbeiten soll.

Der einmalige Aufruf (z.B. über den eigenen Browser) zur Einrichtung sieht dann wie folgt aus, wobei <HIER BOT-TOKEN> durch euren eigenen Auth-Token zu ersetzen ist. Gleiches gilt für den Parameter URL.

https://api.telegram.org/<HIER BOT-TOKEN>/setWebhook?url=https://www.meineseite.de/msg_receive_89572953227abdkjln438902.php&max_connections=5&allowed_updates=["message"]

Möchte man nicht nur Messages empfangen sondern auch jede andere Benachrichtigung (siehe Telegram Dokumentation) so lässt man den allowed_updates-Parameter einfach weg oder erweitert diesen um die jeweiligen Events.

Aus Sicherheitsgründen empfiehlt es sich das Script für die Verarbeitung in einen Unterordner zu packen, der einen "exotischen" Namen trägt, den man nicht erraten kann, oder gleich das Script so zu nennen. In meinem Beispiel heißt das PHP-Script:
msg_receive_8957295322$!p7abdkjln438902.php

Jetzt wo die Einrichtung des Webhooks klar ist, legen wir das besagte Script auf unserem Server an. Da Telegram die Status-Meldung per JSON-Object (JSON-serialized) an den Server schickt, müssen wir diese zunächst eingegen nehmen. Danach wandeln wir das JSON-Object in ein Array um.

$request = file_get_contents('php://input');
$request = json_decode($request, true);

if(!$request || !isset($request['message'])){
     //request ungültig
}else{
     //soweit sogut! hier nachricht auswerten
     //Hier Nachricht auswerten und dem User antworten.
}

Um sich einen Überblick zu verschaffen welche Informationen im Array liegen kann man dieses z.B. per $output = print_r($request, true); zurückgeben lassen und $output in eine Datei oder Datenbank auf dem Server schreiben.

In diesem Beispiel sind aber nur 3 Informationen interessant. Die Absender-ID, Benutzername und der Inhalt der Nachricht. Diese speichern wir in jeweils einer Variablen zwischen, für bessere Übersichtlichkeit:

$absender_id = $request['message']['chat']['id'];
$benutzername = $request['message']['chat']['username'];
$nachricht = strtolower(trim($request['message']['text']));

Im nächsten und letzten Schritt wird der Switch durchlaufen und wenn das Kommando bzw. die Nachricht bekannt ist (z.B. "Hello World") dann wird eine passende Antwort generiert und dem Benutzer per Telegram geschickt. Schickt man dem Bot also über Telegram "Hello World", antwortet dieser mit "hello <username>! how are u? ;)". Der Code dazu sieht dann so aus:

$answer = "";
switch ($msg)
{
     case "hello world":
          $answer = "hello ".$username."! how are u? ;)"; break;
}

if (strlen($answer)>0)
{
     //Antwort an User schicken; siehe Part 1
     $request = TELEGRAM_URL;

     $request = str_replace("<ID>", $chat_id, $request);
     $request = str_replace("<TEXT>", urlencode($answer), $request);

     $response = @file_get_contents($request);
     $positive_answer = "{\"ok\":true";
     $telegram_sent = (substr($response, 0, strlen($positive_answer)) == $positive_answer);
}

Die Switch-Anweisung kann nun um beliebige cases und Funktionen erweitert werden.

Der Code an sich ist sicherlich nicht perfekt, aber ich hoffe leicht verständlich und es hilft als kleinen Einstieg in die Materie.

Viel Spaß beim proggen! :)

Zuletzt bearbeitet: 7. Juni, 2018
Tags: , , , , , , , , ,

Verwandte Beiträge

Silly Billy Hair Salon

Es gibt eine neue Kinderapp aus dem Hause wonderkind: Mit der App Silly Billy Hair Salon kann nach Herzenslust gestylt, geschnitten, gewaschen und gefärbt werden. Ob Irokesen-Schnitt, Disko-Look, Sufer-Matte, kurz oder lang, lockig oder glatt – der Fantasie sind keine Grenzen gesetzt. Die Stylingkunden sind lustige Tiere mit niedlichen Charakteren, die genau wissen, was für [...] Weiterlesen »


App des Tages: Pokemon GO

Offensichtlich kann niemand dem Pokemon GO hype entfliehen, daher wird das heute zur App des Tages ausgerufen. :-) Viel Spaß beim Suchen und Fangen! Die Pokémon sind da draußen und du musst sie finden. Läufst du in deiner Nachbarschaft herum, vibriert dein Smartphone, wenn sich ein Pokémon in der Nähe befindet. Ziele und wirf einen [...] Weiterlesen »


App des Tages: Super Mario Run

In diesem Spiel bewegt sich Mario durch die jeweiligen Level vorwärts und du lenkst ihn mithilfe diverser Sprünge in Richtung Ziel. Marios Verhalten ist dabei vom Timing deiner Berührungen des Bildschirms abhängig. Dein Geschick entscheidet, ob es dir gelingt, Münzen zu sammeln, das Ziel zu erreichen und Mario dabei auch noch gut aussehen zu lassen. [...] Weiterlesen »


Kleine Helfer für den erfolgreichen Börsenhandel

BÖRSE ONLINE ist das etablierteste unabhängige Anlegermagazin in Deutschland. Seit mehr als 25 Jahren hilft es Anlegern Woche für Woche bei ihren Anlageentscheidungen. BÖRSE ONLINE richtet sich gleichermaßen an institutionelle Leser in Banken, Versicherungen, Vermögensverwaltungen und Kapitalanlagegesellschaften sowie an selbstentscheidende, kapitalmarktaffine Privatanleger. • Informiert schwerpunktmäßig über deutsche und internationale Aktien. • Fokussiert die Berichterstattung auf [...] Weiterlesen »


Projekt: pi_robot - Raspberry Pi, iPad und etwas Code

Der Raspberry Pi ist nach wie vor einer der beliebtesten Mini-Computer, nicht nur unter Bastlern. Kostengünstig (je nach Modell um die 30 bis 40,- EUR), flexibel im Anwendungsbereich und spätestens seit dem Raspberry Pi 2 Model B auch mit ausreichend CPU-Leistung und Arbeitsspeicher ausgestattet, um auch etwas komplexere Aufgaben zu lösen. Mit der 900MHz quad-core [...] Weiterlesen »