Man verwaltet eine WordPress-Seite (oder ein ganzes Multisite-Netzwerk) und Nutzer schreiben Support-Anfragen per E-Mail oder rufen an.
Wie wäre es, wenn deine Nutzer direkt im WordPress-Dashboard ein Ticket ausfüllen könnten, das sofort im Nextcloud Talk-Chat landet – inklusive aller technischen Daten und einem direkten Link zurück in den Chat?
In dieser Anleitung soll es genau darum gehen.
Das richtige Werkzeug (Snippet-Plugin)
Bevor man mit dem Code anfängt, braucht man einen Ort, an man den Code organisieren kann. Dafür kann man das Plugin Code Snippets verwenden.
- Warum? Es erlaubt, PHP-Code hinzuzufügen, ohne die
functions.phpverändern zu müssen. - Vorteil bei Multisites: Man kann das Plugin in der Netzwerkverwaltung aktivieren und das Support-Menü mit einem Klick auf allen Unterseiten verfügbar machen.
Nextcloud vorbereiten (App-Passwort & Token)
Damit WordPress Nachrichten an Nextcloud senden darf, muss man Vorbereitungen treffen.
1. Der Chat-Token
Man erstellt in Nextcloud Talk einen neuen Chat (z. B. „Support-Tickets“). Kopiert die URL des Chats. Wenn sie https://deine-cloud.de/call/abc12345 lautet, ist abc12345 der Token.
2. Das App-Passwort
Man sollte niemals das normale Passwort im Code verwenden, welches man sonst verwendet.
- In Nextcloud zu Einstellungen > Sicherheit.
- Scrollen zu App-Passwörter.
- Einen Namen eingeben (z. B. „WP-Support-Bot“) und auf Neues App-Passwort erstellen klicken.
- Passwort kopieren
Das CodeSnippet
Dann erstellt man ein neues Snippet in WordPress und füge den folgenden Code ein. Er macht drei Dinge:
- Er erstellt einen Menüpunkt „Support-Ticket“ mit dem WordPress-Icon.
- Er sammelt automatisch Name, E-Mail, URL und Browser-Info des Nutzers.
- Er sendet alles an Nextcloud und bietet dem Nutzer einen Rückkanal-Button an.
<?php
/**
* Support-Ticket an Nextcloud Talk senden
*/
add_action('admin_menu', 'add_nextcloud_support_menu');
function add_nextcloud_support_menu() {
add_menu_page(
'Support',
'Support-Ticket',
'read',
'wp-support-talk',
'render_support_form',
'dashicons-wordpress',
2
);
}
function render_support_form() {
$current_user = wp_get_current_user();
$site_url = get_site_url();
$success_msg = '';
if (isset($_POST['send_ticket']) && check_admin_referer('nc_support_action', 'nc_support_nonce')) {
// --- DEINE KONFIGURATION ---
$nc_url = 'https://deine-cloud.de';
$token = 'abc12345';
$username = 'DeinNextcloudNutzer';
$password = 'xxxx-xxxx-xxxx-xxxx'; // Dein App-Passwort
$talk_link = 'https://deine-cloud.de/call/abc12345'; // Der Rückkanal
// ---------------------------
$subject = sanitize_text_field($_POST['ticket_subject']);
$message_text = sanitize_textarea_field($_POST['ticket_message']);
// Nachricht für Nextcloud zusammenbauen
$full_message = "🆘 **NEUES SUPPORT-TICKET**\n\n";
$full_message .= "**Betreff:** {$subject}\n\n";
$full_message .= "**Nachricht:**\n{$message_text}\n\n";
$full_message .= "---\n";
$full_message .= "👤 **Absender:** {$current_user->display_name}\n";
$full_message .= "📧 **E-Mail:** {$current_user->user_email}\n";
$full_message .= "🌐 **Seite:** {$site_url}\n";
$full_message .= "🖥️ **Browser:** " . $_SERVER['HTTP_USER_AGENT'];
$api_url = $nc_url . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $token;
$response = wp_remote_post($api_url, array(
'headers' => array(
'Authorization' => 'Basic ' . base64_encode($username . ':' . $password),
'OCS-APIRequest' => 'true',
'Content-Type' => 'application/json',
),
'body' => json_encode(array('token' => $token, 'message' => $full_message)),
));
if (!is_wp_error($response)) {
$success_msg = '<div class="updated" style="border-left: 4px solid #0073aa; padding: 15px;">';
$success_msg .= '<p>✅ <strong>Ticket gesendet!</strong></p>';
$success_msg .= '<p>Rückfragen? <a href="'.$talk_link.'" target="_blank" class="button button-secondary">Zum Live-Chat</a></p>';
$success_msg .= '</div>';
}
}
?>
<div class="wrap">
<h1>🛠️ Support-Anfrage</h1>
<?php echo $success_msg; ?>
<form method="post" style="max-width: 600px; background: #fff; padding: 20px; border: 1px solid #ccd0d4; border-radius: 5px;">
<?php wp_nonce_field('nc_support_action', 'nc_support_nonce'); ?>
<p><label><strong>Absender:</strong></label><br>
<input type="text" value="<?php echo $current_user->display_name . ' (' . $current_user->user_email . ')'; ?>" disabled style="width:100%;"></p>
<p><label><strong>Betreff:</strong></label><br>
<input type="text" name="ticket_subject" required style="width:100%;"></p>
<p><label><strong>Nachricht:</strong></label><br>
<textarea name="ticket_message" required style="width:100%; height:150px;"></textarea></p>
<input type="submit" name="send_ticket" class="button button-primary" value="An Support senden">
</form>
</div>
<?php
}
Mit dem Setup hast man eine einfache systematische Support-Lösung geschaffen, die komplett auf den vorhandenen Open-Source-Tools basiert. Die Nutzer müssen erstmal das WordPress-Backend nicht verlassen und man hat die technischen Details (wie die E-Mail und die URL) sofort übersichtlich im Chat-System.
Wenn man eine Multisite betreibt, kann man das Snippet netzwerkweit aktivieren. So haben die Nutzenden aller Sites auch sofort direkte Kontaktmöglichkeiten.
