11.03.2025
Weryfikacja API

We współczesnym świecie bezpieczeństwo kont i prawidłowość danych odgrywają kluczową rolę. Systemu starają się potwierdzać autentyczność informacji, a użytkownicy starają się chronić swoje dane.

Podczas rejestracji lub logowania się do konta użytkownicy podają swoje dane kontaktowe - numer telefonu lub adres e-mail. Aby mieć pewność, że wprowadzone informacje są prawidłowe i należą do prawdziwej osoby, wymagana jest weryfikacja.

Weryfikacja danych jest istotna zarówno dla użytkownika, jak i samego systemu. Dla Klienta weryfikacja oznacza dodatkowe bezpieczeństwo i wygodę. Pomaga chronić dane osobowe i upraszcza odzyskiwanie dostępu. Dla firm jest to z kolei sposób na utrzymanie aktualności bazy klientów, eliminowanie nieistniejących kontaktów i zapobieganie masowym rejestracjom.

Interfejs API Zadarma udostępnia rozwiązanie wielokanałowej weryfikacji użytkowników – metoda /v1/verify/.

Aktualnie metoda obsługuje 4 kanały:

  1. SMS - Na numer odbiorcy zostanie wysłana wiadomość SMS z kodem potwierdzenia,
  2. Połączenie z kodem (call_code) - następuje połączenie na numer odbiorcy, podczas którego dyktowany jest kod potwierdzenia,
  3. Połączenie z instrukcjami (call_button) - następuje połączenie na numer odbiorcy, podczas którego użytkownik powinien postępować zgodnie z instrukcjami zawartymi w plikach dźwiękowych i potwierdzić przyciskiem „1”,
  4. Email - na podany adres e-mail zostanie wysłana wiadomość z kodem potwierdzenia.

Interfejs API jest całkowicie bezpłatny i dostępny na wszystkich kontach Zadarma.

Jak rozpocząć korzystanie z API Zadarma?

Najlepszą opcją na rozpoczęcie korzystania z API Zadarma jest instalacja naszej biblioteki napisanej w PHP: github.com/zadarma/user-api-v1. Zawiera szczegółowe instrukcje dotyczące instalowania i konfigurowania API.

Praca z metodą /v1/verify/

W tej sekcji przedstawimy przykłady żądań i weryfikacji odpowiedzi dla każdego z 4 kanałów.

Kanał sms

Wysłanie kodu weryfikacyjnego SMS-em. Może służyć do weryfikacji numerów podczas rejestracji lub uwierzytelniania dwuetapowego. Wysłanie SMS jest usługą płatną, dlatego użytkownik API powinien mieć dodatnie saldo konta.

Przykład wysłania żądania weryfikacji kanałem SMS:



$zd = new \Zadarma_API\Client('key_from_user_panel', 'secret_code_from_user_panel');
$answer = $zd->call('/v1/verify/', [
   'channel' => 'sms',
   'to' => '+48575555555'
], 'POST');
// decode string {"status":"success","request_id":"N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success', 'request_id' => 'N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9']

Wyjaśnienie żądania: na numer 'to' będzie wysłana wiadomość SMS z automatycznie wygenerowanym kodem. Dla wiadomości SMS zastosowany zostanie domyślny szablon, język panelu klienta i SenderID „Teamsale”. Jeśli potrzebujesz użyć niestandardowego szablonu, innego języka, predefiniowanego kodu lub zarejestrowanego SenderID, możesz użyć dodatkowych parametrów metody (odpowiednio template_id, language, code i caller_id).

Aby sprawdzić poprawność kodu przesłanego w wiadomości należy wysłać żądanie w formacie:


$zd = new \Zadarma_API\Client('key_from_user_panel', 'secret_code_from_user_panel');
$answer = $zd->call('/v1/verify/check', 
   'request_id' => 'N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9',
   'code' => '956305'
], 'POST');
// decode string {"status":"success","message":"Code is correct"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success', 'message' => 'Code is correct']

Kanał call_code

Po wybraniu tego kanału wykonywane jest połączenie na numer odbiorcy, podczas którego zostanie podany kod. Alternatywna metoda potwierdzania numerów. Nadaje się do weryfikacji numerów telefonów stacjonarnych lub w przypadkach, gdy odbiór wiadomości SMS nie jest możliwy.

Aby korzystać z tego kanału będzie potrzebne:

Przykład wysłania żądania weryfikacji kanałem call_code:



$zd = new \Zadarma_API\Client('key_from_user_panel', 'secret_code_from_user_panel');
$answer = $zd->call('/v1/verify/', [
   'channel' => 'call_code',
   'to' => '+48575555555'
], 'POST');
// decode string {"status":"success","request_id":"N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success', 'request_id' => 'N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9']

Wyjaśnienie żądania: na numer 'to' zostanie wykonane połączenie, po odebraniu połączenia zostanie dwukrotnie podyktowany automatycznie wygenerowany kod. Domyślnie wiadomość jest w języku Twojego panelu klienta, jeśli chcesz użyć innego, określ język w parametrze language.

Ważne: jeżeli do konta podłączony jest więcej niż jeden numer wirtualny to w parametrze from w formacie E.164 należy podawać numer, z którego będzie wykonywane połączenie.

Sprawdzanie poprawności kodu:


$zd = new \Zadarma_API\Client('key_from_user_panel', 'secret_code_from_user_panel');
$answer = $zd->call('/v1/verify/check', [
   'request_id' => 'N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9',
   'code' => '249376'
], 'POST');
// decode string {"status":"success","message":"Code is correct"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success', 'message' => 'Code is correct']

