Telegram Benachrichtigungsdienst mit einer einzigen PHP
Ein Benachrichtigungsansatz, der schnell und einfach umzusetzen ist - in nur einer Datei, in Ausnahme einer Konfiguration, wäre ein Träumchen. Das habe ich mir gedacht und habe das telegram.php ins Leben gerufen.
Diese Datei ist universell ausgelegt, betriebssystemunabhängig, also rein PHP - logisch, wie der Dateiname verrät. Alles, was benötigt wird, ist PHP selbst. Falls die PHP scripttechnisch aufgerufen wird, nicht nur im Browser, dann wird auch z. B. curl benötigt.
Der PHP müssen sämtliche Daten mit GET mitübergeben werden, damit das PHP diese intern verarbeiten kann.
Beispielaufruf:
php -f telegram.php "?bot=123456789:ABCdefGhIjKlMnOpQrStUvWxYz&chatid=987654321&msg=Hallo%20ich%20bins,%20ok?"
http(s)://sub.domain.tld/telegram.php?bot=123456789:ABCdefGhIjKlMnOpQrStUvWxYz&chatid=987654321&msg=Hallo%20ich%20bins,%20ok?
Zeile 1 zeigt einen Aufruf aus z. B. Bash.Zeile 2 zeigt einen Aufruf direkt im Browser.
Beide Varianten bringen das gewünschte Ergebnis. Hier dieDie Schalter bot, chatid und msg werden hier erklärt:
• bot= ist der BOT:TOKEN des Botfathers von Telegram,
• chatid= ist der Chat, an dem die Nachricht gehen soll,
• msg= ist die Nachricht, die übergeben wird.
DasBeispielaufruf:
http(s)://sub.domain.tld/telegram.php?bot=123456789:ABCdefGhIjKlMnOpQrStUvWxYz&chatid=987654321&msg=Hallo ich bins
curl "http(s)://sub.domain.tld/telegram.php?bot=123456789:ABCdefGhIjKlMnOpQrStUvWxYz&chatid=987654321&msg=Hallo ich bins"
php -f /srv/scripts/telegram.php "?bot=123456789:ABCdefGhIjKlMnOpQrStUvWxYz&chatid=987654321&msg=Hallo ich bins"
Zeile 1 zeigt einen Aufruf direkt im Browser. Macht an sich keinen Sinn, aber zum Testen.
Zeile 2 zeigt einen CLI-Aufruf via curl. Ideal für Scripte.
Zeile 3 zeigt einen direkten Aufruf via php -f - hier wird die Leier danach übergeben. Technisch okay, aber irgendwie unsauber.
Ich empfehle ganz klar Zeile 2 zur Automation, Zeile 1 und 3 sind eher zum Testen da.
Hier das Script:
<?php
// Telegram Send Script - VollständigFunktioniert ohneper Config,CLI allemit ?param=... und per HTTP-Aufruf
// Funktion zum Parsen der Query bei CLI
function getParams() {
global $argc, $argv;
// Wenn über HTTP aufgerufen
if (php_sapi_name() !== 'cli') {
return $_GET;
}
// CLI-Aufruf mit "?bot=...&chatid=...&msg=..."
if ($argc >= 2) {
parse_str(ltrim($argv[1], "?"), $params);
return $params;
}
// Keine Parameter
perreturn URL[];
}
$params = getParams();
// Parameter einlesen
$bot = isset($_GET['bot']) ? $_GET['bot'] : '';
$chatid = isset($_GET['chatid']) ? $_GET['chatid'] : '';
$msg = isset($_GET['msg']) ? $_GET['msg'] : '';prüfen
if (empty($bot)params['bot']) || empty($chatid)params['chatid']) || empty($msg)params['msg'])) {
echo "[FEHLER] Bot-Token,Bot, ChatID oder Nachricht fehlt.\n";
exit(1);
}
//$bot URL-decodieren= (ersetzt$params['bot'];
%20$chatid etc.= durch Leerzeichen und echte Zeichen)$params['chatid'];
$msg = urldecode($msg)params['msg']);
// Telegram API URL
$url = "https://api.telegram.org/bot$bot/sendMessage";
// POST-Daten
$data = array(
'chat_id' => $chatid,
'text' => $msg
);
// cURL-Request ausführen
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
// Ergebnis anzeigen
echo $result . "\n";
?>