Files
Funnel_Wiki/Kontakty.md
2026-04-22 13:01:47 +02:00

70 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kontakty a CRM
## Model Contact
`App\Models\Contact` tabulka `contacts`
| Sloupec | Typ | Popis |
|---------|-----|-------|
| `id` | bigint | PK |
| `team_id` | bigint | Příslušnost k týmu |
| `email` | string | E-mail (unikátní per team) |
| `name` | string | Celé jméno |
| `phone` | string | Telefon |
| `source` | string | Zdroj (`web`, `eshop`, `import`...) |
| `user_id` | string | ID zákazníka v externím systému |
| `tags` | json | Pole tagů |
| `flags` | json | Slovník příznaků (user_id, kampaně...) |
| `traits` | json | Vlastnosti kontaktu |
| `meta` | json | Libovolná metadata |
| `identify_token` | string | Token pro identifikaci z emailového odkazu |
| `last_activity_at` | timestamp | Poslední aktivita |
| `email_opt_out_at` | timestamp | Datum odhlášení z emailů |
| `internal` | boolean | Interní kontakt (nezapočítává se do statistik) |
| `smartemailing_id` | int | ID v SmartEmailing |
| `vario_ids` | json | ID záznamu v Vario ERP |
## Identifikace (IdentityLinker)
`App\Services\Tracking\IdentityLinker` zajišťuje propojení anonymního `visitor_id` s `Contact`:
```
visitor_id ──► visitor_identities ──► contact_id
```
### Metody
- **`identify($teamId, $data)`** párování podle emailu; vytvoří kontakt pokud neexistuje; backfilluje `contact_id` ke starším eventům
- **`identifyByToken($teamId, $data)`** párování přes `ftclid` (click token z emailové kampaně); dohledá `EmailCampaignSend``Contact`
- **`contactIdForVisitor($teamId, $visitorId)`** rychlý lookup mapping
## Segmenty
`Segment` sdružuje kontakty do skupiny. Každý segment má:
- **`FunnelColumn`** sloupce (stavy), ve kterých se kontakt nachází (Kanban-style)
- **`FunnelRule`** pravidla pro přechod mezi sloupci
- **`FunnelState`** aktuální stav konkrétního kontaktu v segmentu
## Tagy
Kontakty lze tagovat. Tagy jsou uloženy jako JSON pole. Přidávání tagů probíhá přes:
- `SetTagDriver` (akce automace)
- `SmartEmailingAddTagDriver` (sync do SmartEmailing)
- Automaticky při kliknutí na kampaňový email (`email_campaign:{id}`)
## Import kontaktů
- **CSV import** `ContactsImportCsv` Livewire + `JsonContactImporter`
- **Vario sync** `VarioSyncContacts` command / `SyncVarioContactsJob`
- **SmartEmailing webhook** `SmartEmailingWebhookController`
## Firmy (Company)
Kontakty mohou být přiřazeny k firmám (`Company` model). Firmy se synchronizují z Vario ERP přes `VarioSyncCompanies`.
## Odhlášení z emailů
- `email_opt_out_at` globální odhlášení
- `EmailCategoryUnsubscribe` odhlášení z konkrétní kategorie emailů
- Unsubscribe link vede na `UnsubscribeController` nebo `EmailUnsubscribeController` (TOR-friendly doména)