API Rest 3.2

Wstecz

Poniższa dokumentacja odnosi się do najnowszego API REST w wersji 3.2 dla nowego panelu klienta.                     

Wprowadzenie

 

Każde żądanie musi zawierać następujący nagłówek autoryzacyjny: Authorization: Basic < credentials > gdzie credentials to zakodowany w base64 adres email oraz hasło oddzielone dwukropkiem (hasło dla API należy ustawić w panelu klienta: Ustawienia interfejsów - HTTP API - Użytkownicy API). Można użyć nagłówka Accept w celu wskazania formatu odpowiedzi, np. Accept: text/json.

Kodowania loginu i hasła do postaci base64 można dokonać na przykład w języku PHP przy użyciu poniższej konstrukcji:

 

$authHeader = 'Authorization: Basic ' . base64_encode($login . ':' . $password);

 

Kody odpowiedzi:

 

Statusy wykonania metody są indywidualne dla każdej metody (dotyczy kodów 1-399)

  • 0 - operacja przebiegła pomyślnie
  • 100-199 - wystąpił błąd - nie przekazano wszystkich wymaganych danych
  • 200-299 - wystąpił błąd - wartości przekazanych danych są niepoprawne
  • 300-399 - wystąpił błąd - konfiguracja konta lub systemu nie pozwala na wykonanie operacji
  • 400 - błąd uwierzytelniania, którego przyczyną może być:
    • niepoprawna para login / hasło
    • IP nie znajduje się na liście autoryzowanych adresów
    • przekroczono limit prób logowania (5 prób na 15 minut)
  • 401 - 403 - nieoczekiwany błąd

 

Wysyłanie wiadomości SMS

 

Wysyłka wiadomości SMS odbywa się poprzez żądaniePOST na adres:

 

https://promosms.com/api/rest/v3_2/sms

 

Dostępne metody wywołania: POST

Parametry wejściowe podawane w BODY jako FormData:

  • text - string - treść wysyłanej wiadomości
  • type - integer - typ wysyłanego SMSa. Dozwolone typy to:
    • 0 - SMS Flash(tylko wysyłka krajowa do polskich operatorów)
    • 1 - SMS ECO (tylko wysyłka krajowa do polskich operatorów)
    • 3 - SMS FULL
    • 4 - SMS SPEED
  • recipients[] - string[] - tablica odbiorców wiadomości. W tablicy stringów mają znajdować się więc numery telefonów odbiorców wiadomości (każdy element tablicy to kolejny odbiorca). Numery krajowe do polskich operatorów można podać w formacie 9 cyfrowym. Numery należące do zagranicznych operatorów muszą posiadać prefiks kraju wysyłki.
  • sender - string (opcjonalny) - nazwa nadawcy SMSa (wyświetlana zamiast numeru telefonu). Aby korzystać z własnej nazwy nadawcy należy ją wcześniej zarejestrować. W przypadku SMS ECO/SMS Flash parametr ten jest opcjonalny
  • special-chars - boolean (opcjonalny) - ustawienie tej wartości na 1 spowoduje, że znaki specjalne nie będą zamieniane na odpowiadające im znaki standardowe, lecz wiadomość zostanie wysłana w postaci przekazanej do systemu. Warto jednak pamiętać, że przekazywanie w treści SMSa znaków specjalnych powoduje, że długość SMS’a zmniejsza się ze standardowych 160 znaków do 70 dla pojedynczej wiadomości SMS. Jeżeli zatem chcemy, aby platforma PromoSMS usuwała wszelkie niestandardowe znaki (znaki specjalne), należy podać wartość tej zmiennej ustawioną na 0. Funkcja dostępna tylko dla SMS FULL.
  • long-sms - boolean (opcjonalny) - ustawienie tej wartości na 1 powoduje, że przez platformę są przyjmowane do wysyłki także wiadomości dłuższe niż 160 znaków (lub 70 w przypadku zmiennej special-chars ustawionej na 1). Takie wiadomości będą dostarczone jako jedna całość (potocznie: jako jeden SMS), ale należy liczyć się z wyższym kosztem wysyłki (uzależniony od liczby wiadomości składowych). Naliczanie zgodne z tabelą znaków
  • date - integer (opcjonalny) - znacznik czasowy określający moment kiedy wiadomość ma zostać wysłana (unixowy znacznik czasowy wyrażony w sekundach)
  • delivery-url - string (opcjonalny) - adres URL serwera użytkownika, na który mają być przekazywane raporty dostarczenia wiadomości. W adresie URL mogą być podane następujące zmienne specjalne, które zostaną zastąpione odpowiednią wartością przez system podczas przesyłania raportu na serwer klienta:
    • %smsID - ID wysłanej wiadomości
    • %timestamp - data raportu w postaci unixowego znacznika czasu
    • %number - numer na jaki została wysłana wiadomość
    • %report - ID raportu (1 oznacza dostarczone)
    • %ownID - identyfikator własny użytkownika
  • user-indexes[] - string[] (opcjonalny) - parametr pozwala użytkownikowi zdefiniować własne identyfikatory wiadomości. Liczba elementów tablicy/wektora musi być równa liczbie zdefiniowanych odbiorców wiadomości. Wówczas każdej wiadomości, będzie przyporządkowany kolejny element z tej tablicy. Identyfikator może mieć minimalnie 3 znaki i maksymalnie 50 znaków alfanumerycznych (a-z, A-Z, 0-9)
  • return-send-recipients - boolean (opcjonalny) - flaga określająca, czy w odpowiedzi mają zostać zwrócone szczegóły dotyczące każdego adresata

 

