Intern:Hauptseite/UVdesk

Aus ArtisanCommerce Dokumentation
Version vom 25. Februar 2026, 21:09 Uhr von Admin (Diskussion | Beiträge) (Debugging-History)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

UVdesk Helpdesk System

Übersicht

UVdesk ist eine Enterprise-Grade Helpdesk-Lösung, die speziell für die Automatisierung von Support-Prozessen entwickelt wurde.

Der Tech-Stack

Das System basiert auf einer modernen PHP-Architektur:

Framework
Symfony (v4.4 / v5.4 LTS)
Datenbank
MySQL / MariaDB (Doctrine ORM)
Template-Engine
Twig
Mail-Handling
Swiftmailer (in neueren Versionen Symfony Mailer)
Paketverwaltung
Composer

Eigenheiten & Unterschiede zu Standard-Symfony

Obwohl UVdesk auf Symfony basiert, gibt es einige architektonische Besonderheiten:

Bundle-Architektur
UVdesk ist stark modularisiert. Fast alle Funktionen liegen in separaten Bundles unter vendor/uvdesk/.
Custom Routing
Die Routing-Logik für Member- und Customer-Bereiche ist eng mit der Datenbank verknüpft.
Service Decoration
Viele Kern-Services sind so konzipiert, dass sie durch eigene Implementierungen erweitert werden können.

---

Initial Setup

Dieser Bereich wird noch ergänzt. Geplante Themen:

DB-Init
Initialisierung der Schemata via Doctrine.
Admin-Setup
Ersteinrichtung über die CLI.
bplaced-Permissions
Spezifische Rechte für das Temp-Verzeichnis.

---

How-to's

Konfiguration der Mailbox

Beschreibung der Anbindung von IMAP/SMTP (iCloud, Office365 etc.)

---

Quirks & Fallstricke

Zugehörigkeit
Achten Sie beim Erstellen von Agents darauf, dass die Rollen-Zuweisung (Role) korrekt erfolgt, da Symfony-Security-Voter den Zugriff steuern.
Cache-Inkonsistenz
Nach jeder Änderung an Konfigurationsdateien muss der Symfony-Cache physisch geleert werden (siehe Debugging-Sektion).

---

Debugging-History

Hier werden spezifische Probleme dokumentiert, die in der ArtisanCommerce-Umgebung aufgetreten sind.

Fall 01: Swiftmailer Alias & Memory Limit

Datum
Februar 2026
Symptom
cache:clear schlägt fehl mit ServiceNotFoundException oder Memory Limit Exhausted.

Lösung A: Swiftmailer Alias Fix

In der config/services.yaml den Alias manuell setzen:

services:
    # Fix für RegisterPluginsPass Bug
    swiftmailer.mailer:
        alias: swiftmailer.mailer.default
        public: true

Lösung B: Memory Limit via Wrapper

Option 1 (Dauerhaft)
In der .env oder .env.dev Variable setzen: MM=512
Option 2 (CLI)
Befehl manuell ausführen: MM=512 php bin/console cache:clear

Fall 02: UVDesk Mailbox / Reply-To Alias Problem

Datum
Februar 2026
Symptom
Beim Refresh der Mailbox schlägt uvdesk:refresh-mailbox fehl mit
 Call to a member function getTicket() on null in
 MailboxService.php line 516.
Ursache
UVDesk prüft beim Erstellen eines Tickets die Reply-To-Adresse der eingehenden Email
 und versucht, eine passende Mailbox in der Konfiguration zu finden.  
 - Ist die Adresse nicht als Mailbox bekannt, gibt createTicket() null zurück → 
   $thread wird null → PHP-Fehler beim Aufruf von getTicket().  
 - Dies passiert oft, wenn Kunden an Alias-Adressen wie support@artisancommerce.at schreiben, die auf dasselbe IMAP-Postfach artisancommerce@icloud.com weitergeleitet werden.

Offizieller Ansatz / Best Practice

  1. Für jeden Alias eine eigene Mailbox in UVDesk anlegen:
Name: Support Alias
IMAP Username: artisancommerce@icloud.com
IMAP Passwort: <gleich wie Hauptpostfach>
IMAP Host/Port: <wie Hauptpostfach>
- UVDesk kennt die Adresse → Tickets werden korrekt erstellt.
- Emails können alle auf dasselbe Postfach zeigen, aber jede Adresse muss als Mailbox konfiguriert sein.

Alternative / Quickfix (Patch)

  1. Patch in MailboxService.php oder TicketService.php:
$mailbox = $this->mailboxService->getMailboxByEmail($ticketData['mailboxEmail']);
if (!$mailbox) {
    $mailboxes = $this->mailboxService->getAllMailboxes();
    $mailbox = reset($mailboxes); // Fallback auf Hauptpostfach
}
- Damit werden alle Emails verarbeitet, auch wenn die Reply-To-Adresse nicht offiziell als Mailbox konfiguriert ist.
- Tickets werden angelegt, $thread ist nie null, PHP-Fehler entfällt.

ASCII-Diagramm: Alias → Postfach → UVDesk

Kunde sendet Email
        |
        v
  Reply-To: support@artisancommerce.at
        |
        v
+------------------------+
| IMAP Postfach           |
| artisancommerce@icloud.com
+------------------------+
        ^
        |
  +------------------+
  | UVDesk Mailboxes |
  | ---------------- |
  | support@artisancommerce.at  --> Alias als Mailbox
  | help@artisancommerce.at     --> Alias als Mailbox
  | <Hauptpostfach>             --> Original
  +------------------+
        |
        v
  Ticket / Thread wird erstellt
- Die Mailbox-Zuordnung erfolgt anhand der Reply-To-Adresse.
- Ohne eingetragene Mailbox → $thread = null → Fehler.

Hinweis: IMAP Host / Port / Pfad

Beim Einrichten einer UVDesk-Mailbox über IMAP ist nicht nur der Servername entscheidend, sondern auch die **korrekte Pfadangabe für den Posteingang**.

Viele versuchen z. B.:

Host: imap.mail.me.com
Port: 993
SSL: true

→ Das funktioniert oft nicht, weil UVDesk intern den **exakten Pfad zum Posteingang** benötigt.

    • Besser** ist, den IMAP-Pfad direkt anzugeben, z. B.:
Host: {imap.mail.me.com:993/imap/ssl}INBOX

Erklärung in Klartext:

- `{imap.mail.me.com:993/imap/ssl}` → sagt UVDesk, dass der Server `imap.mail.me.com` auf Port 993 über SSL angesprochen wird. - `INBOX` → gibt den **exakten Pfad zum Posteingang** an.

    • Vorteile dieser Struktur:**

1. UVDesk kann den Posteingang zuverlässig abholen, auch bei Anbietern wie iCloud oder Exchange, die strengere IMAP-Strukturen haben. 2. Man kann **beliebige Unterordner oder spezielle Mailboxen** angeben, z. B. `Support`, `Tickets`, `Spam`, je nach der Folder-Struktur des IMAP-Postfachs. 3. Dies erleichtert z. B. Multi-Mailbox-Setups oder die Verarbeitung von automatischen Unterordnern für bestimmte Kunden oder Departments.

    • Praktischer Tipp:**

- Wenn Emails nicht abgeholt werden oder `$thread` null bleibt, immer prüfen, ob der **IMAP Host + Pfad korrekt angegeben** ist. - Mit dieser Syntax ist man flexibel und kann mehrere Folder gezielt in UVDesk konfigurieren.