Kanał call_button

Ten kanał jest przeznaczony do przypadków, w których użytkownik powinien zostać jasno poinformowany o tym, co jest potwierdzane, zanim zostaną podjęte jakiekolwiek działania. Zamiast po prostu podać kod, system dzwoni do użytkownika i przekazuje mu wiadomość głosową z instrukcjami. Aby potwierdzić żądanie, abonent powinien nacisnąć przycisk "1".

Aby korzystać z tego kanału będzie potrzebne:

Przykład wysłania żądania weryfikacji kanałem call_button:


$zd = new \Zadarma_API\Client('key_from_user_panel', 'secret_code_from_user_panel');
$answer = $zd->call('/v1/verify/', [
   'channel' => 'call_button',
   'to' => '+48575555555',
   'greeting_sound_id' => '657c2c822fb364c1d201f685',
   'button_1_sound_id' => '6718bc2af7cd712b0e0a96f6',
   'fallback_sound_id' => '6718bd57e2cc3072e20c0ba6'
], 'POST');
// decode string {"status":"success"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success']

Wyjaśnienie żądania: na numer 'to' zostanie wykonane połączenie, po odebraniu połączenia zostanie odtworzony plik z parametra ‘greeting_sound_id’. Jeśli użytkownik potwierdza działanie, naciska przycisk „1” i słyszy plik z parametrem „button_1_sound_id”. Jeśli użytkownik nie naciśnie przycisku „1”, a naciśnie inny przycisk lub nie wykona żadnego działania, zostanie odtworzony plik 'fallback_sound_id'.

Ważne: w przypadku tej metody wymagane jest odtworzenie plików dźwiękowych. Aby zarządzać plikami audio używanymi w ustawieniach greeting_sound_id, button_1_sound_id i fallback_sound_id, skorzystaj z metod API, dostępnych w zakładce /v1/pbx/ivr/sounds/*.

Jeżeli do konta podłączony jest więcej niż jeden numer wirtualny to w parametrze from w formacie E.164 należy podawać numer, z którego będzie wykonywane połączenie.

Sprawdzanie poprawności kodu:

Wynik żądania poprzez kanał call_button wysyłany jest na adres URL podany w „Notifications”. w panelu klienta , z $_POST danymi w formacie:



(
    [event] => NOTIFY_END
    [call_start] => 2024-10-23 16:00:47
    [pbx_call_id] => out_0e7d449cac2f0a3ce54919e91cd999194e8f2d97
    [caller_id] => 575555555
    [called_did] => 0
    [internal] => 100
    [last_internal] => 100
    [duration] => 3
    [status_code] => 16
    [is_recorded] => 0
    [calltype] => callback_leg1
    [callback_dtmf] => 1
    [disposition] => answered
)

W callback_dtmf przekazywany jest przycisk, który został naciśnięty, lub pusta wartość, jeśli użytkownik nic nie nacisnął.

W disposition pojawi się informacja o tym, czy użytkownik odebrał telefon. Answered oznacza, że ​​połączenie zostało odebrane, cancel oznacza, że ​​połączenie nie zostało odebrane.

W caller_id zostanie podany numer, pod który wykonano połączenie.

Prostym sposobem sprawdzenia, czy żądanie się powiodło, a użytkownik potwierdził żądanie, jest sprawdzenie czy $_POST['callback_dtmf'] == '1'

Kanał email

Podczas korzystania z tego kanału na adres e-mail zostanie wysłana wiadomość z kodem potwierdzającym. Metodę tę można wykorzystać do potwierdzenia rejestracji, uwierzytelnienia dwuetapowego lub odzyskania hasła.

Aby korzystać z tego kanału będzie potrzebne:

Przykład wysłania żądania weryfikacji kanałem email:


$zd = new \Zadarma_API\Client('key_from_user_panel', 'secret_code_from_user_panel');
$answer = $zd->call('/v1/verify/', [
   'channel' => 'email',
   'to' => 'test-email@zadarma.com'
], 'POST');
// decode string {"status":"success","request_id":"N2RLeGlzcWpmR3EvOW8rdGNHaFN1U1k9"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success', 'request_id' => 'N2RLeGlzcWpmR3EvOW8rdGNHaFN1U1k9']

Wyjaśnienie żądania: na email 'to' zostanie wysłana wiadomość z automatycznie wygenerowanym kodem potwierdzającym. Zastosowany zostanie temat i szablon wiadomości domyślnej, tekst będzie w języku panelu klienta. Jeśli chcesz użyć innego języka, indywidualnego tematu lub treści wiadomości e-mail, użyj dodatkowych parametrów language, email_subjec i email_body, aby przekazać potrzebne wartości.

Ważne: jeżeli na koncie skonfigurowano więcej niż jedna email-integracja, należy przekazywać email nadawcy w parametrze from.

Jeżeli przekazujesz swoją treść wiadomości, należy dodać wiersz "code" w celu automatycznego przekazywania potwierdzającego kodu.

Sprawdzanie poprawności kodu:



$zd = new \Zadarma_API\Client('key_from_user_panel', 'secret_code_from_user_panel');
$answer = $zd->call('/v1/verify/check', [
   'request_id' => 'N2RLeGlzcWpmR3EvOW8rdGNHaFN1U1k9',
   'code' => '7348295'
], 'POST');
// decode string {"status":"success","message":"Code is correct"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success', 'message' => 'Code is correct']

Wdrażaj nowoczesne metody weryfikacji i zwiększ poziom bezpieczeństwa systemu, zachowując jednocześnie jego wygodę i stabilność.