Duplicitní zpráva je druhá a každá další zpráva se stejným textem pro stejné číslo. Vzniká málokdy úmyslně — spíš opakovaným voláním API po vypršení timeoutu, dvojím kliknutím na tlačítko nebo tím, že se jedno číslo dostane do seznamu příjemců několikrát. BulkGate proti tomu má ochranu, ale [transakční a promoční cesta](https://www.bulkgate.com/cs/centrum-napovedy/obecne-informace/rozdil-propagacni-transakcni-sms/) ji řeší každá jinak.

## Čím se obě ochrany liší

|                  | Transakční zpráva                          | Promoční zpráva                       |
|:-----------------|:-------------------------------------------|:---------------------------------------|
| Co hlídá         | opakování téže zprávy v čase               | duplicitní příjemce v jednom seznamu  |
| Dosah            | napříč požadavky, okno 5 minut             | jen uvnitř jednoho požadavku          |
| Výchozí stav     | vypnuto                                     | vypnuto                                |
| Jak se to projeví| zpráva skončí chybou `duplicity_message`   | příjemce ze seznamu tiše zmizí        |

## Transakční zprávy: opakování téže zprávy v čase

Zapnete ji parametrem `duplicates_check` v [transakčním](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-transactional/2.0/) nebo [jednoduchém transakčním](https://www.bulkgate.com/cs/dokumentace/simple-api/simple-transactional/) API. Přijímá hodnoty `on` a `off` (rozumí i `true`/`false`, `1`/`0`, `yes`/`no`), výchozí je `off`.

Když je zapnutá, BulkGate si u každé odeslané zprávy zapamatuje kombinaci:

| Součást otisku    | Poznámka                                                                    |
|:------------------|:-----------------------------------------------------------------------------|
| Účet              | platí napříč všemi aplikacemi (`application_id`) pod jednou peněženkou      |
| Kanál             | stejný text přes SMS a přes Viber jsou dvě různé zprávy                     |
| Telefonní číslo   | v mezinárodním formátu                                                       |
| Text zprávy       | musí sedět znak po znaku — jiné jméno, čas nebo kód znamená jinou zprávu     |

Přijde-li do pěti minut zpráva se stejným otiskem, BulkGate ji zahodí a k operátorovi vůbec neodejde.

> [!IMPORTANT]
> Okno pěti minut běží od **první** zprávy a zahozené pokusy ho neprodlužují. Po jeho vypršení stejná zpráva projde znovu.

U kaskádové zprávy se do otisku počítá hlavní text kaskády, ne texty jednotlivých kanálů.

### Co uvidíte v odpovědi

- **Jedna zpráva** — API vrátí chybu typu `duplicity_message` s kódem `400`. Přehled najdete mezi [typy chyb](https://www.bulkgate.com/cs/dokumentace/api-administrace-a-tokeny/typy-chyb-api/).
- **Hromadná transakční zpráva** — zahozená zpráva dostane status `duplicity_message` a započítá se do `total.status.duplicity_message`. Ostatní příjemci dávky se odešlou normálně.

> [!CAUTION]
> U jednorázových hesel ochranu zvažte. Pokud se kód s každým pokusem mění, neuplatní se vůbec. Pokud posíláte neměnný text, druhé odeslání do pěti minut zahodíte — a uživatel, který zmáčkl „Poslat znovu“, žádnou zprávu nedostane.

## Promoční zprávy: duplicitní příjemci v jedné dávce

Na promoční cestě se nic nepamatuje mezi požadavky. BulkGate jen před odesláním projde seznam příjemců sestavený z jednoho požadavku a nechá v něm první výskyt. Parametr `duplicates_check` v [promočním](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-promotional/2.0/) nebo [jednoduchém promočním](https://www.bulkgate.com/cs/dokumentace/simple-api/simple-promotional/) API má tři hodnoty:

| Hodnota        | Co vyřadí                                            |
|:---------------|:------------------------------------------------------|
| `same_text`    | opakování stejné zprávy témuž číslu                  |
| `same_number`  | jakoukoli další zprávu témuž číslu, i s jiným textem |
| nevyplněno     | nic — odešle se seznam tak, jak jste ho poslali      |

> [!NOTE]
> Odstranění proběhne tiše — v odpovědi není žádný status ani počítadlo duplicit. Jediná stopa je nižší počet příjemců, než kolik jste jich poslali. Pokud po vyřazení nezbude nikdo, požadavek skončí chybou `no_recipients`.

Dva požadavky po sobě se navzájem nevidí. Když stejného příjemce pošlete ve dvou dávkách, obě zprávy odejdou.

## Kampaně v portálu

[Kampaň](https://www.bulkgate.com/cs/centrum-napovedy/kampan/kampane/) jde promoční cestou a kontrolu duplicit provede sama — po sestavení seznamu příjemců vám ukáže, kolik jich našla, pod hlavičkou **Upozornění na duplicitní zprávy**:

- **Shodné číslo i text** — kampaň je odstraní vždy a bez ptaní, volba tu není.
- **Shodné číslo, jiný text** — rozhodnete se sami. Zaškrtnutím **Odstranit duplicitní příjemce** dostane každé číslo jen jednu zprávu; bez zaškrtnutí odejdou všechny.

U kampaně s A/B testem se duplicitní příjemci vyřazují vždy, jinak by jeden člověk dostal víc testovaných variant a výsledek testu by neplatil.

## Na co si dát pozor

- **Stejný parametr, jiný význam.** Na transakční cestě je `duplicates_check` vypínač a chrání napříč požadavky v čase, na promoční je to volba způsobu a platí jen uvnitř jednoho požadavku.
- **Sdílený účet znamená sdílené okno.** Několik integrací pod jednou peněženkou si může navzájem zahazovat zprávy, pokud posílají stejné texty na stejná čísla.
- **Zahozená zpráva se neodesílá**, takže se ani nedoručí, ani nezapíše mezi odeslané.
- **Počty si ověřte v odpovědi.** Na promoční cestě se odstranění nikde nehlásí — kdo porovnává doručení proti vstupnímu seznamu, musí s rozdílem počítat.
