Developer Cookies Blog

Push-Benachrichtigungs-Service mit Nextcloud Talk

Push-Benachrichtigungen sind spezielle Meldungen, die ohne das Öffnen einer App auf dem Smartphone erscheinen. Der Service übermittelt jeweils relevante Ereignisse (z.B. Fehlerzustände eines Servers) an abonnierte Benutzer.

Am Markt existieren zahlreiche Push-Benachrichtigungs-Provider wie zum Beispiel Pushover. Beabsichtigt man diese, wie zum Beispiel aus Gründen Verletzung des Datenschutzes nicht nutzen, erfordert dies ein eigener Service. Nextcloud Talk ermöglicht, einen vollumfänglich eigenständigen Push-Benachrichtigungs-Service zu realisieren.

Das nachfolgende Beispiel beschreibt die Implementation und Versand einer Push-Benachrichtigung mit PHP-Skript und Nextcloud Talk von einem Server an ein Smartphone.

  1. Die Vorbedingung ist ein funktionsfähiger Nexcloud Service mit aktivierter Nextcloud Talk App. Zusätzlich ist es erforderlich, auf dem Smartphone Nextcloud Talk zu installieren und zum Nextcloud Service zu konfigurieren. Diese Installation und Konfiguration ist nicht Bestandteil dieses Artikels.
  2. Installation von curl auf dem System.
    sudo apt install curl
  3. In Nextcloud einen Benutzer für den automatischen Service eröffnen (z.B. „robotic“).
  4. Unter «User/Security» ein Applikation-Passwort erstellen.
  5. Einen Nextcloud Talk Kanal mit dem Benutzer für den automatischen Service (z.B. „robotic“) erstellen und Benutzer hinzufügen, an welche die Benachrichtigungen gesendet werden sollen.
  6. Kanal öffnen und die Channel-ID aus der URL kopieren (https://
    /index.php/call/<channel_id>).
  7.  Und jetzt folgt der magische PHP-Code welcher irgendwo auf den Server zu kopieren ist.
    <?php
    	function NextcloudTalk_SendMessage($channel_id, $message) {
    		$SERVER = "https://<address_to_nextcloud_service>";
    		$USER = "<nextcloud_robotic_user>";
    		$PASS = "<application_password>";
    
    		// notify hack
    		$data = array(
    			"token" => $channel_id,
    			"message" => $message,
    			"actorDisplayName" => "PYTHON-NOTIFICATION",
    			"actorType" => "",
    			"actorId" => "",
    			"timestamp" => 0,
    			"messageParameters" => array()
    		);
    
    		$payload = json_encode($data);
    
    		$ch = curl_init($SERVER . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $channel_id);
    
    		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    		curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    		curl_setopt($ch, CURLOPT_POST, true);
    		curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
    		curl_setopt($ch, CURLOPT_USERPWD, "$USER:$PASS");
    		curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    
    		// Set HTTP Header
    		curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    			'Content-Type: application/json',
    			'Content-Length: ' . strlen($payload),
    			'Accept: application/json',
    			'OCS-APIRequest: true')
    		);
    
    		$result = curl_exec($ch);
    		curl_close($ch);
    
    	}
    
    	$token = $argv[1];
    	$message = $argv[2];
    
    	NextcloudTalk_SendMessage($token, $message);
    ?>
    
  8. Service von der Kommandozeile testen
    php <path_to_file>/nextcloudmessage.php <channel_id> <message>

Related Articles