BulkGate Helpdesk
  • Languages iconCzech
    • English

›Potvrzení o doručení a příchozí SMS

Administrace API

  • Administrace API

Tokeny API

  • Tokeny API

Potvrzení o doručení a příchozí SMS

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

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

Potvrzení o doručení a příchozí SMS (odpovědi)

Chcete-li dostávat DLR záznamy do aplikace, stačí nastavit na portálu url adresu (viz. obrázek níže). Potvrzení o doručení jsou zasílány na url adresu metodou HTTP POST. Formát (Content-Type) odesílaných dat je application/json. Podívejte se na tabulku parametrů.

DLR settings

Potvrzení o doručení: parametry

NÁZEV PARAMETRUHODNOTAPOVINNÝ
statusPodívejte se na tabulku o potvrzení o stavu doručeníAno
smsIDUnikátní smsID zprávyNe
priceCena SMS v kreditechNe
dateČas odeslání a doručení (časová zóna CET), např.: 1812141317;1812141318 (14. prosince 2018, 13:17 a 14. prosince 2018, 13:18)Ne
fromPouze pokud je status=10, ID odesílatele v příchozí SMS v mezinárodním formátuNe
messagePouze pokud je status=10, Text příchozí SMS v kódování UTF-8Ne

Ukázka požadavku

POST example.php HTTP/1.1
Host: portal.bulkgate.com
Content-Type: application/json
Cache-Control: no-cache

[
   {
      "status":"1",
      "smsID":"3t2563af3ff285",
      "price":"0.71",
      "date":"1904111007;1904111011"
   },
   {
      "status":"2",
      "smsID":"2t2563af3ff285",
      "price":"0.71",
      "date":"1904111007;1904111011"
   },
   {
      "status":"10",
      "from":"420777777777",
      "text":"text odpovědi",
   }
]

Potvrzení o doručení: stav

STAVPOPIS
1SMS úspěšně doručena
2SMS ve vyrovnávací paměti na SMSC. SMS bude doručena později. Příjemce není k dispozici
3SMS nebyla doručena. Neznámý/nedostupný příjemce
10Příchozí SMS nebo SMS odpověď (kontaktujte nás pro více informací)
13Zpráva přečtena (pouze Viber)

Příklad implementace skriptu

<?php declare(strict_types=1);

class Delivery
{
    const STATUS_LIST = [
        0 => 'unknown',
        1 => 'delivered',
        2 => 'unavailable',
        3 => 'not_delivered'
    ];

    public function __construct()
    {
        try
        {
            foreach ($this->loadInput() as $key => $row)
            {
                if($row['type'] === 'answer')
                {
                    $this->inbox($row['from'], $row['message']);
                }
                else
                {
                    $this->delivery($row['smsID'], $row['status'], $row['price'], $row['send_time'], $row['delivery_time']);
                }
            }
        }
        catch (\Exception $e)
        {
            $this->log($e->getMessage(), 'error');

            exit(1);
        }
        exit(0);
    }

    public function inbox(string $from, string $message): void
    {
        $this->log(sprintf('From: [%s] Message: [%s]', $from, $message), 'inbox');
    }

    public function delivery(string $sms_id, string $status, float $price, \DateTime $send_time, \DateTime $delivery_time): void
    {
        $this->log(sprintf('Message ID [%s] is in the status [%s], Price: [%f], Time of sending: [%s], Delivery time: [%s]', $sms_id, $status, $price, $send_time->format('c'), $delivery_time->format('c')), 'delivery');
    }

    private function log(string $message, string $type): void
    {
        $message = '['.date('Y-m-d H-i-s').'] ' . $message . PHP_EOL;

        echo $message;
        file_put_contents(__DIR__."/$type.log", $message,FILE_APPEND);
    }

    private function loadInput(): iterable
    {
        $json = file_get_contents("php://input");

        if($json && is_string($json))
        {
            $data = json_decode($json, true, 512, JSON_BIGINT_AS_STRING);

            if ($error = json_last_error())
            {
                throw new \Exception(json_last_error_msg());
            }

            if(is_array($data))
            {
                foreach($data as $key => $row)
                {
                    if((int) ($row['status'] ?? 0) === 10)
                    {
                        yield $key => [
                            'type' => 'answer',
                            'from' => $row['from'] ?? '',
                            'message' => $row['message'] ?? ''
                        ];
                    }
                    else
                    {
                        [$send_time, $delivery_time] = array_pad(explode(';', $row['date'] ?? '0;0'), 2, 0);

                        yield $key => [
                            'type' => 'dlr',
                            'smsID' => $row['smsID'] ?? '',
                            'status' => self::STATUS_LIST[(int) ($row['status'] ?? 0)] ?? 'unknown',
                            'price' => (float) $row['price'] ?? 0.0,
                            'send_time' => new \DateTime('@'.(string) (int) $send_time),
                            'delivery_time' => new \DateTime('@'.(string) (int) $delivery_time),
                        ];
                    }
                }
            }
            else
            {
                throw new \Exception('Invalid input');
            }
        }
        else
        {
            throw new \Exception('Invalid input');
        }
    }
};

new \Delivery();
← Potvrzení o doručení a příchozí SMS
  • Potvrzení o doručení a příchozí SMS (odpovědi)
    • Potvrzení o doručení: parametry
    • Ukázka požadavku
    • Potvrzení o doručení: stav
    • Příklad implementace skriptu
ŘešeníSMS BránaViber BusinessBroadcastHromadné SMSSMS notifikace2 way SMSMobile ConnectWeb Portál
Partneři a vývojářiSMS APIIntegraceAffiliate programWhite label
ZdrojeBlogYouTubeFacebookLinkedInTwitterGitHubPackagist
SpolečnostKontaktZásady ochrany osobních údajůObchodní podmínky
CeníkyCeník SMSCeník ViberCeník Mobile Connect
SMS BránaTOPefekt s.r.o. © 2023