Doručení a očekávaná odpověď
Když nastane událost, SmsManager pošle na vaši callback URL HTTP požadavek a čeká na odpověď nejvýše 5 sekund. Pokud váš server do této doby neodpoví, pokus je považován za neúspěšný a zařazen k opakování.- Za úspěch se považuje pouze stavový kód
2xx(200–299). Tělo odpovědi se vůbec nečte — rozhoduje jen stavový kód. Nemusíte tedy vracet žádný konkrétní obsah. - Přesměrování (
3xx) se nenásleduje a počítá se jako neúspěch. Uvádějte proto přímo finální URL.
Opakování při selhání
Pokud pokus selže, SmsManager doručení zopakuje. Opakování se spustí v těchto případech:- server neodpověděl (vypršel časový limit) nebo se spojení nezdařilo,
- odpověď byla přesměrování (
3xx), - stav
408 Request Timeoutnebo429 Too Many Requests, - jakýkoli stav
5xx, - ostatní stavy
4xx.
Kvůli opakování musí být váš handler idempotentní — stejná událost může dorazit vícekrát. K deduplikaci na úrovni HTTP požadavku použijte hlavičku
X-Request-Id (viz níže), na úrovni jednotlivé události pak kombinaci message_id + result (viz poznámka o idempotenci v návodu).Hlavička X-Request-Id
Každý webhook požadavek nese hlavičkuX-Request-Id — identifikátor ve formátu UUID odvozený ze sady zpráv, které jsou v daném doručení spojeny. Vzniká jako sha256 ze seřazených ID zpráv, z něhož se prvních 32 hex znaků přeformátuje do tvaru UUID.
- Je stabilní napříč opakováními téhož doručení a nezávisí na pořadí zpráv — díky tomu jej lze použít jako klíč pro deduplikaci na úrovni HTTP požadavku.
- Jde o systémovou hlavičku, kterou nelze přepsat vlastní hodnotou (viz vlastní formát níže).
Podpis požadavku (X-Request-Signature)
Pokud je pro API klíč nastaveno podpisové tajemství (viz callback_secret níže), přidá SmsManager ke každému požadavku (kroměGET) hlavičku X-Request-Signature. Její hodnota je HMAC‑SHA256 z přesného těla požadavku, zakódovaná v hexadecimální podobě, kde klíčem je vaše tajemství:
Ověření podpisu (Node.js)
Požadavky metodou
GET nejsou podepsané (nemají tělo). Pokud pro klíč není nastavené tajemství, hlavička X-Request-Signature se vůbec nepřidává.Nastavení podpisového tajemství (callback_secret)
Podpisové tajemství nastavíte jako poledefault_callback_secret na API klíči přes SmsManager REST API — stejným způsobem jako výchozí callback URL:
Nastavit podpisové tajemství
X-Request-Signature. Tajemství nemá žádnou výchozí hodnotu — dokud jej nenastavíte, požadavky se nepodepisují. Uchovávejte jej v tajnosti; rotaci provedete opětovným voláním apikey/update s novou hodnotou.
Vlastní formát webhooku
Ve výchozím stavu SmsManager posíláPOST s polem objektů událostí (viz formát payloadu). Pokud potřebujete jiný tvar požadavku — vlastní obálku, hlavičky, metodu nebo formát — nastavte pole callback jako objekt místo textové URL. Tuto definici SmsManager zvaliduje a použije k sestavení každého požadavku.
Šablony a proměnné
Hodnoty v šablonáchitem a body mohou obsahovat zástupné symboly ve tvaru [[cesta]] (dvojité hranaté závorky). Cesta podporuje tečkovou i indexovou notaci, např. [[message_id]], [[to.phone_number]], [[payload.order_id]].
- Celá hodnota je jeden zástupný symbol (
"id": "[[message_id]]") → dosadí se v původním datovém typu (řetězec, číslo, objekt, pole,null). - Symbol uvnitř textu (
"msg": "ID: [[message_id]]") → hodnota se převede na řetězec a vloží do textu. - Únik:
[[!cesta]]vypíše doslovně[[cesta]]. - Klíče objektů se nešablonují — nahrazují se pouze hodnoty. Neznámá proměnná zůstane v textu beze změny.
message_id, request_id, phone_number (nebo to.phone_number), result, timestamp, gateway, type a payload (včetně vnořených cest jako payload.order_id).
Sestavení těla (item / body)
Kombinace políitem a body určuje výsledný tvar požadavku:
Příklady
Vlastní JSON obálka s hlavičkouAuthorization — každá událost se vykreslí přes item a pole se vloží do body:
Vlastní obálka (item + body)
{"commands":[ {…MID1…}, {…MID2…} ]}.
Formát application/x-www-form-urlencoded:
Form-urlencoded
GET — vykreslená hodnota se připojí jako query řetězec:
GET s query parametry
Omezení
- Celá definice
callbackmusí serializovat do max. 8192 bajtů; výsledné vykreslené tělo do max. 1 MiB. - U metody
GETse vykreslená hodnota vloží do query řetězce — bez těla, bez hlavičkyContent-Typea bez podpisu;batch_sizeje 1. - Systémové hlavičky
User-AgentaX-Request-Id(vždy) aX-Request-Signature(je‑li nastavené tajemství, mimoGET) se přidávají automaticky.X-Request-Idmá vždy přednost před vlastní hlavičkou stejného jména.
Další kroky
Webhooky
Nastavení callback URL, formát payloadu, typy událostí a sekvence stavů.
Reference webhooků
Kompletní reference polí pro všechny tři webhook události.
message_id a request_id
Jak se skládají identifikátory, které webhooky a X-Request-Id používají.
Příjem požadavku
Proč
200 OK znamená jen přijetí ke zpracování a kdy dorazí doručenky.