العربية • Deutsch • English • Español • Français • Italiano • 日本語 • 한국어 • Nederlands • Polski • Português (BR) • Русский • Türkçe • 简体中文
Einbettbares Helpdesk- und Support-Ticketsystem für Phoenix-Anwendungen. Sofort einsatzbereite Support-Tickets, Abteilungen, SLA-Richtlinien und Agentenverwaltung als Hex-Paket.
- Ticket-Lebenszyklus — Erstellen, Zuweisen, Antworten, Lösen, Schließen, Wiederöffnen mit konfigurierbaren Statusübergängen
- SLA-Engine — Antwort- und Lösungsziele pro Priorität, Geschäftszeitenberechnung, automatische Verletzungserkennung
- Agenten-Dashboard — Ticket-Warteschlange mit Filtern, internen Notizen, vorgefertigten Antworten
- Kundenportal — Self-Service-Ticketerstellung, Antworten und Statusverfolgung
- Admin-Panel — Verwaltung von Abteilungen, SLA-Richtlinien, Tags und Berichten
- Dateianhänge — Drag-and-Drop-Uploads mit konfigurierbarem Speicher und Größenlimits
- Aktivitätszeitlinie — Vollständiges Audit-Log jeder Aktion an jedem Ticket
- Abteilungsrouting — Agenten in Abteilungen organisieren mit automatischer Zuweisung
- Tagging-System — Tickets mit farbigen Tags kategorisieren
- Ticket-Aufteilung — Eine Antwort in ein neues eigenständiges Ticket aufteilen und dabei den ursprünglichen Kontext bewahren
- Ticket-Schlummern — Tickets mit Voreinstellungen schlummern lassen (1 Std., 4 Std., morgen, nächste Woche);
mix escalated.wake_snoozed_ticketsMix-Task weckt sie planmäßig automatisch - Gespeicherte Ansichten / benutzerdefinierte Warteschlangen — Filter-Voreinstellungen als wiederverwendbare Ticket-Ansichten speichern, benennen und teilen
- Einbettbares Support-Widget — Leichtgewichtiges
<script>-Widget mit KB-Suche, Ticketformular und Statusprüfung - E-Mail-Threading — Ausgehende E-Mails enthalten korrekte
In-Reply-To- undReferences-Header für korrektes Threading in E-Mail-Clients - Gebrandete E-Mail-Vorlagen — Konfigurierbares Logo, Primärfarbe und Fußzeilentext für alle ausgehenden E-Mails
- Echtzeit-Broadcasting — Opt-in-Broadcasting über Phoenix PubSub mit automatischem Polling-Fallback
- Wissensdatenbank-Umschalter — Öffentliche Wissensdatenbank in den Admin-Einstellungen aktivieren oder deaktivieren
Fügen Sie escalated zu Ihrer Abhängigkeitsliste in mix.exs hinzu:
def deps do
[
{:escalated_phoenix, "~> 0.2.8"}
]
endFügen Sie Folgendes zu Ihrer config/config.exs hinzu:
config :escalated,
repo: MyApp.Repo,
user_schema: MyApp.Accounts.User,
route_prefix: "/support",
table_prefix: "escalated_",
ui_enabled: true,
admin_check: &MyApp.Accounts.admin?/1,
agent_check: &MyApp.Accounts.agent?/1| Option | Standard | Beschreibung |
|---|---|---|
repo |
erforderlich | Ihr Ecto-Repo-Modul |
user_schema |
erforderlich | Ihr User-Schema-Modul |
route_prefix |
"/support" |
URL-Präfix für alle Escalated-Routen |
table_prefix |
"escalated_" |
Präfix für Datenbanktabellennamen |
ui_enabled |
true |
Inertia.js-UI-Routen einbinden |
api_enabled |
false |
JSON-API-Routen einbinden |
admin_check |
nil |
Funktion (user -> boolean) für Admin-Zugang |
agent_check |
nil |
Funktion (user -> boolean) für Agenten-Zugang |
default_priority |
:medium |
Standard-Ticketpriorität |
allow_customer_close |
true |
Kunden erlauben, ihre Tickets zu schließen |
sla |
%{enabled: true, ...} |
SLA-Konfigurationsmap |
Führen Sie die Escalated-Migration aus:
mix ecto.gen.migration create_escalated_tablesKopieren Sie dann den Migrationsinhalt aus priv/repo/migrations/20260406000001_create_escalated_tables.exs oder installieren Sie über:
mix ecto.migrateBinden Sie Escalated-Routen in Ihren Phoenix-Router ein:
defmodule MyAppWeb.Router do
use MyAppWeb, :router
use Escalated.Router
pipeline :authenticated do
plug :require_authenticated_user
end
scope "/" do
pipe_through [:browser, :authenticated]
escalated_routes("/support")
end
endDies bindet ein:
- Kundenrouten unter
/support/tickets/*— Tickets anzeigen/erstellen/beantworten - Agentenrouten unter
/support/agent/*— Agenten-Dashboard und Ticketverwaltung - Admin-Routen unter
/support/admin/*— Vollständige Verwaltung (Abteilungen, Tags, Einstellungen) - API-Routen unter
/support/api/v1/*— JSON-API (wennapi_enabled: true)
{:ok, ticket} = Escalated.Services.TicketService.create(%{
subject: "Cannot log in",
description: "I'm getting a 500 error when trying to log in.",
priority: "high",
requester_id: user.id,
requester_type: "MyApp.Accounts.User"
}){:ok, reply} = Escalated.Services.TicketService.reply(ticket, %{
body: "We're looking into this issue.",
author_id: agent.id,
is_internal: false
}){:ok, ticket} = Escalated.Services.AssignmentService.assign(ticket, agent_id)
{:ok, ticket} = Escalated.Services.AssignmentService.auto_assign(ticket)# Auf SLA-Verletzungen prüfen (periodisch über einen Scheduler ausführen)
breached = Escalated.Services.SlaService.check_breaches()
# SLA-Statistiken abrufen
stats = Escalated.Services.SlaService.stats()Standardmäßig rendert Escalated Seiten über Inertia.js, wenn inertia installiert ist. Wenn Inertia nicht verfügbar ist, fallen Controller auf JSON-Antworten zurück.
Sie können eigene Frontend-Komponenten erstellen, die die Inertia-Seitenprops konsumieren, oder die JSON-API direkt verwenden.
Escalated bietet Plugs für die Autorisierung:
Escalated.Plugs.EnsureAgent— erfordert, dass der Benutzer den konfiguriertenagent_checkbestehtEscalated.Plugs.EnsureAdmin— erfordert, dass der Benutzer den konfiguriertenadmin_checkbestehtEscalated.Plugs.ShareInertiaData— teilt gemeinsame Escalated-Daten mit Inertia-Seiten
Escalated.Schemas.Ticket— Support-Tickets mit Status, Priorität, SLA-TrackingEscalated.Schemas.Reply— Ticket-Antworten und interne NotizenEscalated.Schemas.Department— Support-Abteilungen/TeamsEscalated.Schemas.Tag— Ticket-Tags zur KategorisierungEscalated.Schemas.SlaPolicy— SLA-Richtlinien mit prioritätsbezogenen ZielenEscalated.Schemas.TicketActivity— Audit-Log von Ticket-ÄnderungenEscalated.Schemas.AgentProfile— Agentenspezifische Profildaten
MIT-Lizenz. Siehe LICENSE für Details.