NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Campaigns for Laravel

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:

// 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:

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

Odoslaní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.