Na čem BulkGate běží, kudy zprávy odcházejí do sítí operátorů, jak provoz chráníme a co z toho plyne pro integraci, která musí držet i ve špičce.

## Provoz na třech lokalitách

Služba běží na několika serverech ve **třech geografických lokalitách**. Nejde o jeden stroj se zálohou, ale o souběžný provoz — vypadne-li kterákoli lokalita, zbývající převezmou provoz **automaticky a bez zásahu z vaší strany**. Z pohledu integrace se nemění nic: `portal.bulkgate.com` odpovídá dál a požadavky odcházejí stejnou cestou.

Co failover nepokrývá, je **cesta k nám** — výpadek u vašeho poskytovatele připojení, u operátora nebo kdekoli na trase mezi vaším serverem a naším. Pro ten případ je tu [záložní server](https://www.bulkgate.com/cs/dokumentace/api-administrace-a-tokeny/zalozni-server/).

Infrastruktura je stavěná na odolnost proti výpadku a proti DDoS ji chrání **[WEDOS Global Protection](https://www.wedos.global/)**. Provoz na naše servery neteče přímo — prochází jejich **anycastovou sítí se 120+ uzly**, kde ho převezme ten nejbližší. Útok se tak rozloží a odfiltruje na jejich straně, dřív než vůbec dorazí k nám; naše servery neřeší zahlcení, ale jen legitimní požadavky, které projdou. Anycast navíc zkracuje cestu vašeho požadavku, protože ho přebírá uzel nejblíž vám.

Logy, konfigurace i analytiku drží WEDOS rovněž **uvnitř EU**, takže ani ochrana proti DDoS nevyvádí data mimo unii — viz [Servery v EU](#servery-v-eu).

Aktuální stav služby najdete na **[bulkgate.status.online](https://bulkgate.status.online/cs/)**.

## Servery v EU

Všechny servery provozujeme **v Evropské unii**. Vaše data tedy nepřecházejí mimo EU a nemusíte řešit přenos do třetích zemí ani standardní smluvní doložky.

Jak s osobními údaji nakládáme, popisují [Podmínky zpracování osobních údajů](https://www.bulkgate.com/cs/pravni-informace/podminky-zpracovani-osobnich-udaju/) a [Zásady ochrany osobních údajů](https://www.bulkgate.com/cs/pravni-informace/zasady-ochrany-osobnich-udaju/).

## Napojení na operátory

Zprávy doručujeme přes **přímá napojení na operátory** v Evropě, Asii, Africe a v Severní, Střední i Jižní Americe.

### Co znamená 0-hop

Přímé napojení je **0-hop spojení** — mezi námi a SMSC operátora nestojí nikdo další. Zpráva jde z naší brány rovnou do koncové sítě. Je to **nejvyšší možná kvalita doručení**; lepší cesta ke koncovému číslu neexistuje, protože žádná kratší není.

Každý mezičlánek na trase je přitom místo, kde se může něco pokazit:

| co se stává na cestě přes mezičlánky | při 0-hop |
|:-----------------------------------------------------------|:-------------------------------|
| Zpráva se zdrží ve frontě dalšího agregátora.               | Odpadá, cesta je přímá.        |
| Potvrzení o doručení chodí se zpožděním nebo nepřesné.      | Stav hlásí přímo operátor.     |
| Zpráva se cestou ztratí a nikdo neřekne kde.                | Trasa má jen dva konce.        |
| Za každý článek se platí marže.                             | Cena bez mezistupňů.           |

Proto přímá napojení stavíme všude, kde to jde. U vysokých objemů a u zpráv citlivých na čas — OTP kódy, potvrzení objednávek — je ten rozdíl znát nejvíc.

0-hop dnes máme do **více než 50 zemí** a jejich počet průběžně roste.

Kde 0-hop nemáme, je první volbou **lokální poskytovatel** přímo v dané zemi — jeden mezičlánek se znalostí místního trhu, ne řetěz agregátorů. Teprve když není ani ten, doručujeme přes **SMS huby**; ty držíme jako zálohu pro minimum destinací, ne jako běžnou cestu.

## RCS přes přímé napojení na Google

Přímá napojení nekončí u SMS. RCS Business Messaging jede přes platformu Googlu. Máme na ni **přímé napojení** a k tomu **vlastní smlouvy s operátory** — obojí je potřeba: Google schvaluje agenta a obsah, operátor pouští provoz do své sítě. Bez jednoho z toho se RCS zpráva k příjemci nedostane.

Co RCS umí navíc proti SMS:

| co získáte | v čem je to jinak |
|:--------------------------|:---------------------------------------------------------------------------|
| **Ověřený odesílatel**     | Jméno značky, logo a barva místo čísla, s odznakem ověření přímo v aplikaci Zprávy. |
| **Bohatý obsah**           | Text se [suggestion tlačítky](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-rcs/), soubor, karta nebo karusel karet. |
| **Interakce**              | Příjemce odpovídá tlačítkem, ne psaním — klik se vám vrátí jako událost.     |
| **Stavy jako u chatu**     | Doručeno i přečteno, ne jen odesláno.                                        |
| **Záchrana přes SMS**      | Nemá-li příjemce RCS nebo se nedoručí do nastavené doby, zpráva pokračuje dalším kanálem v [kaskádě](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-kaskada/). |

Typy zpráv a jak se účtují popisují [Typy RCS zpráv](https://www.bulkgate.com/cs/centrum-napovedy/rcs/typy-rcs-zprav/); nastavení agenta [Nastavení chatu RBM](https://www.bulkgate.com/cs/centrum-napovedy/rcs/nastaveni-chatu-rcs-business-messaging/).

## Viber jako oficiální partner

Pro **Viber** jsme **[oficiální partner](https://www.forbusiness.viber.com/en/messaging-partners/partner/bulkgate/)**, ne přeprodejce — a jako **jediní v České republice a na Slovensku**. Najdete nás v jeho seznamu messaging partnerů. Zprávy tedy odcházejí schválenou cestou přímo do sítě Viberu a odesílatele registrujeme napřímo u něj.

Co to pro vás znamená v praxi:

| co získáte | v čem je to jinak |
|:-----------------------------|:----------------------------------------------------------------------|
| **Registrovaný odesílatel**  | Jméno značky místo čísla, s ověřeným profilem. [Jak ho zaregistrovat](https://www.bulkgate.com/cs/centrum-napovedy/viber/registrace-viber-odesilatele/) |
| **Bohatší zpráva než SMS**   | Text, obrázek a tlačítko s odkazem v jedné zprávě — bez limitu 160 znaků. Viz [Viber – propagační](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-viber-promo/). |
| **Transakční šablony**       | Schválené šablony se účtují za nižší transakční cenu. Viz [Viber – transakční](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-viber-transakcni/). |
| **Platí se jen za doručené** | Viber účtuje pouze zprávy ve stavu DORUČENO a PŘEČTENO; ostatní po vypršení vracíme na účet. Viz [Stavy Viber zpráv](https://www.bulkgate.com/cs/centrum-napovedy/viber/viber-statusy/). |
| **Záchrana přes SMS**        | Nedoručí-li Viber do nastavené doby, zpráva pokračuje dalším kanálem v [kaskádě](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-kaskada/). |

Typy zpráv a relace popisuje stránka [Typy Viber zpráv](https://www.bulkgate.com/cs/centrum-napovedy/viber/typy-viber-business-zprav/).

## SMPP pro velké objemy

Vedle HTTP API nabízíme větším zákazníkům **napojení přes SMPP** — protokol, na kterém stojí samotné SMS sítě. Vyplatí se tam, kde jde o trvale vysoké objemy a kde potřebujete držet otevřenou relaci místo jednotlivých HTTP požadavků.

SMPP nastavujeme individuálně; [ozvěte se nám](https://www.bulkgate.com/cs/kontakt/) a probereme objemy a parametry.

## Prioritizace zpráv

Ne každá zpráva snese stejné čekání. Kód, na který uživatel kouká do formuláře, musí odejít okamžitě; kampaň na sto tisíc čísel o vteřinu navíc nepřijde. Provoz proto řadíme do samostatných front a obsluhujeme je v tomto pořadí:

| priorita | co tam patří |
|:--|:--|
| **1. OTP** | [Jednorázové kódy](https://www.bulkgate.com/cs/dokumentace/otp-api/odeslani-jednorazoveho-hesla/). Uživatel na ně čeká v reálném čase. |
| **2. Transakční** | Potvrzení objednávky, upozornění na doručení, výstraha — jedna zpráva jednomu příjemci. |
| **3. Hromadné transakční** | Tytéž zprávy posílané dávkou na víc čísel najednou. |
| **4. Malé kampaně** | Propagační rozesílka na menší počet příjemců. |
| **5. Střední kampaně** | Propagační rozesílka středního rozsahu. |
| **6. Velké kampaně** | Rozsáhlá propagační rozesílka. |

Fronty se nepředbíhají: rozjetá velká kampaň nezdrží OTP kód, který přijde uprostřed ní.

> [!IMPORTANT]
> **Oddělení transakčního a propagačního provozu po zákaznících vyžadujeme.** Není to doporučení — celá prioritizace na něm stojí. Každý typ zpráv posílejte tím endpointem, kam patří: [transakční zprávu](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-transactional/2.0/) přes transakční endpoint, propagační rozesílku přes [promoční](https://www.bulkgate.com/cs/dokumentace/advanced-api/advanced-promotional/2.0/). Jednoprvková kampaň místo transakční zprávy si zbytečně počká ve frontě kampaní; kampaň protlačená transakčním endpointem zdrží zprávy, na které někdo čeká v reálném čase, a je navíc [přísně zakázaná](https://www.bulkgate.com/cs/centrum-napovedy/obecne-informace/rozdil-propagacni-transakcni-sms/).

## Ochrana proti phishingu a SMS pumpingu

Provoz průběžně vyhodnocujeme, abychom zachytili dvě věci, které poškozují odesílatele i příjemce.

**Phishing.** Každou zprávu kontrolujeme proti vzorům známých podvodných kampaní — ID odesílatele i text, a zvlášť pro každou cílovou zemi. Kontrola počítá i s **napodobeninami**: zachytí i jméno nebo formulaci úmyslně pozměněnou o pár znaků, aby prošla doslovným porovnáním. Chrání to vaši značku před tím, aby se za ni někdo vydával, a vaše číslo odesílatele před reputačním postihem u operátora.

**SMS pumping.** Uměle generovaný provoz (*Artificially Generated Traffic – AGT*) — útočník tlačí vaším formulářem OTP kódy na čísla v prémiových rozsazích a inkasuje podíl z jejich ceny. Sledujeme proto tvar provozu, ne jeho obsah. Jakmile vidíme provoz, který neodpovídá tomu, co z účtu chodí běžně — náhlý nárůst nebo neobvyklé destinace — **odesílání zastavíme** a notifikujeme vás e-mailem a SMS. Útok se tím utne dřív, než stihne prodražit; škoda zůstane u toho, co už odešlo.

> [!NOTE]
> **Analýza je anonymní.** Probíhá automaticky nad tvarem provozu, ne nad identitou příjemců — nikdo vaše zprávy nečte a nevzniká z nich žádný profil. Odpovídá to tomu, co je popsané v [Servery v EU](#servery-v-eu).

Sami můžete útoku na svůj formulář předejít nastavením `request_quota_identification` a `request_quota_number` v [OTP API](https://www.bulkgate.com/cs/dokumentace/otp-api/odeslani-jednorazoveho-hesla/) — kvóta se váže na žadatele, typicky jeho IP adresu. Na portálu k tomu navíc máte geografické restrikce a denní limity odeslaných zpráv; jak je nastavit, popisuje [Hacknuté OTP SMS: Chraňte se s BulkGate API limity!](https://www.bulkgate.com/cs/blog/ochrana-otp-sms-bulkgate-api/).

## Zabezpečení komunikace a dat

**Veškerá komunikace jede přes HTTPS.** API nemá nešifrovanou variantu — požadavek na `http://` portál přesměruje na HTTPS, ale přesměrování **nezachová tělo POST požadavku**, takže zprávu neodešle. Volejte proto vždy rovnou `https://`, nikdy se nespoléhejte na přesměrování.

Přijímáme **TLS 1.2 a 1.3**; starší TLS 1.0 a 1.1 server odmítá. Pokud integrace běží na starším prostředí, ujistěte se, že jeho HTTP klient TLS 1.2 umí — jinak spojení selže ještě před odesláním požadavku. Totéž platí pro [záložní server](https://www.bulkgate.com/cs/dokumentace/api-administrace-a-tokeny/zalozni-server/).

**Komunikace s poskytovateli je vždy šifrovaná.** Šifrování nekončí u vašeho požadavku. Stejně chráněný je i druhý úsek trasy — ať už zpráva jde [0-hop](#co-znamena-0-hop) přímo operátorovi, přes lokálního poskytovatele, nebo přes hub.

**Portál chrání bezpečnostní hlavičky.** Prohlížeči posílá tyto:

- **[Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP)** — skripty se spustí jen s jednorázovým [`nonce`](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/nonce).
- **[`X-Content-Type-Options: nosniff`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Content-Type-Options)** — prohlížeč nesmí hádat typ obsahu.
- **[`X-Frame-Options: SAMEORIGIN`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options)** — stránku nelze vložit do cizího rámce, obrana proti clickjackingu.
- **[`Referrer-Policy: strict-origin-when-cross-origin`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Referrer-Policy)** — cizí doméně se neodešle celá cesta včetně parametrů.
- **[`Feature-Policy`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Permissions-Policy)** — mikrofon, kamera i platební API jsou v portálu vypnuté.

**Hesla NEJSOU uložená v plaintextu.** Ukládá se jen otisk algoritmem **Argon2id** — z databáze se heslo zpětně dopočítat nedá, ani kdyby ji někdo získal. Stejně zacházíme i s jednorázovými kódy: [OTP kód](https://www.bulkgate.com/cs/dokumentace/otp-api/odeslani-jednorazoveho-hesla/) se v databázi drží jako Argon2id otisk, ne jako čitelné číslo, takže ho z naší strany nikdo nepřečte.

**API tokeny jsou v databázi zašifrované.** [Token](https://www.bulkgate.com/cs/dokumentace/api-administrace-a-tokeny/api-tokeny/) se ukládá šifrovaný (AES-256), ne jako čitelný řetězec.

> [!CAUTION]
> Token je heslo k vašemu kreditu. Nikdy ho nedávejte do kódu, který běží v prohlížeči nebo v mobilní aplikaci — odtud si ho kdokoli přečte. API volejte ze svého serveru a token držte v konfiguraci mimo repozitář.

## Proč to zajímá velké zákazníky

Rozdíl mezi poskytovateli není v tom, jestli zprávu odešlou, ale **kudy**. U nás jde zpráva v první řadě **0-hop** přímo do sítě operátora; kde takové napojení nemáme, přes **lokálního poskytovatele** v dané zemi; a teprve v **minimu případů** přes **SMS hub**. Čím výš v tomhle pořadí zpráva jde, tím rychleji dorazí, tím přesnější je potvrzení o doručení a tím méně rukou se na ní podepíše — a při statisících zpráv měsíčně je to rozdíl, který je vidět ve statistikách doručitelnosti i na faktuře.

K tomu se přidává zbytek: provoz na **třech lokalitách s automatickým failoverem**, [záložní server](https://www.bulkgate.com/cs/dokumentace/api-administrace-a-tokeny/zalozni-server/) pro výpadek na trase, **servery v EU** bez přenosu dat do třetích zemí, **šifrovaná komunikace** na obou úsecích trasy a **SMPP** pro objemy, kterým HTTP API přestává stačit. Nad provozem navíc běží **ochrana proti phishingu a SMS pumpingu**, která útok na váš formulář zastaví dřív, než se prodraží. Službu provozujeme **od roku 2012**, takže si na ní můžete postavit integraci, kterou nebudete za rok přepisovat.
