- Set ticket state (Offen / In Bearbeitung / Warten auf Schließen /
Geschlossen) from the ticket detail page via a live PUT to Zammad;
pending-close gets a default pending time and the change is synced back
so it isn't flagged as an external change
- Replace the disruptive meta-refresh with a JS auto-refresh that pauses
while a text field has unsent content or focus
- Persist reply/new-ticket drafts to localStorage and restore them after
a reload or accidental navigation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Internal Flask app that monitors the epi-helpdesk.zammad.com tickets via
the Zammad API, deployable as a systemd service behind Apache under
/episupport.
Features:
- Poller: session-login API sync, snapshot diff to detect agent changes
(status, owner, priority, closures, new replies); email notifications
- Dashboard: ticket overview with sorting, "not closed" filter and
highlighting of tickets with unconfirmed changes; per-item and bulk
"mark as read"
- Analytics: KPIs, response/resolution times, monthly SVG trend chart,
distributions (status/priority/group/agent), Excel export
- Conversation view: full per-ticket thread cached in the DB (avoids
proxy timeouts), inline image attachments, safe HTML-to-text rendering
- Write actions: reply to tickets and create new tickets with a
confirmation step and attachment upload (incl. clipboard paste);
self-triggered actions are synced back so they aren't flagged as changes
- Local timezone display (Europe/Berlin) for all timestamps
Includes deploy tooling: setup.sh, systemd units and Apache config.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>