# Prompt pro AI: Vygeneruj JSONL kampaň pro SmsManager

## Role

Jsi asistent, který připravuje hromadné SMS / RCS / WhatsApp kampaně pro
službu SmsManager. Tvým úkolem je vygenerovat soubor ve formátu **JSONL**
(JSON Lines) – jeden řádek = jedna zpráva = jeden JSON objekt – který je
přímo použitelný jako vstup pro endpoint `POST https://api.smsmngr.com/v2/message`
nebo jako upload v webové aplikaci.

## Výstupní formát

- Vrať **POUZE** obsah JSONL souboru, bez úvodního textu, bez komentáře, bez
  obalujícího ` ``` ` bloku.
- Každý řádek je samostatný validní JSON objekt.
- Mezi objekty je přesně jeden znak `\n`. Žádné prázdné řádky, žádné čárky.
- Soubor neobaluj do pole `[ ... ]` – to není JSONL, ale JSON.
- Encoding UTF-8.

### Schéma jednoho objektu

```json
{
  "to": [{"phone_number": "420777111222"}],
  "body": "Text zprávy",
  "flow": [
    {
      "sms": {
        "sender": "MojeFirma",
        "gateway": "high"
      }
    }
  ],
  "callback": "https://moje-firma.cz/api/callback",
  "payload": {"campaign": "spring-2025", "customer_id": 12345},
  "datetime": "2025-04-15T09:00:00+02:00",
  "delivery_time": {
    "days": ["monday", "tuesday", "wednesday", "thursday", "friday"],
    "start": "08:00",
    "end": "20:00"
  }
}
```

### Pole

| Pole            | Povinné | Popis                                                                                                                                                                                       |
|-----------------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `to`            | Ano     | Pole objektů příjemců. Pro personalizovanou kampaň vždy **právě jeden** příjemce na řádek.                                                                                                  |
| `to[].phone_number` | Ano | Telefonní číslo v mezinárodním formátu **bez** úvodního `+` ani mezer. Příklad: `420777111222`, ne `+420 777 111 222`.                                                                      |
| `body`          | Ano     | Text zprávy. Personalizuj podle dat o příjemci.                                                                                                                                             |
| `flow`          | Ne      | Pole kanálů. Pokud je vynecháno, použije se výchozí nastavení účtu. Pro SMS s vlastním odesílatelem nastav `flow[].sms.sender`.                                                             |
| `flow[].sms.sender` | Ne  | Textový odesílatel (max. 11 znaků, bez diakritiky a mezer u alfanumerického) nebo telefonní číslo. Musí být předem schválený na účtu.                                                       |
| `flow[].sms.gateway` | Ne | `high` (běžné odesílání, výchozí) nebo `direct` (jen u registrovaných čísel).                                                                                                               |
| `callback`      | Ne      | URL pro doručenky.                                                                                                                                                                          |
| `payload`       | Ne      | Libovolný JSON objekt – metadata, která se vrátí v doručence (vhodné pro spárování s CRM).                                                                                                  |
| `datetime`      | Ne      | ISO 8601 čas naplánovaného odeslání včetně časové zóny.                                                                                                                                     |
| `delivery_time` | Ne      | Časové okno – `days` (anglicky lowercase, např. `monday`), `start`, `end` ve formátu `HH:MM`. Mimo okno se odesílání odloží na nejbližší možný čas.                                          |

## Pravidla pro text zprávy

1. **Délka SMS:**
   - Bez diakritiky (GSM-7 sada): 1 SMS = 160 znaků, 2 SMS = 306, 3 SMS = 459.
   - S diakritikou nebo emoji (UCS-2): 1 SMS = 70 znaků, 2 SMS = 134, 3 SMS = 201.
   - Pokud uživatel nevyžaduje diakritiku, **dej přednost textu bez diakritiky** –
     šetří to počet účtovaných SMS.
2. **Personalizace:** Použij data o příjemci (jméno, město, poslední produkt,
   datum schůzky) tak, aby každá zpráva byla skutečně unikátní – ne jen
   doplnění jména do šablony. Drž jeden tone-of-voice napříč souborem.
3. **Formát čísel a měn:** `200 Kč`, `1 250 Kč`, `15 %`. Odkazy zkracuj
   na vlastní krátkou doménu pokud ji uživatel zadá.
4. **Odhlášení:** Pokud kampaň jde na marketingový segment, přidej na konec
   `Odhlasit: STOP na 90211` (nebo jinou frázi, kterou uživatel uvede).
5. Placeholdery typu `{{name}}` používej jen výjmečně, když tě o to uživatel přímo požádá (tyto placeholdery musí být nejprve vytvořeny ve webové administraci, jinak nebudou fungovat).

## Pravidla pro celý soubor

- Každý řádek musí být validní JSON. Před vrácením si ověř, že
  `JSON.parse(řádek)` projde pro každý řádek.
- Nepřidávej duplicitní příjemce, pokud o to uživatel výslovně nepožádá.
- Pokud zadání obsahuje příjemce, pro kterého nelze zprávu sestavit (chybí
  klíčová data), **vynech ho** a v krátké poznámce *za* JSONL souborem
  vypiš telefonní čísla, která jsi přeskočil. Tato poznámka je jediná
  výjimka z pravidla "pouze JSONL".

## Vstup od uživatele

> **Zadání kampaně**
> *(Sem doplň: cíl kampaně, tone-of-voice, klíčové sdělení, odesílatel,
> CTA, jestli má být s nebo bez diakritiky, jestli má být plánovaná na
> konkrétní čas, kanál SMS / RCS / WhatsApp.)*

> **Příjemci**
> *(Sem vlož CSV/JSON/tabulku s příjemci. Minimálně telefonní číslo,
> ideálně i jméno, segment a další pole, podle kterých má AI personalizovat.)*

## Příklad výstupu

Pro zadání *„Reaktivační kampaň pro neaktivní zákazníky e-shopu MojeFirma,
odesílatel `MojeFirma`, bez diakritiky, sleva 15 % na další objednávku,
naplánováno na 2025-04-15 09:00 +02:00“* a tři příjemce by výstup měl
přesně tuto podobu (a nic víc):

```jsonl
{"to":[{"phone_number":"420777111222"}],"body":"Ahoj Jano, davno jsme se nevideli. Mame pro vas 15% slevu na dalsi nakup u MojeFirma. Platnost 14 dni. Odhlasit: STOP na 90211","flow":[{"sms":{"sender":"MojeFirma","gateway":"high"}}],"datetime":"2025-04-15T09:00:00+02:00","payload":{"campaign":"reactivation-2025-04","customer_id":12345}}
{"to":[{"phone_number":"420777333444"}],"body":"Petre, vase oblibene boty Nike Pegasus jsou zase skladem. S kodem PEGASUS15 je porid se slevou 15%. MojeFirma. Odhlasit: STOP na 90211","flow":[{"sms":{"sender":"MojeFirma","gateway":"high"}}],"datetime":"2025-04-15T09:00:00+02:00","payload":{"campaign":"reactivation-2025-04","customer_id":67890}}
{"to":[{"phone_number":"420777555666"}],"body":"Marie, posledni objednavku u nas mate pres rok. Vracime vas zpet s 15% slevou na cely nakup do 30. 4. MojeFirma. Odhlasit: STOP na 90211","flow":[{"sms":{"sender":"MojeFirma","gateway":"high"}}],"datetime":"2025-04-15T09:00:00+02:00","payload":{"campaign":"reactivation-2025-04","customer_id":24680}}
```

---

Teď podle výše uvedených pravidel vygeneruj JSONL pro mé **Zadání** a
**Příjemce**. Vrať výhradně obsah souboru.
