---
title: "Notifikácie — Tickets for Laravel | Roundly"
description: "Desať notifikácií vo fronte po potvrdení, v angličtine a slovenčine — príjemcovia, kontrola viditeľnosti, payloady, výmena tried a ďalšie kanály."
url: https://roundly-consulting.com/sk/open-source/navody/tickets-for-laravel/notifikacie
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Tickets for Laravel](https://roundly-consulting.com/sk/open-source/navody/tickets-for-laravel.md)

# Notifikácie

Desať typov notifikácií, predvolene zapnutých (tickets.notifications.enabled) a posielaných cez tickets.notifications.channels (\['mail'\]). Každá je notifikácia Laravelu s ShouldQueue a afterCommit: pri zmene, ktorá sa vrátila späť, sa nič nepošle a e-mail sa zostaví, až keď ho doručí fronta. Obyčajný MailMessage (bez views) plus toArray() pre kanál database; každý text pochádza z tickets::notifications v angličtine a slovenčine.

## Typy a príjemcovia

| Typ | Trieda | Spúšťač | Príjemcovia |
| --- | --- | --- | --- |
| `created` | `TicketCreatedNotification` | `TicketCreated` | Žiadateľ — potvrdenie s číslom tiketu, aj keď ho založil sám. |
| `assigned` | `TicketAssignedNotification` | `TicketAssigned` | Tí, ktorých určí riešiteľ: Assignee::ticketNotifiables() (členovia tímu). |
| `replied` | `TicketRepliedNotification` | zverejnená verejná odpoveď agenta alebo systému | Žiadateľ plus sledujúci, ktorí pre tiket nie sú agentmi. |
| `requester_replied` | `TicketRequesterRepliedNotification` | zverejnená verejná odpoveď žiadateľa alebo účastníka | Notifikovateľní riešiteľa plus sledujúci agenti (platí rozsah agentov). |
| `note_added` | `TicketNoteAddedNotification` | `TicketNoteAdded` | Notifikovateľní riešiteľa plus sledujúci agenti — len agenti. |
| `mentioned` | `TicketMentionedNotification` | `TicketMentioned` | Spomenutá osoba, ak ju už nezasiahne notifikácia samotnej správy. |
| `status_changed` | `TicketStatusChangedNotification` | `TicketResolved, TicketClosed, TicketReopened` | Žiadateľ plus všetci sledujúci. |
| `overdue` | `TicketOverdueNotification` | TicketOverdue (kontrola termínov) | Notifikovateľní riešiteľa — pri nepriradenom tikete nikto. |
| `due_soon` | `TicketDueSoonNotification` | TicketDueSoon (kontrola termínov) | Notifikovateľní riešiteľa. |
| `merged` | `TicketMergedNotification` | `TicketMerged` | Žiadateľ zdrojového tiketu. |

- Uzavretie pri zlúčení pošle merged, nie status\_changed. Automatizovaný prechod nemá aktéra, takže žiadateľ, ktorého odpoveď tiket znovu otvorila, dostane aj notifikáciu o znovuotvorení.
- Odpoveď zadržaná moderáciou hostiteľa a obsah internej poznámky sa nikdy nedostanú k neagentovi.
- Pri GuestAccessRevoked neodchádza žiadna notifikácia a pri created žiadna agentom — pre tímovú schránku počúvajte TicketCreated.

Každý zoznam príjemcov je:

- S kontrolou viditeľnosti — nikto nedostane to, čo nesmie vidieť. Interný obsah zasiahne len agentov, ktorým rozsah agentov povoľuje na tikete pracovať; všetko ostatné len toho, kto smie tiket vidieť.
- Znova skontrolovaný pri doručení: sledujúci medzitým odobratý, agent, ktorého rozsah už vylučuje, zmazaný tiket, správa presunutá z tiketu — nepošle sa nič. Notifikácia o termíne sa zahodí, keď sa termín posunul alebo bol tiket vyriešený.
- Bez duplicít — jedna notifikácia na osobu bez ohľadu na to, koľko rolí má.
- Bez toho, kto akciu vykonal, pokiaľ nie je zapnuté tickets.notifications.notify\_actor (potvrdenie created odíde vždy); bez hostí, pokiaľ nie je zapnuté tickets.notifications.guests (predvolene áno); len notifikovateľní — model bez routeNotificationFor() sa preskočí.

## E-mail

Predmet znie \[TCK-42\] New reply: Printer on floor 3 is jammed (text v jazyku príjemcu), nasleduje oslovenie zobrazovaným menom príjemcu, riadky daného typu a — pri správach — text správy. To, čo ľudia napísali, sa escapuje a zobrazí ako text, nikdy sa nevykreslí ako Markdown. Hosť dostane ako tlačidlo novo vydaný podpísaný odkaz pre hosťa (žiadny, keď sa odkaz vydať nedá alebo keď uzavretie odkazy tiketu zneplatnilo); ostatní dostanú tickets.notifications.url s doplneným {reference} — prázdna hodnota znamená žiadne tlačidlo, keďže balík je headless. Dátumy sa formátujú v jazyku vykreslenia a časovom pásme aplikácie.

## Payloady

toArray() — kanál database — vždy nesie type, ticket (číslo tiketu) a subject, plus:

| Typ | Pridáva |
| --- | --- |
| `assigned` | assignee (zobrazované meno) |
| `replied, requester_replied, note_added, mentioned` | comment (id), author (zobrazované meno) |
| `status_changed` | change (resolved, closed, reopened), status (hodnota stavu) |
| `overdue, due_soon` | due\_at (ISO-8601) |
| `merged` | target (číslo cieľového tiketu) |

## Jazyk

Platia pravidlá jazyka Laravelu: notifikovateľný model s HasLocalePreference dostane svoj preferredLocale(); inak sa použije jazyk aplikácie vo workeri fronty. Ak chcete zmeniť riadok alebo pridať jazyk, publikujte tickets-translations.

## Výmena triedy

Zdeďte triedu z balíka (nie sú final) a uveďte podtriedu:

```php
use Illuminate\Notifications\Messages\MailMessage;
use RoundlyConsulting\Tickets\Notifications\TicketRepliedNotification;

final class BrandedReplyNotification extends TicketRepliedNotification
{
    public function toMail(object $notifiable): MailMessage
    {
        return parent::toMail($notifiable)->from('help@example.com', 'Example Help Desk');
    }
}
```

```php
// config/tickets.php
'notifications' => ['types' => ['replied' => App\Notifications\BrandedReplyNotification::class, /* … */]],
```

Náhrada musí dediť od triedy z balíka; čokoľvek iné je chyba konfigurácie. Balík ju vytvára cez kontajner s pomenovanými argumentmi konštruktora — v prepísanom konštruktore tieto názvy parametrov zachovajte (ostatné parametre doplní kontajner):

| Typ | Argumenty |
| --- | --- |
| každý typ | `ticket` |
| `assigned` | assignee (priradený model) |
| `replied, requester_replied, note_added, mentioned` | comment (Comment z comments) |
| `status_changed` | change (TicketStatusChangedNotification::RESOLVED / CLOSED / REOPENED) |
| `overdue, due_soon` | dueAt (CarbonImmutable) |
| `merged` | target (cieľový Ticket) |

## Háčiky triedy

Každý typ dedí od abstraktnej Notifications\\TicketNotification (ShouldQueue, Queueable, afterCommit(), $deleteWhenMissingModels = true, verejné $ticket). Štyri typy správ dedia od CommentNotification (verejné $comment plus author() a excerpt()); dva typy termínov od DueNotification (verejné $dueAt plus due()). shouldSend() prepisujte len so zavolaním parent::shouldSend() — drží opätovnú kontrolu viditeľnosti:

| Metóda | Viditeľnosť a použitie |
| --- | --- |
| `type(): NotificationType` | public, abstract — typ, ktorý trieda posiela |
| `via(object $notifiable): array` | public — tickets.notifications.channels |
| `shouldSend(object $notifiable, string $channel): bool` | public — opätovná kontrola viditeľnosti pri doručení; volajte parent |
| `toMail(object $notifiable): MailMessage` | public — predmet, oslovenie, lines(), tlačidlo z url() |
| `toArray(object $notifiable): array` | public — type, ticket, subject plus data() |
| `internal(): bool` | public — interný obsah, len pre agentov; true pre note\_added a mentioned |
| `subject(): string` | protected, abstract — predmet e-mailu (\[TCK-42\] …) |
| `lines(object $notifiable): array` | protected, abstract — riadky e-mailu, text od používateľov už escapovaný |
| `data(): array` | protected — čo typ pridá do toArray() |
| `linkedTicket(): Ticket` | protected — tiket, ktorý tlačidlo otvorí (merged ukazuje na cieľ) |
| `url(object $notifiable): ?string` | protected — odkaz pre hosťa pri TicketGuest, inak tickets.notifications.url |
| `guestLink(Ticket $ticket, TicketGuest $guest): ?string` | protected — novo vydaný odkaz pre hosťa, alebo null, ak ho vydať nemožno |
| `escapedSubject(): string` | protected — predmet tiketu escapovaný pre riadok e-mailu |
| `static line(string $key, array $replace = []): string` | protected — riadok z tickets::notifications |

## Príjemcovia z vlastného kódu

Notifications\\RecipientResolver (získajte ho z kontajnera) odpovie, kto by sa o zmene dozvedel: created($ticket), assigned($ticket, $assignee, $actor), replied($ticket, AuthorRole $role, $actor), noteAdded($ticket, $actor), mentioned($ticket, $comment, $mentioned), statusChanged($ticket, $actor), due($ticket) a merged($source, $actor) — každý list<Model> s kontrolou viditeľnosti a bez duplicít — a replyType(AuthorRole $role). Použite ho, ak chcete tým istým ľuďom poslať správu v Slacku, push notifikáciu alebo vlastný webhook.

## Ďalšie kanály

Vstavané sú len mail a database. Pre akýkoľvek iný kanál ho pridajte do notifications.channels a každý typ vymeňte za podtriedu, ktorá implementuje metódu daného kanála (toSlack(), toVonage(), …). TicketGuest smeruje kanál cez pole hosťa, ktorého route ho uvádza (email → mail, phone → vonage v dodanej sade polí).

## Zlyhania

Zlyhanie notifikácie — chybné nastavenie, nedostupná fronta, e-mail, ktorý na fronte sync vyhodí výnimku — sa nahlási cez váš exception handler, nikdy sa nevyhodí: zmena, o ktorej informuje, je už potvrdená. Notifikácie pre tiket natrvalo zmazaný skôr, než sa k nim fronta dostane, sa zahodia. Typ mentioned potrebuje comments.mention\_resolver.

## 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 kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/tickets-for-laravel.md)