Odpowiedź:

 

W przypadku wybrania formatu odpowiedzi JSON lub XML, wynik jest zgodny z poniższym schematem:

  • status (integer)
  • sentSmsCount (integer)
  • recipientsResults
    • recipientResult[]
      • recipient (string)
      • sms-id (string)
      • own-id (string)
      • status (integer)

 

  • status - kod odpowiedzi
  • sentSmsCount - liczba pomyślnie wysłanych wiadomości
  • recipientsResults[] - szczegółowe informacje o wysyłce (jeżeli ustawiono parametr wejściowy return-recipient-results na 1)
    • recipient - numer telefonu adresata
    • sms-id - indywidualny identifykator wiadomości
    • own-id - identyfikator nadany przez użytkownika
    • status - status przekazania wiadomości (0 - przekazano, 210 - niepoprawny numer)

 

Statusy końcowe funkcji send-sms:

 

KodOpis
100 Nie podano adresatów wysyłki
101 Nie podano treści
102 Nie podano pola nadawcy
103 Nie podano pola UDH
104 Nie podano ani jednego obiektu Message
200 Wszystkie podane numery telefonów są niepoprawne
201 Nazwa nadawcy jest za długa
202 Nie można wysłać wiadomości w przeszłość
203 Liczba własnych identyfikatorów jest niezgodna z liczbą odbiorców
204 Wiadomość jest dłuższa niż 1 sms
205 Wiadomość jest dłuższa niż 4 sms’y (maksimum)
206 Podano więcej niż jednego adresata wysyłki SMS SPEED
207 Treść zawiera znaki spoza zbioru Unicode
208 Jedna wysyłka zawiera adresatów z różnych krajów
209 Niepoprawny typ wiadomości
300 Stan konta nie pozwala na zrealizowanie wysyłki
301 Nazwa nadawcy nie została zarejestrowana
302 Nie można wysłać tego typu wiadomości do wybranego kraju
303 Konto nie zostało przystosowane do korzystania z tej wersji API

 

Przykład w PHP:

$ch = curl_init('https://promosms.com/api/rest/v3_2/sms');
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Authorization: Basic '
        .base64_encode('john.doe@example.com:s3cr3tp4ssw0rd'),
        'Accept: text/json'
      ));
      curl_setopt($ch, CURLOPT_POST, true);
      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
        'text' => 'Test SMS Content',
        'type' => 1,
        'recipients' => array ('504304204','123456789','987654321'),
      )));
      $result = json_decode(curl_exec($ch));

 

