WordPress-Support direkt in Nextcloud Talk als schlanker Workflow   Vor kurzem aktualisiert!


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.php verä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.

  1. In Nextcloud zu Einstellungen > Sicherheit.
  2. Scrollen zu App-Passwörter.
  3. Einen Namen eingeben (z. B. „WP-Support-Bot“) und auf Neues App-Passwort erstellen klicken.
  4. Passwort kopieren

Das CodeSnippet

Dann erstellt man ein neues Snippet in WordPress und füge den folgenden Code ein. Er macht drei Dinge:

  1. Er erstellt einen Menüpunkt „Support-Ticket“ mit dem WordPress-Icon.
  2. Er sammelt automatisch Name, E-Mail, URL und Browser-Info des Nutzers.
  3. 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.