This commit is contained in:
2026-04-22 13:01:47 +02:00
commit 803acf3da3
14 changed files with 1101 additions and 0 deletions

67
Email-kampane.md Normal file
View File

@@ -0,0 +1,67 @@
# Email kampaně
## Přehled
Systém podporuje hromadné emailové kampaně s plánováním, schvalováním, sledováním otevření a kliků.
## Klíčové modely
| Model | Tabulka | Popis |
|-------|---------|-------|
| `EmailCampaign` | `email_campaigns` | Definice kampaně |
| `EmailCampaignSend` | `email_campaign_sends` | Jeden naplánovaný email jednomu příjemci |
| `EmailTemplate` | `email_templates` | HTML šablona emailu |
| `EmailCategory` | `email_categories` | Kategorie (pro odhlašování per kategorie) |
| `EmailCategoryUnsubscribe` | | Odhlášení z konkrétní kategorie |
| `ContactCampaignStat` | | Statistiky kampaně per kontakt |
| `CampaignEventStat` | | Agregované statistiky eventů |
| `CampaignCartDailyStat` | | Denní statistiky košíků per kampaň |
## Životní cyklus kampaně
```
1. Vytvoření kampaně (EmailCampaign)
2. Výběr segmentu + šablony
3. Naplánování (schedule) nebo odeslání ihned (send-now)
4. PrepareEmailCampaignSendsJob → vytvoří EmailCampaignSend záznamy
5. Schválení (approval workflow)
6. BatchSendEmailCampaignSendsJob → SendEmailCampaignSendJob → odeslání
7. Tracking otevření (pixel /e/o/{token})
8. Tracking kliků (ftclid parametr v odkazech)
```
## Odesílání
Kampaně odesílá command `SendDueEmailCampaigns` (cron). Selhat může přes `RetryFailedEmailCampaignSends`.
Podporované mail drivery:
- **SMTP** standardní Laravel mailer
- **Microsoft Graph** `MicrosoftGraphMailService` (přes Microsoft 365 API)
## Šablony
Editor šablon je dostupný na `/admin/email-templates/editor/{id}`. Šablony podporují:
- HTML s inline CSS (`tijsverkoyen/css-to-inline-styles`)
- Placeholdery (`{{contact.email}}`, `{{contact.name}}` apod.)
- Unsubscribe link
## Tracking
- **Otevření** 1×1px tracking pixel `/e/o/{token}``EmailOpenTrackingController`
- **Kliky** `ftclid` parametr v odkazech; při kliknutí `collect.js` automaticky identifikuje návštěvníka a propojí ho s kontaktem
## Schvalování
Před odesláním může být vyžadováno schválení přes `EmailSendApprovalController`:
- `GET /email-sends/pending` seznam čekajících
- `POST /email-sends/{send}/approve` schválení
- `POST /email-sends/{send}/reject` zamítnutí
## Statistiky
Rebuild statistik:
```bash
php artisan rebuild:campaign-event-stats
php artisan rebuild:campaign-cart-daily-stats
php artisan rebuild:contact-campaign-stats
```