Raporty dostarczenia

 

Aby otrzymać raporty wysłanych wiadomości zalecanym sposobem jest podanie adresu URL serwera użytkownika, na który mają być przekazywane. Ustawienie to znajduje się w panelu klienta: Ustawienia - Ustawienia zaawansowane - Raport doręczeń. W adresie URL mogą być podane następujące zmienne specjalne, które zostaną zastąpione odpowiednią wartością przez system podczas przesyłania raportu na serwer klienta:

  • %smsID - ID wysłanej wiadomości
  • %timestamp - data raportu w postaci unixowego znacznika czasu
  • %number - numer na jaki została wysłana wiadomość
  • %report - ID raportu (1 oznacza dostarczone)
  • %ownID - jeżeli używasz własnych identyfikatorów, możesz użyć również tej opcji

Podany adres powinien mieć więc na przykład następującą formę:


https://twojserwer.pl/odbior-raportow.php?identyfikator=%smsID&czas_dostarczenia=%timestamp&na_numer=%number




Aby samodzielnie odpytać system o stan wysłanych wiadomości, można użyć funkcji get-reports

 

https://promosms.com/api/rest/v3_2/reports

 

Dostępna metoda wywołania: GET

Parametry wejściowe:

 

  • indexes[] - strong[] (opcjonalny) - tablica identyfikatorów wiadomości. W zależności od wartości pola index-type, są to identyfikatory smsId, własne identyfikatory użytkownika (userIndex)
  • from-time - integer (opcjonalny) - czas (w postaci uniksowego znacznika czasu), od którego momentu chcemy pobrać informację o statusach wysłanych wiadomości
  • to-time - integer (opcjonalny) - czas (w postaci uniksowego znacznika czasu), do którego momentu chcemy pobrać informację o statusach wysłanych wiadomości
  • index-type - integer (opcjonalny) - rodzaj identyfikatora
    • 0 - smsId
    • 1 - userIndex
  • limit - integer (opcjonalny) - opcja przydatna w przypadku, kiedy trzeba pobrać dużą liczbę statusów (np. kilkadziesiąt tysięcy). Wówczas możemy ograniczyć liczbę zwracanych elementów w tablicy.
  • offset - integer (opcjonalny) - pole to określa, od jakiego momentu ma być zwracana tablica. Wartość tego pola brana jest pod uwagę tylko w momencie zastosowania parametru limit

 

Odpowiedź:

 

W przypadku wybrania formatu odpowiedzi JSON lub XML, wynik jest zgodny z poniższym schematem:

 

  • status (integer)
  • reports
    • report[]
      • recipient (string)
      • smsId (string)
      • ownId (string)
      • status (integer)
      • lastUpdateTime (integer)

 

  • status - kod odpowiedzi
  • reports[] - tablica raportów
    • recipient - numer telefonu adresata wiadomości
    • smsId - unikalny identyfikator wiadomości
    • ownId - identyfikator nadany przez użytkownika
    • status - stan wysyłki
      • 0 - wiadomość oczekuje na wysłanie
      • 4, 8 - wiadomość została wysłana
      • 1 - wiadomość została dostarczona do odbiorcy
      • 2, 16 - wiadomość nie została dostarczona - najczęstsze przyczyny tego statusu to niepoprawny numer telefonu lub brak aktywności telefonu adresata przez zbyt długi okres czasu
    • lastUpdateTime - czas ostatniej aktualizacji statusu

 

Statusy końcowe funkcji get-reports:

 

KodOpis
100 Nie określono typu identyfikatora
101 Nie podano identyfikatorów wiadomości
200 Wszystkie podane identyfikatory są niepoprawne
201 Niepoprawny znacznik czasowy
202 Niepoprawny typ identyfikatora
203 Niepoprawna wartość parametru “limit”
204 Niepoprawna wartość parametru “offset”

 

Przykład w PHP:

 

