Udalosti
Každá udalosť je final readonly trieda v RoundlyConsulting\Tickets\Events s ShouldDispatchAfterCommit: spustí sa, až keď sa zmena potvrdí, nikdy pri rollbacku. $actor je ten, kto konal (null pre systém). Každá udalosť o jednom tikete — 33 z 34, všetky okrem GuestConverted — implementuje Contracts\TicketEvent:
interface TicketEvent
{
public function ticket(): Ticket; // TicketMerged: the source, the ticket merged away
public function actor(): ?Model; // null for the system, and always for TicketOverdue,
// TicketDueSoon (the sweep) and TicketMentioned
}Dispečer Laravelu doručí udalosť aj listenerom rozhraní, ktoré implementuje, takže jeden typovaný listener zachytí všetky — audit log, prenos na webhook či kanál pre dashboard:
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Tickets\Contracts\TicketEvent;
Event::listen(TicketEvent::class, function (TicketEvent $event): void {
AuditLog::create([
'ticket' => $event->ticket()->reference,
'event' => class_basename($event), // TicketReplied, TicketAssigned, …
'actor_type' => $event->actor()?->getMorphClass(),
'actor_id' => $event->actor()?->getKey(),
]);
});Skôr než čokoľvek pošlete von, myslite na udalosti len pre agentov: TicketNoteAdded a TicketMentioned či TicketCommentUpdated / TicketCommentDeleted o poznámke alebo zadržanej odpovedi nesú obsah, ktorý žiadny žiadateľ nesmie vidieť.
Zoznam udalostí
| Udalosť | Payload | Spustí sa, keď |
|---|---|---|
TicketCreated | ticket, actor | Tiket bol založený. |
TicketUpdated | ticket, changed, actor | Zmenil sa predmet, popis alebo meta hostiteľa (changed obsahuje kľúče). |
TicketPriorityChanged | ticket, from, to, actor | Zmenila sa priorita (nie pri nastavení rovnakej hodnoty). |
TicketCategoryChanged | ticket, from, to, actor | categorize() presunulo tiket — aj pre každý tiket, ktorý presunie zmazanie kategórie. |
TicketDueDateChanged | ticket, from, to, actor | Termín nastavený, posunutý alebo zrušený. |
TicketRequesterChanged | ticket, requester, actor | Aj pri konverzii hosťa. |
TicketDeleted / TicketRestored | ticket, actor | Soft delete / obnovenie. |
TicketStatusChanged | ticket, transition, from, to, actor, system | Každá zmena stavu okrem počiatočnej (vrátane rollbackov a adopcií); from / to sú surové hodnoty z lifecycle. |
TicketResolved / TicketClosed | ticket, actor | Vstup do stavu kategórie Resolved / Closed. |
TicketReopened | ticket, actor | Odchod z Resolved alebo Closed do Open, Active alebo Waiting. |
TicketReplied | ticket, comment, role, actor | Zverejnená verejná odpoveď (nie zadržaná). |
TicketNoteAdded | ticket, comment, actor | Interná poznámka. |
TicketCommentUpdated / TicketCommentDeleted | ticket, comment, actor | Správa bola upravená / zmazaná — odpoveď, zadržaná odpoveď alebo poznámka: pred zobrazením komentár skontrolujte. |
TicketFirstResponded | ticket, comment, actor | Prvá verejná odpoveď agenta. |
TicketMentioned | ticket, comment, mentioned | Zmienka, len pre niekoho, kto smie komentár čítať. |
TicketAssigned | ticket, assignee, actor | Priradenie alebo prevzatie (nie pre toho istého riešiteľa znova). |
TicketUnassigned | ticket, assignee, actor | Riešiteľ bol odobratý (assignee je predošlý). |
TicketWatcherAdded / TicketWatcherRemoved | ticket, watcher, actor | Explicitné pridania a odobratia (automatické sledovania sú tiché). |
TicketTagged / TicketUntagged | ticket, tags, actor | Skutočne pridané / odobraté štítky (názvy) — TicketUntagged aj pre každý živý tiket, z ktorého štítok odoberie jeho zmazanie. |
TicketLinked / TicketUnlinked | ticket, related, type, actor | Prepojenie pridané / odobraté (duplicitné pridanie nespustí nič; prepojenie duplicates zo zlúčenia tiež nie). |
TicketMerged | source, target, result, actor | Zlúčenie bolo potvrdené; ticket() je zdroj. |
TicketAttachmentAdded / TicketAttachmentRemoved | ticket, media, actor | Súbory na úrovni tiketu (súbory správ patria comments). |
TicketFieldsChanged | ticket, keys, actor | Hodnoty vlastných polí nastavené alebo zabudnuté — kľúče, nikdy hodnoty. |
TicketOverdue / TicketDueSoon | ticket, dueAt | Kontrola termínov ho označila, raz na termín. |
GuestConverted | guest, user, tickets, actor | Hosť sa stal registrovaným používateľom (tickets = počet presunutých); nie je TicketEvent. |
GuestAccessRevoked | ticket, version, actor | Všetky odkazy pre hostí zneplatnené — explicitne, pri zlúčení alebo pri uzavretí s revoke_on_close. |
- Interná poznámka sa dostane aj k vlastným udalostiam comments-for-laravel (CommentCreated, CommentMentioned), ktoré sa spúšťajú pri každom komentári — pred upovedomením kohokoľvek skontrolujte meta.tickets.internal.
- LifecycleTransitioning / LifecycleTransitioned z lifecycle sa spúšťajú aj pre tikety; uprednostnite udalosti tiketov vyššie.
- Tickets::fake() udalosti nepodvrhuje — každé volanie sa aj tak vykoná —, takže Event::fake() funguje vedľa neho.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.