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