$ch = curl_init('https://promosms.com/api/rest/v3_2/reports?' . http_build_query(array(
        'from-time' => 1433109600,
        'to-time'   => 1435701600,
      )));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Authorization: Basic '
        .base64_encode('john.doe@example.com:s3cr3tp4ssw0rd'),
        'Accept: text/json'
      ));
      $result = json_decode(curl_exec($ch));

 

Odbieranie odpowiedzi

 

W przypadku realizacji wysyłki SMS ECO, istnieje możliwość, aby odbiorca wiadomości odpowiedział na nią. Odpowiedzi takie dostępne są zarówno przez Panel SMS jak i poprzez REST API.

 

Odbiór wiadomości odbywa się poprzez wywołanie metody get-inbox

 

https://promosms.com/api/rest/v3_2/inbox

 

Dostępna metoda wywołania: GET

 

Parametry wejściowe:

 

  • last-message-id - integer (opcjonalny) - każda odebrana wiadomość SMS ma swój unikalny identyfikator w postaci liczby. Jeżeli chcemy odbierać wiadomość tylko od danej wiadomości o znanym nam identyfikatorze - należy go tutaj podać. Jeżeli więc wcześniej przy odbiorze wiadomości ostatnia odczytana wiadomość miała numer 359 i teraz chcemy, aby funkcja zwróciła tylko nowsze wiadomości - to jako wartość tego parametru należy podać 359.
  • from-time - integer (opcjonalny) - jeżeli zamiast podawania identyfikatora wiadomości chcemy pobrać wszystkie wiadomości od danego momentu to należy go tutaj podać w postaci uniksowego znacznika czasu.
  • sms-id - string (opcjonalny) - unikalny identyfikator wiadomości
  • own-id - string (opcjonalny) - identyfikator wiadomości nadany przez użytkownika

 

Odpowiedź:

 

W przypadku wybrania formatu odpowiedzi JSON lub XML, wynik jest zgodny z poniższym schematem:

 

  • status (integer)
  • inboxMessages
    • inboxMessage[]
      • messageId (integer)
      • sender (string)
      • message (string)
      • originalMessage (string)
      • receiveTime (integer)

 

  • status - kod odpowiedzi
  • inbox-messages[] - tablica odpowiedzi
    • messageId - identyfikator odpowiedzi
    • sender - numer telefonu osoby przesyłającej odpowiedź
    • message - treść odpowiedzi
    • originalMessage - treść wiadomości, której dotyczy odpowiedź
    • receiveTime - czas otrzymania wiadomości (w postaci uniksowego znacznika czasowego)

 

Statusy końcowe funkcji get-inbox:

 

KodOpis
200 Niepoprawny identyfikator odpowiedzi
201 Niepoprawny znacznik czasowy
202 Niepoprawny identyfikator treści

 

Przykład w PHP:

 

$ch = curl_init('https://promosms.com/api/rest/v3_2/inbox?' . http_build_query(array(
        'from-time' => 1433109600,
      )));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Authorization: Basic '
        .base64_encode('john.doe@example.com:s3cr3tp4ssw0rd'),
        'Accept: text/json'
      ));
      $result = json_decode(curl_exec($ch));

 

Sprawdzanie stanu konta

 

Sprawdzanie stanu konta odbywa się poprzez wywołanie metody get-balance

 

https://promosms.com/api/rest/v3_2/balance

 

Dostępna metoda wywołania: GET

 

Funkcja nie przyjmuje dodatkowych parametrów wejściowych.

 

Odpowiedź:

 

W przypadku wybrania formatu odpowiedzi JSON lub XML, wynik jest zgodny z poniższym schematem:

 

  • status (integer)
  • balanceAvailable (integer)

 

  • status - kod odpowiedzi
  • balanceAvailable - liczba dostępnych do wykorzystania środków podanych w groszach

 

Statusy końcowe funkcji get-balance:

 

KodOpis
300 Konto nie jest przystosowane do korzystania z tej wersji API

 

