11.03.2025
Verification API

В современном мире безопасность аккаунтов и достоверность данных играют ключевую роль. Сервисы стремятся подтвердить подлинность информации, а пользователи — защитить свои данные.

При регистрации или входе в аккаунт пользователи указывают свои контактные данные - номер телефона или email. Чтобы убедиться, что информация введена корректно и принадлежит реальному человеку, требуется верификация.

Проверка данных важна как для пользователя, так и для самого сервиса. Для клиента верификация означает дополнительную безопасность и удобство. Она помогает защитить личные данные и упростить восстановление доступа. Для бизнеса, в свою очередь, это способ поддерживать актуальность клиентской базы, исключая несуществующие контакты и предотвращая массовые регистрации.

API интерфейс Zadarma предоставляет решение для мультиканальной верификации пользователей - метод /v1/verify/.

На данный момент, метод поддерживает 4 канала:

  1. SMS - на номер получателя будет отправлено SMS сообщение с кодом подтверждения,
  2. Звонок с кодом (call_code) - на номер получателя совершается звонок, в ходе которого озвучивается код подтверждения,
  3. Звонок с инструкциями (call_button) - на номер получателя совершается звонок, во время которого пользователь должен следовать инструкциям из звуковых файлов и нажать кнопку "1" для подтверждения,
  4. Email - на указанный email-адрес отправляется письмо с кодом подтверждения.

Интерфейс API абсолютно бесплатен и доступен на всех учетных записях Zadarma.

Как начать работу с API Zadarma?

Лучшим вариантом для начала использования API Zadarma является установка нашей библиотеки, написанной на PHP: github.com/zadarma/user-api-v1. В ней есть подробная инструкция по установке и настройке API клиента.

Взаимодействие с методом /v1/verify/

В этом разделе мы приведем примеры запросов и проверки ответов для каждого из 4 каналов.

Канал sms

Отправка кода подтверждения через SMS. Может применяться для верификации номеров при регистрации или двухфакторной аутентификации. Отправка SMS является платной, поэтому у пользователя API должен быть положительный баланс.

Пример отправки запроса на верификацию через канал sms:



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

Объяснение запроса: на номер 'to' будет отправлено SMS с автоматически сгенерированным кодом. Для SMS будет использован шаблон по умолчанию, язык личного кабинета пользователя и SenderID “Teamsale”. Если нужно использовать индивидуальный шаблон, другой язык, заранее заданный код либо зарегистрированный SenderID - вы можете использовать дополнительные параметры метода (template_id, language, code и caller_id соответственно).

Для проверки правильности кода, отправленного через SMS, нужно отправить запрос формата:


$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']

Канал call_code

При выборе этого канала на номер получателя совершается звонок, в ходе которого озвучивается код. Альтернативный метод для подтверждения номеров. Подходит для верификации стационарных номеров или случаев, когда SMS недоступны.

Для использования этого канала требуется:

Пример отправки запроса на верификацию через канал 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' => '+380999999999'
], 'POST');
// decode string {"status":"success","request_id":"N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9"} to the php array
$answerDecoded = json_decode($answer, true);
// $answerDecoded equals ['status' => 'success', 'request_id' => 'N2QreWpjS25mR3EvOW8rdGNHdFF2aVE9']

Объяснение запроса: на номер 'to' выполняется звонок, после снятия трубки дважды озвучивается автоматически сгенерированный код. По умолчанию, сообщение озвучивается на языке личного кабинета, если нужно использовать другой - укажите нужный язык в параметре language.

Важно: если на аккаунте подключено более одного виртуального номера, то в параметре from в формате E.164 нужно передавать номер, с которого будет совершаться вызов.

Проверка правильности кода:


$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']

Канал call_button

Этот канал предназначен для случаев, когда пользователь должен быть четко проинформирован о том, что подтверждается, прежде чем будут предприняты какие-либо действия. Вместо того чтобы просто предоставить код, система звонит пользователю и передает голосовое сообщение с инструкциями. Для подтверждения запроса, абонент должен нажать кнопку "1".

Для использования этого канала требуется:

  • Наличие номера телефона в системе Zadarma
  • Включенная АТС.
  • В уведомлениях о событиях должен быть указан URL для уведомлений и включен webhook NOTIFY_OUT_END.
  • Положительный баланс.

Пример отправки запроса на верификацию через канал 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' => '+380999999999',
   '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']

Объяснение запроса: на номер 'to' выполняется звонок, после снятия трубки проигрывается файл из параметра ‘greeting_sound_id’. Если пользователь подтверждает действие, он нажимает кнопку “1” и слышит файл из параметра 'button_1_sound_id'. Если пользователь не нажмет кнопку “1”, а нажмет другую кнопку или не выполнит никаких действий - будет проигрываться файл 'fallback_sound_id'.

Важно: передача звуковых файлов для данного метода обязательна. Для управления звуковыми файлами, используемыми в параметрах greeting_sound_id, button_1_sound_id и fallback_sound_id, воспользуйтесь методами API, доступными в разделе /v1/pbx/ivr/sounds/*.

Если на аккаунте подключено более одного виртуального номера, то в параметре from в формате E.164 нужно передавать номер, с которого будет совершаться вызов.

Проверка правильности кода:

Результат обработки запроса через канал call_button отправляется на URL, который указан в интеграции “Notifications” в личном кабинете, c $_POST данными формата:



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

В callback_dtmf передается кнопка, которая была нажата, либо пустое значение, если пользователь ничего не нажал.

В disposition будет информация о том, поднял ли трубку пользователь. Answered означает, что звонок был отвечен, cancel - не был отвечен.

В caller_id будет указан номер, на который был осуществлен звонок.

Простой способ проверить, что запрос выполнен успешно и пользователь подтвердил запрос - проверить что $_POST['callback_dtmf'] == '1'

Канал email

При использовании данного канала на email отправляется письмо с кодом подтверждения. Метод можно использовать для подтверждения регистраций, двухфакторной аутентификации либо восстановления пароля.

Для использования этого канала требуется:

Пример отправки запроса через канал 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']

Объяснение запроса: на почту 'to' отправляется письмо с автоматически сгенерированным кодом. Используется тема и шаблон письма по умолчанию, текст будет на языке личного кабинета пользователя. Если нужно использовать другой язык, индивидуальную тему или текст письма - используйте дополнительные параметры language, email_subject и email_body для передачи нужных значений.

Важно: если на аккаунте активировано более одной email-интеграции, нужно передавать email адрес отправителя в параметре from.

Если вы передаете свой текст письма, в него нужно добавить строку "code" для автоматической подстановки кода подтверждения.

Проверка правильности кода:



$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']

Внедряйте современные методы верификации и повышайте уровень безопасности сервиса, сохраняя его удобство и стабильность работы.