Skip to main content

Telegram Benachrichtigungsdienst mit einer einzigen PHP

Ein Benachrichtigungsansatz, der schnell und einfach umzusetzen ist - in nur einer Datei, mit Ausnahme einer Konfiguration, wäre ein Träumchen. Das habe ich mir gedacht und habe das telegram.php ins Leben gerufen. Die Einstellungen zum Bot und zum Chat, sowie die Nachricht selbst, werden der PHP alle übergeben, sodass es eine Konfigurationsdatei überflüssig macht.

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.

Die zu übergebenden Parameter 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.

Beispielaufruf:

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, abernur zur Veranschaulichung und eventuell 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 - Funktioniert per CLI mit ?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
    return [];
}

$params = getParams();

// Parameter prüfen
if (empty($params['bot']) || empty($params['chatid']) || empty($params['msg'])) {
    echo "[FEHLER] Bot, ChatID oder Nachricht fehlt.\n";
    exit(1);
}

$bot = $params['bot'];
$chatid = $params['chatid'];
$msg = urldecode($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);

echo $result . "\n";
?>