Webhooky
Přijímejte události aktivací na svém serveru v reálném čase, ověřujte hlavičku SmsGrab-Signature a pochopte opakování, testovací doručení a automatické vypnutí.
Na této stránce
Webhooky posílají události na váš server ve chvíli, kdy nastanou, takže se nemusíte dotazovat. Webhook patří k jednomu klíči API. Přijímá události čísel koupených tímto klíčem a také upozornění na nízký zůstatek účtu.
Události
| Událost | Kdy |
|---|---|
activation.created |
Bylo koupeno číslo |
activation.code_received |
Každá nová SMS, se všemi dosavadními zprávami |
activation.completed |
Dokončeno vámi, nebo po vypršení času po kódu |
activation.cancelled |
Zrušeno před kódem, peníze vráceny |
activation.expired |
Kód nepřišel včas, peníze vráceny |
activation.refunded |
Jakékoli vrácení platby |
balance.low |
Zůstatek klesl pod nastavenou hranici |
webhook.test |
Testovací doručení, které jste spustili |
Vytvoření webhooku
V Účet > Vývojáři otevřete klíč a přidejte webhook s URL, požadovanými událostmi a volitelným popisem. Každý klíč může mít až 3 webhooky.
URL musí:
- začínat
https://; - používat název hostitele, ne IP adresu;
- vést na veřejnou adresu. Soukromé sítě, localhost a podobné rozsahy se odmítají.
Dostanete podpisový tajný klíč začínající whsec_. Stejně jako klíč API se zobrazí jen jednou. Později ho můžete vyměnit, což také vyžaduje heslo.
Jak vypadá doručení
POST /your/endpoint HTTP/1.1
Content-Type: application/json
User-Agent: SmsGrab-Webhooks/1.0
SmsGrab-Event: activation.code_received
SmsGrab-Delivery: 9f7d6c1e-2b44-4c1a-8f0e-6a3d2c1b0e9f
SmsGrab-Signature: t=1790503200,v1=3b9a0c…
{ "id": "evt_4e1f…", "type": "activation.code_received", "created_at": "2026-09-27T10:06:12.004Z",
"api_version": "2026-09-27", "data": { "activation": { "id": "5c1d0c2e-…", "status": "CODE_RECEIVED" } } }
Ověření podpisu
SmsGrab-Signature obsahuje časové razítko t a v1, tedy HMAC-SHA256 z t, tečky a nezpracovaného těla požadavku, klíčovaný vaším tajným klíčem. Odmítejte doručení, jejichž časové razítko se od vašich hodin liší o víc než 300 sekund, a podpisy porovnávejte v konstantním čase.
[$t, $v1] = (function (string $h): array {
parse_str(str_replace(',', '&', $h), $p);
return [(int) ($p['t'] ?? 0), (string) ($p['v1'] ?? '')];
})($_SERVER['HTTP_SMSGRAB_SIGNATURE'] ?? '');
$body = file_get_contents('php://input');
$expected = hash_hmac('sha256', $t.'.'.$body, getenv('SMSGRAB_WEBHOOK_SECRET'));
$ok = abs(time() - $t) <= 300 && hash_equals($expected, $v1);
import hmac, hashlib, time
def verify(header: str, body: bytes, secret: str) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
t = int(parts.get("t", "0"))
expected = hmac.new(secret.encode(), f"{t}.".encode() + body, hashlib.sha256).hexdigest()
return abs(time.time() - t) <= 300 and hmac.compare_digest(expected, parts.get("v1", ""))
import crypto from 'node:crypto';
export function verify(header, rawBody, secret) {
const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
const t = Number(parts.t ?? 0);
const expected = crypto.createHmac('sha256', secret).update(`${t}.`).update(rawBody).digest('hex');
const given = Buffer.from(parts.v1 ?? '', 'utf8');
return Math.abs(Date.now() / 1000 - t) <= 300 && given.length === expected.length
&& crypto.timingSafeEqual(Buffer.from(expected, 'utf8'), given);
}
Vždy ověřujte nezpracované tělo přesně tak, jak jste ho přijali, ještě před parsováním JSON.
Odpovídejte rychle
Odpovězte jakýmkoli stavem 2xx do 10 sekund a pomalou práci udělejte až potom, například ve frontě. Přesměrování se nesledují.
Opakování
Neúspěšné doručení se opakuje po 1 minutě, 5 minutách, 15 minutách, 1 hodině, 3 hodinách, 6 hodinách, 12 hodinách a 24 hodinách. Opakování nese stejné id události, takže si zpracovaná id pamatujte a duplicity přeskakujte. Události jedné aktivace přicházejí popořadě.
Automatické vypnutí
- Odpověď
410 Gonewebhook okamžitě vypne. - Po 50 neúspěšných pokusech za sebou během alespoň 24 hodin se webhook vypne a dostanete oznámení. Opravte endpoint a potom webhook znovu zapněte.
- Zneplatnění klíče vypne jeho webhooky.
Test a opětovné doručení
Pošlete ze stránky webhooku událost webhook.test a hned uvidíte stavový kód, dobu odezvy a případnou chybu. Seznam doručení uchovává každé doručení 30 dní a kterékoli z nich můžete poslat znovu.
Pomohl vám tento článek?
Děkujeme! Jsme rádi, že to pomohlo.