---
title: "Notifikácie iných balíkov — Notifications for Laravel | Roundly"
description: "Namapujte notifikácie iných balíkov na vlastné druhy, aby platili preferencie, deduplikácia, tiché hodiny a schránka — alebo ich potlačte."
url: https://roundly-consulting.com/sk/open-source/navody/notifications-for-laravel/notifikacie-inych-balikov
language: sk
---

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

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

# Notifikácie iných balíkov

Namapujte triedu notifikácie, ktorú posiela iný balík, na jeden z vašich druhov a budú pre ňu platiť pravidlá balíka — preferencie, povinnosť, deduplikácia, tiché hodiny aj schránka. Alebo ju úplne potlačte:

```php
// config/notifications.php
'interop' => [
    'map' => [
        RoundlyConsulting\Tickets\Notifications\TicketAssignedNotification::class => 'tickets.assigned',
        RoundlyConsulting\Events\Notifications\EventReminderNotification::class => 'events.reminder',
    ],
    'suppress' => [
        RoundlyConsulting\Events\Notifications\EventUpdatedNotification::class,             // every channel
        RoundlyConsulting\Tickets\Notifications\TicketNoteAddedNotification::class => ['mail'],
    ],
    'database' => 'redirect',   // redirect | keep | both
    'hold' => true,             // hold mapped mail in quiet hours
    'notifiables' => [],        // extra recipient classes
],
```

Alebo za behu:

```php
Notifications::interop()->map(TicketAssignedNotification::class, 'tickets.assigned');
Notifications::interop()->suppress(TicketNoteAddedNotification::class, ['mail']);
Notifications::interop()->mapped();       // class => type key
Notifications::interop()->suppressed();
```

Mapovaný druh notifikáciu opisuje; subjectFrom() povie balíku, čoho sa týka:

```php
final class TicketAssigned extends NotificationType
{
    public function key(): string { return 'tickets.assigned'; }
    public function category(): string { return 'tickets'; }
    public function subject(): ?string { return Ticket::class; }
    public function subjectFrom(Notification $notification): ?Model { return $notification->ticket; }
    public function window(): ?string { return 'PT15M'; }
    public function title(NotificationPayload $p): string { return __('app.ticket_assigned'); }  // when the notification's data has no "title"
}
```

## Ako to funguje

- Listener NotificationSending, ktorého sa Laravel pýta pre každého príjemcu a kanál, po vlastnom shouldSend() notifikácie, v čase doručenia (pri notifikáciách vo fronte na workeri). Kanál zruší alebo ho pustí.
- Zhoda používa is\_a(): podtrieda mapovanej triedy z aplikácie je tiež mapovaná; presná položka má prednosť pred predkom a vyhrá najšpecifickejší predok.
- Preferencie, deduplikáciu, podržanie a presmerovanie do schránky dostanú len príjemcovia — modely s ReceivesNotifications alebo trieda v interop.notifiables. Akýkoľvek iný príjemca (hosť, kontakt, on-demand trasa) dostane len suppress.
- Fail-open: okrem suppress sa každá výnimka v listeneri nahlási, spustí sa NotificationInteropFailed a notifikácia odíde bez zásahu. Chyba v interop nikdy nesmie zastaviť obnovu hesla.
- Deduplikácia najprv prevezme riadok: dva workery doručujúce naraz dve mapované notifikácie s rovnakým kľúčom pošlú jeden e-mail.
- Podržaná notifikácia sa uloží šifrovane a sweep ju uvoľní po novej kontrole prístupu a preferencie; zmenený alebo nedešifrovateľný payload zlyhá ako payload a nikdy sa nedeserializuje. Notifikácia, ktorú nemožno serializovať, sa nepodrží — odíde hneď.
- Mapované notifikácie nikdy nejdú do súhrnu; doctor upozorní na digestovateľný mapovaný druh. Vlastné e-maily balíka sa nikdy neupravujú.
- Notification::fake() z Laravelu nespúšťa NotificationSending, takže pod ním interop nebeží.

## Rozhodovacia tabuľka (príjemca × kanál)

| Prípad | Výsledok |
| --- | --- |
| Trieda je potlačená (všetky kanály alebo tento) | zrušené |
| Nemapovaná; nie je príjemca alebo ide o on-demand trasu; iný kanál než mail / database | bez zásahu |
| database, redirect (predvolené) | Položka schránky cez krok zlučovania (nadpis = title z toDatabase()/toArray() notifikácie, inak nadpis druhu); riadok Laravelu sa zruší. |
| database, keep / both | Bez zásahu / položka schránky + bez zásahu. |
| mail, subjekt (subjectFrom(), čerstvý) nie je prístupný | zrušené |
| mail, druh má triedu subjektu, ale subjectFrom() vráti null | Platia preferencie a tiché hodiny; bez kontroly prístupu a deduplikácie (doctor upozorní). |
| mail, preferencia je vypnutá (nie povinný druh) | zrušené |
| mail, otvorené doručenie v okne | Zlúčené (count++), zrušené. |
| mail, práve tiché hodiny, druh nie je urgentný, interop.hold zapnuté | Podržané (šifrovaný payload), teraz zrušené, uvoľnené po tichých hodinách. |
| Inak | Prevezme sa doručenie v stave sending; Laravel odošle; NotificationSent → sent, NotificationFailed → failed(transport). |

## Ochrana časovo kritických notifikácií

Čokoľvek, čo je is\_a AuthenticationNotification z auth-for-laravel (OTP, magic linky, obnovy hesla), ResetPassword alebo VerifyEmail z Laravelu, smie mapovať len na druh, ktorý je urgentný, nemá okno a nepatrí do súhrnu — inak by sa druhý kód vyžiadaný v okne zlúčil s prvým a nikdy by neprišiel. Také mapovanie sa odmietne s InvalidInteropMappingException. Mapa sa overí, keď sa načítajú všetky providery (vaše druhy môžu byť v AppServiceProvider::boot()), znova lenivo pri prvom použití a v doctorovi.

## Pripravená mapa pre balíky Roundly

Navrhované druhy pre notifikácie balíkov Roundly — nič sa nemapuje automaticky, zapnete to pre každú triedu. Názvy tried sú relatívne k RoundlyConsulting\\<Balík>\\Notifications\\ a končia na Notification:

| Balík | Triedy | Navrhovaný kľúč | Priorita | subjectFrom() |
| --- | --- | --- | --- | --- |
| `tickets` | TicketCreated, TicketAssigned, TicketReplied, TicketRequesterReplied, TicketNoteAdded, TicketMentioned, TicketStatusChanged, TicketMerged | `tickets.created …` | normal | `$n->ticket` |
| `tickets` | TicketDueSoon, TicketOverdue | `tickets.due_soon, tickets.overdue` | normal / urgent | `$n->ticket` |
| `events` | EventInvitation, RsvpConfirmed, WaitlistPromoted, EventUpdated, EventPostponed, EventRescheduled, EventMovedOnline, EventCancelled | `events.invited …` | normal (cancelled: urgent) | `$n->event` |
| `events` | EventReminder | `events.reminder` | normal | `$n->event` |
| `messages` | NewMessage | `messages.new` | normal (okno PT10M) | `$n->message->thread` |
| `alerts` | HealthCheckFailed | `alerts.health_check_failed` | urgent | — |
| `auth` | any AuthenticationNotification (EmailOtp, MagicLink, ResetPassword, …) | `auth.*` | urgent, mandatory, bez okna | — |

## 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/notifications-for-laravel.md)
