Telegram Messenger mit Weblication verbinden

16.06.2016

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(100000000999999999).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);
  }
}