Nic nenalezeno

Hromadné potvrzení o doručení a příchozích zprávách

Čím se hromadné doručenky liší

Ve výchozím nastavení dorazí na vaši adresu jeden požadavek za každou zprávu. Při velkých objemech to znamená tisíce požadavků — hromadná varianta je sloučí do dávek.

Jednotlivě Hromadně
Metoda HTTP GET HTTP POST
Formát Parametry v query stringu JSON v těle požadavku
Obsah Jedna zpráva Pole záznamů

Obojí nese totéž — potvrzení o doručení i příchozí zprávy. Popis jednotlivé varianty najdete na stránce Potvrzení o doručení.

Jak hromadné zasílání zapnu

V nastavení webhooku zaškrtněte Zasílat doručenky hromadně. Adresa i ostatní volby zůstávají stejné — mění se jen způsob, jakým vám data chodí.

Nastavení potvrzení o doručení se zaškrtnutou volbou hromadného zasílání

Celý postup včetně toho, kde nastavení najdete, popisuje Webhooky.

Jak požadavek vypadá

Dorazí metodou POST s hlavičkou Content-Type: application/json. Tělo je pole, ve kterém se mísí doručenky i příchozí zprávy — rozlišíte je podle status.

POST /hook/delivery-report HTTP/1.1 Host: example.com Content-Type: application/json [ { "status": "1", "smsID": "3t2563af3ff285", "price": "0.71", "date": "1904111007;1904111011" }, { "status": "2", "smsID": "2t2563af3ff285", "price": "0.71", "date": "1904111007;1904111011" }, { "status": "10", "from": "420777777777", "message": "text odpovědi" } ]

Parametry záznamu

Parametr Hodnota Kdy dorazí
status Kód stavu — viz stavy doručení Vždy
smsID Jednoznačné ID zprávy U doručenky
price Cena zprávy v kreditech U doručenky
date Čas odeslání a doručení oddělený středníkem, časová zóna CET U doručenky
from Telefonní číslo odesílatele Jen u status 10
message Text zprávy v kódování UTF-8 Jen u status 10

Hodnota date má tvar RRMMDDHHMM;RRMMDDHHMM — 1904111007;1904111011 tedy znamená odesláno 11. 4. 2019 v 10:07 a doručeno v 10:11.

Stavy doručení

Kód Význam
1 Zpráva byla doručena
2 Zpráva čeká ve frontě na straně operátora — příjemce je momentálně nedostupný a doručení se zkusí znovu
3 Zprávu se nepodařilo doručit — příjemce je neznámý nebo trvale nedostupný
10 Příchozí zpráva nebo odpověď, ne doručenka
13 Zpráva byla přečtena (jen Viber)
Poznámka

Stav 2 není konečný — na tutéž zprávu vám později dorazí další záznam s výsledným stavem. Počítejte s tím, že smsID uvidíte víckrát, klidně i v téže dávce.

Ukázka zpracování

Skript načte tělo požadavku, projde pole a každý záznam pošle podle status do příslušné větve:

<?php declare(strict_types=1); const STATUS = [ 1 => 'doručeno', 2 => 'čeká u operátora', 3 => 'nedoručeno', 13 => 'přečteno', ]; function log_line(string $file, string $message): void { file_put_contents( __DIR__ . "/$file.log", '[' . date('Y-m-d H:i:s') . '] ' . $message . PHP_EOL, FILE_APPEND ); } function parse_date(string $value): string { // tvar RRMMDDHHMM, například 1904111007 $date = DateTimeImmutable::createFromFormat('ymdHi', $value); return $date ? $date->format('Y-m-d H:i') : '?'; } $body = file_get_contents('php://input'); $records = json_decode($body ?: '', true); if (!is_array($records)) { http_response_code(400); exit; } foreach ($records as $record) { $status = (int) ($record['status'] ?? 0); if ($status === 10) // příchozí zpráva { log_line('inbox', sprintf( 'Od: [%s] Zpráva: [%s]', $record['from'] ?? '', $record['message'] ?? '' )); } else if (isset(STATUS[$status])) // potvrzení o doručení { [$sent, $delivered] = array_pad(explode(';', $record['date'] ?? ''), 2, ''); log_line('delivery', sprintf( 'Zpráva [%s]: %s, cena %.4f, odesláno %s, doručeno %s', $record['smsID'] ?? '', STATUS[$status], (float) ($record['price'] ?? 0), parse_date($sent), parse_date($delivered) )); } } http_response_code(200);
Upozornění

Adresa musí odpovědět rychle a stavovým kódem 200. Celá dávka čeká na jednu odpověď, takže náročné zpracování odložte na frontu a požadavek rovnou potvrďte.

Byla tato stránka užitečná?