Przykład w PHP:

 

$ch = curl_init('https://promosms.com/api/rest/v3_2/balance');
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Authorization: Basic '
        .base64_encode('john.doe@example.com:s3cr3tp4ssw0rd'),
        'Accept: text/json'
      ));
      $result = json_decode(curl_exec($ch));

 

Konwertowanie wiadomości

 

Wiadomość przy wysyłce jest konwertowana do standardu GSM, a następnie obliczana jest liczba wiadomości składowych oraz koszt realizacji takiej wysyłki. Konwersja taka odbywa się poprzez wywołanie funkcji convert-message.

 

https://promosms.com/api/rest/v3_2/convert-message

 

Dostępna metoda wywołania: GET

 

Parametry wejściowe:

 

  • text - string - treść wiadomości, na podstawie której ma być obliczona liczba znaków oraz liczba SMSów składowych
  • special-chars - boolean - jeżeli parametr przyjmie wartość true, wówczas znaki specjalne są dozwolone w wiadomości i nie zostaną zastąpione odpowiednikami w znakach standardowych. Jeżeli natomiast zostanie ustawiona wartość false, wówczas wszelkie znaki specjalne zostaną przekonwertowane i dopiero wówczas zostanie obliczona długość wiadomości i liczba SMSów składowych. Funkcja dostępna tylko dla SMS FULL.
  • long-sms - boolean (opcjonalny) - jeżeli pole to przyjmie wartość false, wiadomość zostanie przycięta do długości jednej wiadomości sms.
  • sms-type - integer (opcjonalny) - rodzaj wiadomości SMS. Jeżeli pole to, wraz z jednym z pól country-code / country-prefix / country-name nie są puste, w odpowiedzi zostanie zawarty koszt wysłania tej wiadomości do pojedynczego adresata
    • 0 - SMS Flash
    • 1 - SMS ECO
    • 3 - SMS FULL
    • 4 - SMS SPEED
  • country-code - string (opcjonalny) - kod kraju odbiorcy w postaci dwóch liter
  • country-prefix - string (opcjonalny) - prefiks kraju odbiorcy
  • country-name - string (opcjonalny) - nazwa kraju odbiorcy

 

Odpowiedź:

 

W przypadku wybrania formatu odpowiedzi JSON lub XML, wynik jest zgodny z poniższym schematem:

 

  • status (integer)
  • charsNumber (integer)
  • smsParts (integer)
  • text (string) 

 

  • status - kod odpowiedzi
  • charsNumber - łączna liczba znaków wiadomości
  • smsParts - liczba SMSów składowych
  • text - treść wiadomości. Jeżeli w parametrach wejściowych bSpecialChars przyjęło wartość false, to wówczas zostanie tutaj zwrócona nie oryginalna treść wiadomości, lecz wiadomość przekonwertowana 

Statusy końcowe funkcji convert-message:

 

KodOpis
100 Nie podano treści
101 Nie podano typu wiadomości SMS
200 Zbyt długa wiadomość (nie mieści się w ramach 4 wiadomości składowych)
201 Podano różne kraje wysyłki
202 Podany kraj wysyłki nie istnieje
300 Wysyłka tego typu wiadomości do podanego kraju jest niedostępna

 

Przykład w PHP:

 

    $ch = curl_init('https://promosms.com/api/rest/v3_2/convert-message?' . http_build_query(array(

            'text' => 'Puść mą dłoń! Gnij schab, frytkę! Zwóź żel!',

            'special-chars' => 0,

          )));
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array(
          'Authorization: Basic '
            .base64_encode('john.doe@example.com:s3cr3tp4ssw0rd'),
            'Accept: text/json'
          ));
          $result = json_decode(curl_exec($ch));

 

Sprawdzanie poprawności numerów

 

Funkcja validate-numbers umożliwia sprawdzanie poprawności numeru pod względem składniowym. Sprawdzane jest więc, czy np. numer 504304204 ma poprawną formę i jest możliwym numerem.

 

https://promosms.com/api/rest/v3_2/validate-numbers

 

