---
title: "Notifikácie a obmedzovanie — Alerts for Laravel | Roundly"
description: "Kto a kedy dostane notifikáciu, obmedzenie opakovaných notifikácií, pribalená notifikácia, smerovanie cez notifyVia() a vlastné notifikácie."
url: https://roundly-consulting.com/sk/open-source/navody/alerts-for-laravel/notifikacie
language: sk
---

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

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

# Notifikácie a obmedzovanie

Bez eskalačnej politiky každý zlyhaný beh, ktorý prejde cez tlmenie kolísania, upozorní predvolenú skupinu vlastníka — každého príjemcu, ktorého vráti forEachNotifiableForAlerts(). S politikou odchádzajú notifikácie len pri dosiahnutí novej úrovne (pozri Eskalačné politiky). Počas stlmenia sa neposiela nič.

Príjemca, ktorého notifikácia vyhodí výnimku — zlá adresa, nedostupný mailový server —, sa nahlási vášmu exception handleru a preskočí. Príjemcovia za ním notifikáciu dostanú, takže eskalovaná úroveň sa nikdy nepreruší.

## Obmedzenie

throttle(maxAttempts, decayMinutes) obmedzí notifikácie na maxAttempts za decayMinutes pre každého príjemcu každého naplánovaného riadka. Predvolene je to jedna za minútu — kontrola spúšťaná každú minútu teda počas incidentu upozorňuje každú minútu, pokiaľ decayMinutes nezvýšite:

```php
Health::for($team)->monitor(DiskUsageCheck::class)
    ->everyMinute()
    ->throttle(maxAttempts: 1, decayMinutes: 60)   // at most one notification per hour per recipient
    ->save();
```

Obmedzenie používa RateLimiter Laravelu, a teda vaše predvolené cache úložisko. Ak queue workery bežia na viacerých serveroch, použite zdieľané úložisko, napríklad Redis alebo databázu.

## Pribalená notifikácia

Vstavané kontroly a inline kontroly bez notifyUsing() upozorňujú cez HealthCheckFailedNotification. Posiela e-mail v štýle chyby s predmetom „Health check failed: <názov>“ a s dôvodom zlyhania — správou zlyhaného výsledku — a jej toArray() (check, name, message) napája kanál database. Varovania používajú tú istú notifikáciu. Texty upravíte po publikovaní prekladov:

```php
// lang/vendor/alerts/en/notifications.php
return [
    'subject' => 'Health check failed: :name',
    'line' => 'The health check ":name" has failed.',
];
```

Predvolené kanály sú mail a database. Kanál database potrebuje tabuľku notifikácií Laravelu — vytvorte ju, alebo smerujte len na mail cez notifyVia(\['mail'\]):

```bash
# The default channels are mail + database; the database channel needs this table
php artisan make:notifications-table
php artisan migrate
```

Dôvod je uložená správa — skrátená na 1000 znakov a pri vyhodenej výnimke len veta s názvom jej triedy, pokiaľ nie je zapnuté store\_exception\_details —, takže predvolene e-mailom neodchádza žiadny text výnimky. Uložené meta výsledku prečítate z $alert->meta v listeneri HealthCheckFailed, alebo pošlite vlastnú notifikáciu.

## Smerovanie kanálov

notifyVia() nastaví kanály pribalenej notifikácie; notifyVia(\[...\], level: n) ich prepíše pre jednu eskalačnú úroveň. Výsledný zoznam sa určí v poradí prepis úrovne → globálny zoznam → \['mail', 'database'\]:

```php
Health::for($team)->monitor(DatabaseCheck::class)
    ->notifyVia(['database'])                     // in-app only at first
    ->notifyVia(['mail', 'database'], level: 3)   // add mail once threshold 3 is reached
    ->escalate([1 => 'owner', 3 => 'team'])
    ->save();
```

Pribalená notifikácia implementuje len toMail() a toArray(). Pre Slack, SMS či iný kanál pošlite vlastnú notifikáciu.

## Vlastné notifikácie

notification() kontroly — alebo notifyUsing() inline kontroly — môže vrátiť akúkoľvek notifikáciu Laravelu, ktorá si sama riadi via(). Ak chcete zachovať notifyVia(), odovzdajte jej $this->channels(). Počas behu vráti $this->result() zlyhaný výsledok, o ktorom sa upozorňuje, takže notifikácia môže uviesť dôvod:

```php
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class DiskUsageNotification extends Notification
{
    public function __construct(
        private array $channels = ['mail'],
        private string $reason = '',
    ) {}

    public function via(object $notifiable): array
    {
        return $this->channels;
    }

    public function toMail(object $notifiable): MailMessage
    {
        return (new MailMessage)
            ->error()
            ->subject('Disk usage is critical')
            ->line('The disk usage check on the primary server has failed.')
            ->lineIf($this->reason !== '', $this->reason);
    }
}

// In DiskUsageCheck — pass along the channels resolved from notifyVia()
// and the message of the failing result being notified about:
public function notification(object $notifiable): Notification
{
    return new DiskUsageNotification($this->channels() ?? ['mail'], (string) $this->result()?->message);
}
```

## Obnova

Pri obnove alertu sa žiadna notifikácia neposiela. Balík odošle udalosť HealthCheckRecovered — počúvajte ju a pošlite správu o obnovení (pozri Udalosti).

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