Priradenie a sledujúci
Jeden riešiteľ na tiket: polymorfný vzťah na akýkoľvek model, ktorý implementuje Contracts\Assignee.
Tickets::for($ticket)->by($lead)->assign($agent); // TicketAssigned
Tickets::for($ticket)->by($agent)->claim(); // the actor takes it
Tickets::for($ticket)->by($lead)->unassign(); // TicketUnassigned
$ticket->assignTo($agent, $lead); // model convenience, through the manager- Riešiteľ musí byť vhodný (isEligibleTicketAssignee()), inak InvalidAssigneeException. S Concerns\IsTicketAssignee je Authenticatable vhodný, keď je agentom pre tento tiket — prejde oprávnením agenta a AgentScope mu povolí na tikete pracovať —, takže nikto nedostane tiket, ktorý by nemohol otvoriť. Akýkoľvek iný model je vhodný vždy.
- Ten istý riešiteľ znova nič nespraví: žiadna aktivita, žiadna udalosť.
- Priradenie tiketu v počiatočnom stave spustí automatizáciu Assigned (new → open) a riešiteľ začne tiket sledovať (tickets.watchers.auto.assignee).
- claim() potrebuje aktéra, ktorý je vhodným riešiteľom. V API vyžaduje priradenie niekomu inému oprávnenie assign; prevziať tiket smie ktorýkoľvek agent; držiteľ sa môže sám odobrať.
- Pri založení bez riešiteľa sa balík opýta Contracts\AssignmentStrategy::assigneeFor($ticket) — predvolene predvoleného riešiteľa najbližšej kategórie.
Tím ako riešiteľ
Notifikácie dostanú jeho členovia:
use RoundlyConsulting\Tickets\Concerns\IsTicketAssignee;
use RoundlyConsulting\Tickets\Contracts\Assignee;
use RoundlyConsulting\Tickets\Models\Ticket;
final class Team extends Model implements Assignee
{
use IsTicketAssignee;
public function ticketNotifiables(): iterable
{
return $this->members()->where('active', true)->get();
}
public function isEligibleTicketAssignee(Ticket $ticket): bool
{
return true;
}
}Pre API pridajte triedu do tickets.assignables (['team' => Team::class]). Ako model tímu funguje aj teams-for-laravel.
Vlastné pravidlo priraďovania
Naviažte Contracts\AssignmentStrategy (assigneeFor(Ticket): ?Model) cez tickets.assignment.strategy alebo kontajner — round-robin, podľa vyťaženia, podľa potrieb vášho helpdesku. Beží na uloženom tikete, ktorý už má projekt, kategóriu, prioritu a kanál.
Sledujúci
Sledujúci tiketu — používatelia, akýkoľvek model alebo TicketGuest (hosť v kópii):
Tickets::for($ticket)->by($agent)->watchers()->add($colleague)->remove($former);
Tickets::for($ticket)->by($user)->watchers()->watch(); // the actor; ->unwatch()
Tickets::for($ticket)->watchers()->has($colleague); // bool
Tickets::for($ticket)->watchers()->all(); // TicketWatcher rows, watcher loaded- Unikátne pre (tiket, sledujúci); opätovné pridanie nič nespraví. watch() bez aktéra vyhodí InvalidWatcherException.
- Automatické sledovanie (tickets.watchers.auto.*): žiadateľ pri založení, riešiteľ pri priradení, agenti, ktorí píšu, a (predvolene vypnuté) spomenutý čitateľ. Automatické sledovania sú tiché — žiadna aktivita, žiadna udalosť. TicketWatcher::$auto ich odlíši; add() na niekoho, kto už sleduje automaticky, z neho urobí zámerné sledovanie.
- Odovzdanie žiadateľa (changeRequester()) odstráni automatické sledovanie predošlého žiadateľa, takže tiket už nevidí a nedostáva jeho notifikácie; sledovanie, ktoré agent pridal zámerne, zostane. Odkazy predošlého žiadateľa-hosťa sa zneplatnia.
- Sledujúci, ktorý nie je agent, smie vidieť tiket aj jeho verejné vlákno a odpovedať ako účastník (tickets.watchers.can_view). Zoznamy sledujúcich sú v API len pre agentov.
- TicketWatcherAdded / TicketWatcherRemoved sa spustia pri explicitných zmenách; ich záznamy aktivity sú interné.
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.