Dostępna metoda wywołania: GET

 

Parametry wejściowe:

 

  • country-prefix - prefiks kraju z którego inicjowane jest połączenie. Dla przykładu, jeżeli jest to “48”, to następujące numery są traktowane jako numery polskie: “512345678”, “48512345678”, “+48512345678”, w dodatku jest to ten sam numer zapisany w różny sposób. Jeżeli natomiast pole to przyjmie wartość “49”, to tylko ostatni z przykładów jest potraktowany jako numer polski.
  • numbers[] - tablica numerów telefonów. Jeżeli numer posiada inny prefiks kraju niż określony w polu country-prefix, należy użyć symbolu “+” (plus). W przypadku numerów poprzedzonych znakiem "+" jest ignorowany parametr country-prefix.

 

Odpowiedź:

 

W przypadku wybrania formatu odpowiedzi JSON lub XML, wynik jest zgodny z poniższym schematem:

 

  • status (integer)
  • numbers
    • number[]
      • originalNumber (string)
      • isValid (boolean)
      • countryPrefix (string)
      • formatted (string)

 

  • status - kod odpowiedzi
  • numbers[] - tablica ze szczegółowymi informacjami o numerze telefonu
    • originalNumber - postać w jakiej numer został podany w żądaniu
    • isValid - flaga określająca, czy numer jest poprawny
    • countryPrefix - prefiks kraju
    • formatted - numer telefonu z prefiksem kraju

 

Statusy końcowe funkcji validate-numbers:

 

KodOpis
100 Nie podano ani jednego numeru telefonu

 

Przykład w PHP:

 

$ch = curl_init('https://promosms.com/api/rest/v3_2/validate-numbers?' . http_build_query(array(
        'country-prefix' => '48',
        'numbers' => array ('500001002', '500001003'),
      )));
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_HTTPHEADER, array(
      'Authorization: Basic '
        .base64_encode('john.doe@example.com:s3cr3tp4ssw0rd'),
        'Accept: text/json'
      ));
      $result = json_decode(curl_exec($ch));

  

Dodawanie kontaktów

 

REST API umożliwia dodawanie kontaktów do Książki Adresowej za pomocą funkcji add-contacts

 

https://promosms.com/api/rest/v3_2/contacts

 

Dostępna metoda wywołania: POST

 

Parametry wejściowe podawane w BODY jako FormData:

 

  • contacts[] - string[] - tablica numerów telefonów
  • groups[] - string[] - tablica identyfikatorów grup kontaktów
  • create-groups-if-not-exist - boolean - flaga określająca czy utworzyć nową grupę w przypadku gdy podana w polu “groups” wartość nie istnieje jeszcze w systemie

 

Odpowiedź:

 

W przypadku wybrania formatu odpowiedzi JSON lub XML, wynik jest zgodny z poniższym schematem:

 

  • status (integer)
  • contactsCount (integer)

 

  • status - kod odpowiedzi
  • contactsCount - liczba dodanych kontaktów

 

Statusy końcowe funkcji add-contacts

 

KodOpis
100 Nie podano kontaktów
101 Brak numeru telefonu w kontakcie
200 Niepoprawne numery telefonów
300 Konto nie ma ustalonego domyślnego kraju wysyłki

 

Przykład w PHP:

 

    $ch = curl_init('https://promosms.com/api/rest/v3_2/contacts');
                          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                          curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                          'Authorization: Basic '
                            .base64_encode('john.doe@example.com:s3cr3tp4ssw0rd'),
                            'Accept: text/json'
                          ));
                          curl_setopt($ch, CURLOPT_POST, true);
                          curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
                            'contacts' => array(

                              array(

                                'phone' => '+48504304204',

                                'name' => 'PromoSMS',

                                'first-name' => 'John',

                                'last-name' => 'Doe',

                            ),
                            'groups' => array('awesome'),
                            'create-groups-if-not-exist' => 1,
                          )));
                          $result = json_decode(curl_exec($ch));