---
title: "Vlastné joby doručenia — Campaigns for Laravel | Roundly"
description: "Implementujte ProcessesCampaignRecipient a doručujte cez SMS, push či iný kanál so zrušením a evidenciou chýb bezpečnými pre dávky."
url: https://roundly-consulting.com/sk/open-source/navody/campaigns-for-laravel/vlastne-joby
language: sk
---

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

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

# Vlastné joby doručenia

Ak chcete doručovať iným kanálom — cez SMS bránu, push službu či webhook — napíšte vlastný job, implementujte Contracts\\ProcessesCampaignRecipient a zaregistrujte ho:

```php
// config/campaigns.php
'process-recipient-job' => \App\Jobs\SendCampaignSms::class,
```

Kontrakt určuje konštruktor — (Campaign $campaign, CampaignRecipient $recipient) — a handle(CampaignManager $campaigns): void. Injektovaný manažér je ten istý, ktorý stojí za fasádou Campaigns, preto výsledok každého doručenia zaznamenajte cez handle kampane:

```php
namespace App\Jobs;

use App\Services\SmsGateway; // your own SMS client
use Illuminate\Bus\Batchable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use RoundlyConsulting\Campaigns\Campaign;
use RoundlyConsulting\Campaigns\CampaignRecipient;
use RoundlyConsulting\Campaigns\CampaignManager;
use RoundlyConsulting\Campaigns\Contracts\ProcessesCampaignRecipient;
use Throwable;

final class SendCampaignSms implements ProcessesCampaignRecipient, ShouldQueue
{
    use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(public Campaign $campaign, public CampaignRecipient $recipient) {}

    public function handle(CampaignManager $campaigns): void
    {
        if ($this->batch()?->cancelled()) {
            return; // the campaign was cancelled
        }

        try {
            app(SmsGateway::class)->send(
                $this->recipient->reachableAt,
                strip_tags($this->campaign->content),
            );

            $campaigns->campaign($this->campaign)->markProcessed($this->recipient);
        } catch (Throwable $e) {
            $campaigns->campaign($this->campaign)->markFailed($this->recipient, $e->getMessage());
        }
    }
}
```

## Kontrolný zoznam

- Použite Illuminate\\Bus\\Batchable — start() pridáva váš job do dávky kampane.
- Implementujte ShouldQueue, aby príjemcov spracovali queue workery.
- Skončite hneď, keď $this->batch()?->cancelled() vráti true, aby zrušená kampaň prestala odosielať.
- Výsledok zaznamenajte — výnimky zachytávajte a na handli volajte ->markFailed($recipient, $message), ako to robia dodávané joby — alebo nechajte job zlyhať: job, ktorý zlyhá úplne (vyhodí výnimku, vyprší mu čas, minie pokusy), sa počíta ako neúspešné doručenie a ostatní príjemcovia sa ďalej odosielajú. Nikdy nie oboje, inak sa príjemca započíta ako neúspešný dvakrát.
- Pri úspechu volajte ->markProcessed($recipient) — zaznamená doručenie a spustí RecipientProcessed.
- Pod Campaigns::fake() sa obe volania zaznamenajú, takže váš job otestujete cez assertRecipientProcessed() a assertRecipientFailed() (pozrite si časť Testovanie).

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