Telegram Messenger mit Weblication verbinden
Veröffentlichungsdatum: 16. Juni 2016
Änderungsdatum: 03. November 2022
weblication cms. telegram webhook api cloud
Mit dem PHP-Framework können Sie über Telegram mit Weblication® kommunizieren. Sie können Sich Informationen zukommen lassen oder auch Dateien direkt in die Cloud schicken.
Der Messenger Telegram bietet eine umfangreiche, gut dokumentierte API (https://core.telegram.org/api), mit deren Hilfe Sie über einen Chat oder direkt über einen selbst programmierten Bot Informationen und Dateien austauschen können.
In unserem Fall ist ein Bot ist nichts anderes, als ein PHP-Skript, das, nachdem es registriert wurde, wie ein Benutzer angesprochen werden kann. Bei jeder Meldung, die der Bot bekommt, sei es direkt oder in einer Gruppe, der er angehört, wird das registrierte Skript aufgerufen. Dort können Sie dann die Daten der Nachricht nach belieben weiterverarbeiten.
Dateien per Telegram an Weblication senden
Über die Webhook-Klasse können Sie, wie im Beispiel gezeigt, mit der Funktion $webhook->getPathPhotoTmp den Pfad ermitteln, an dem ein gesendetes Bild abliegt. Nun genügt es, das Bild, an der gewünschten Stelle abzulegen.
Informationen aus Weblication über Telegram senden
Sie können Telegram-Benutzern auch Nachrichten Senden, indem Sie die Funktion $webhook->sendMessage nutzen.
Beispiel-Bot, um per Telegram Dateien an Weblication zu senden
include($_SERVER['DOCUMENT_ROOT'].'/weblication/grid.php');
//
// Telegram BOT
//
// ACHTEN SIE DARAUF, DASS DIESE URL NICHT BEKANNT IST, UND DASS SIE ÜBER HTTPS AUFRUFBAR IST!
//
// Tragen sie hier Ihren Token ein, den Sie über BotFather zugeteilt bekommen.
$botToken = '123:abc';
// Rufen Sie dieses Skript anschließend als Admin mit dem Parameter ?action=setWebhook auf, um es Ihrem Bot mitzuteilen
$webhook = new wWebhook(array('BOT_TOKEN' => $botToken));
$callbackProcessMessage = function($webhook, $message){
$chat_id = $message['chat']['id'];
if(isset($message['text'])){
$text = $message['text'];
if(strpos($text, "/start") === 0) {
$webhook->sendMessage(array('chat_id' => $chat_id,
'text' => 'Hallo, senden Sie doch einfach ein Bild an Weblication.',
'reply_markup' => array(
'keyboard' => array(array('Hallo', 'Hi')), 'one_time_keyboard' => true, 'resize_keyboard' => true)));
}
else if($text === "Hello" || $text === "Hi") {
$webhook->responseMessage(array('chat_id' => $chat_id, "text" => 'Hallo'));
}
else if(strpos($text, "/stop") === 0) {
}
else{
$webhook->sendMessage(array('chat_id' => $chat_id, "text" => 'Ich habe verstanden: '.$text));
}
}
else if(isset($message['photo'])){
$pathPhotoTmp = $webhook->getPathPhotoTmp($message['photo']);
$pathPhoto = '/weblication/grid5/tmpHTTP/'.md5(mt_rand(100000000, 999999999).time()).'.jpg';
wRepository::copyDocument($pathPhotoTmp, $pathPhoto);
$urlPhoto = wRequest::getDomain().$pathPhoto;
$webhook->sendMessage(array('chat_id' => $chat_id, "text" => 'Das Foto liegt nun hier ab: '.$urlPhoto."\nWie findest du es?", 'reply_markup' => array(
'keyboard' => array(array('toll', 'nett', 'naja')),
'one_time_keyboard' => true,
'resize_keyboard' => true)));
}
else {
//$webhook->sendMessage(array('chat_id' => $chat_id, "text" => 'Wie bitte?'));
}
};
if(wSession::getUserType() == 'admin' && wRequest::getParameter('action') == 'setWebhook') {
$webhook->setWebhookURL(wRequest::getUrl());
exit;
}
else{
$update = json_decode(file_get_contents("php://input"), true);
if(isset($update["message"])){
$webhook->processMessage($update["message"], $callbackProcessMessage);
}
}
- Wie kann man mit Telegram und Weblication kommunizieren?
- Mit dem PHP-Framework können Sie über Telegram mit Weblication® kommunizieren. Der Austausch ist sowohl für Informationen (Nachrichten) als auch für Dateien möglich, die direkt in die Cloud geschickt werden.
- Wie funktioniert ein Telegram-Bot in diesem Kontext?
- In diesem Setup ist ein Bot ein PHP-Skript, das nach der Registrierung wie ein Benutzer angesprochen werden kann. Bei jeder Nachricht, die der Bot erhält (z. B. im Chat oder in einer Gruppe), wird das registrierte Skript aufgerufen. Dort können die Daten der Nachricht verarbeitet werden.
- Wie sendet man Dateien (z. B. Bilder) von Telegram an Weblication?
- Über die Webhook-Klasse ermitteln Sie mit z. B. <code class="codeInline">$webhook->getPathPhotoTmp(...)</code> den temporären Pfad, an dem das Bild nach dem Senden abliegt. Danach kopieren Sie die Datei an die gewünschte Stelle in Weblication (z. B. mittels <code class="codeInline">wRepository::copyDocument</code>).
- Wie wird der temporäre Speicherpfad eines gesendeten Telegram-Bildes in PHP ermittelt?
- Im Beispiel wird der Pfad so ermittelt: <code class="codeInline">$pathPhotoTmp = $webhook->getPathPhotoTmp($message['photo']);</code>. Damit greifen Sie auf die temporäre Datei zu, bevor sie in den Weblication-Bereich kopiert wird.
- Wie kann man das Bild in Weblication ablegen?
- Das Beispiel erstellt einen Zielpfad in Weblication, kopiert das Dokument dorthin und generiert anschließend eine URL: - Zielpfad z. B. <code class="codeInline">'/weblication/grid5/tmpHTTP/... .jpg'</code> - Kopie: <code class="codeInline">wRepository::copyDocument($pathPhotoTmp, $pathPhoto)</code> - URL: <code class="codeInline">$urlPhoto = wRequest::getDomain().$pathPhoto;</code>
- Wie sendet man Informationen von Weblication an Telegram?
- Sie können Telegram-Benutzern Nachrichten senden, indem Sie die Funktion <code class="codeInline">$webhook->sendMessage</code> verwenden. Im Beispiel werden damit Textantworten zurückgeschickt (z. B. beim Erkennen von bestimmten Kommandos oder Texten).
- Wie verarbeitet man Nachrichten wie /start oder /stop im Bot?
- Im Beispiel wird der Bot-Text geprüft: - Bei <code class="codeInline">/start</code> wird eine Willkommensnachricht gesendet. - Bei <code class="codeInline">/stop</code> ist der Zweig im Beispiel leer (hier könnte man entsprechende Logik ergänzen). - Andernfalls wird eine Standardantwort gesendet, die den empfangenen Text wiederholt (<code class="codeInline">'Ich habe verstanden: '.$text</code>).
- Wie kann der Bot per Tastatur (Reply Markup) interaktive Buttons anzeigen?
- Im Beispiel wird beim <code class="codeInline">/start</code> eine <code class="codeInline">reply_markup</code> Struktur übergeben. Diese definiert eine benutzerdefinierte Keyboard, z. B. mit Buttons wie „Hallo“ und „Hi“, und nutzt Optionen wie <code class="codeInline">one_time_keyboard</code> und <code class="codeInline">resize_keyboard</code>.
- Wie setzt man den Webhook für den Telegram-Bot ein?
- Im Beispiel wird der Webhook nur für Admins gesetzt, wenn der Parameter <code class="codeInline">action=setWebhook</code> übergeben wird. Dazu wird die URL mit <code class="codeInline">$webhook->setWebhookURL(wRequest::getUrl());</code> gesetzt. Anschließend kann das Skript Telegram den Bot-Callback über HTTPS bereitstellen.
- Warum sollte die Webhook-URL im Beispiel nicht bekannt sein und über HTTPS erreichbar sein?
- Im Beispiel wird betont, dass die URL nicht bekannt sein sollte und dass sie über HTTPS aufrufbar ist. Das dient der Sicherheit und verhindert unerwünschte Aufrufe bzw. schützt die Kommunikation zwischen Telegram und Ihrem Endpunkt.