PHONE-CONFIRM API

Статус документа

Оглавление

Цель и смысл

Данное API предназначено для подтверждения номера телефона пользователя.

Приоритетность каналов подтверждения номера телефона

Сценарии

1. SIM-Push

2. Звонок пользователю (при ошибке с sim-push)

3. SMS после звонка (через другого провайдера)

4. Тех. поддержка.

Повторные запросы


Итоговая логика

Этап Способ Примечание
1 SIM-Push уведомление + SMS SMS отправляется, если уведомление не доставлено или отклонено; оба через одного провайдера
2 Звонок Если SIM-Push не сработал
3 SMS (другой провайдер) Если звонок не сработал
4 Тех. поддержка Если ни один из каналов подтверждения не сработал, обращение в тех поддержку для подтверждения номера телефона

Взаимодействие с API

API подразумевает доступ только аутентифицированного пользователя (возможно, анонимного), пользующегося авторизованным приложением.

Вследствие чего данное API должно быть доступно только по HTTPS. Формат запроса:

https://<path_to_api>/<api_version>/<method>

Где:

Коды ответов сервера должны соответствовать стандартным кодам HTTP-ответов для соответствующих ситуаций.

Коды ответов

HTTP-код Описание
200 Успешный запрос. Ответ содержит ожидаемые данные
400 Неверный запрос. Ошибка в синтаксисе запроса или отсутствуют обязательные параметры
404 Ресурс не найден
401 Пользователь не авторизован. Нужно получить действующий токен
422 Ошибка валидации. Невалидны параметры запроса
500 Внутренняя ошибка сервера. Что-то пошло не так на стороне бэкенда
503 Сервис временно недоступен (например, из-за технических работ)

Аутентификация

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

Для авторизации по типу токена “Bearer” рекомендуется использовать HTTP заголовок Authorization, пример:

Authorization: Bearer 18dasd81230dah12032

Методы

confirm - подтвердить номер телефона

Параметры:

Параметр Тип Обязательный Описание
phone строка Да Номер телефона пользователя
request_id строка опциональный ID запроса подтверждения. Используется для смены канала подтверждения

Замечание: - phone должен содержать 11 цифр и первые две цифры должны начинаться с 79, +79, 89. То есть только сотовые российские номера

✅ Допустимый формат phone: - +79xxxxxxxx - 79xxxxxxxx - 89xxxxxxxx

Пример успешного взаимодействия

Запрос

POST /phoneconfirm/2/confirm
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv

{
  "phone": "79997772222"
}

Ответ*

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8

{
  "result": "ok",
  "request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494",
  "type": "sim-push",
  "code_input_required": "4_digit_code",
  "ttl": 900,
  "timeout": 60
}

Описание полей ответа

Параметр Тип Обязательный Описание
result строка Да Статус выполнения: ok при успехе, error при ошибке
request_id строка Да ID запроса подтверждения.
type строка Да Тип канала подтверждения
code_input_required строка Да информация о том, нужно ли пользователю вводить код
ttl число Да Время жизни ID запроса подтверждения секундах. При истечении времени нужно выполнить повторный запрос на подтверждение номера телефона и подтверждение произойдет заново с sim-push
timeout число Да Это интервал времени между запросами на подтверждение в секундах.
error строка опциональный Ошибка. Список ошибок смотреть ниже

Возможные значения параметра type:

Пример ответа с ошибкой:

HTTP/1.1 200
Content-Type: application/json; charset=UTF-8

{
  "result": "error",
  "error": "delivery_failed"
}

verify - проверка статуса подтверждения номера телефона

Параметры:

Параметр Тип Обязательный Описание
request_id integer Да ID запроса подтверждения из метода confirm

Пример успешного взаимодействия

Запрос

POST /phoneconfirm/2/verify
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv

{
  "request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494"
}

Успешный Ответ

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
"result": "ok",
"status": "confirmed",
"code_input_required": "no_code",
"error_attempts": 0,
"max_attempts": 3,
"ttl": 90
}

Пример ответа с ошибкой

HTTP/1.1 200
Content-Type: application/json; charset=UTF-8

{
"result": "error",
"error": "request_id_expired"
}

Описание полей ответа

Параметр Тип Обязательный Описание
result строка Да Статус выполнения: ok при успехе, error при ошибке
status строка Да Статус выполнения
code_input_required строка Да информация о том, нужно ли пользователю вводить код
error_attempts число Да Количество неверных попыток ввода кода
max_attempts число Да Максимальное количество попыток ввода кода
ttl число Да Оставшееся время в секундах для проверки статуса. Счетчик уменьшается на бэкенде
error строка опциональный Ошибка. Список ошибок смотреть ниже
! Клиент обязан сохранять предыдущий ответ API при status: "unconfirmed" !

Это требуется для корректной обработки сценариев: - Сравнения изменений между последовательными запросами verify - Отслеживания динамики параметров (error_attempts, code_input_required) - Принятия решений о переходе между экранами приложения

Сценарий использования метода verify

🔹 1. Успешное подтверждение номера телефона через sim-push

Параметры ответа:

{
  "result": "ok",
  "status": "confirmed",
  "code_input_required": "no_code",
  "error_attempts": 0,
  "max_attempts": 3,
  "ttl": 90
}

Действия от клиента:

🔹 2. Номер телефона не подтвержден по sim-push

Параметры ответа:

{
  "result": "ok",
  "status": "unconfirmed",
  "code_input_required": "no_code",
  "error_attempts": 0,
  "max_attempts": 3,
  "ttl": 90,
}

Действия от клиента:

🔹 3. Требуется ввод кода

Параметры ответа:

{
  "result": "ok",
  "status": "unconfirmed",
  "code_input_required": "4_digit_code",
  "error_attempts": 0,
  "max_attempts": 3,
  "ttl": 90
}

Действия от клиента:

🔹 4. Повторная проверка статуса, если текущий ответ не изменился по сравнению с предыдущим

Параметры ответа:

{
  "result": "ok",
  "status": "unconfirmed",
  "code_input_required": "4_digit_code",
  "error_attempts": 0,
  "max_attempts": 3,
  "ttl": 90
}

Действия от клиента:

🔹 5. Неверный код подтверждения. error_attempts увеличился

Параметры ответа:

{
  "result": "ok",
  "status": "unconfirmed",
  "code_input_required": "4_digit_code",
  "error_attempts": 1, // увеличилось. Приложению  нужно запомнить предыдущий ответ и сравнивать с новым. При увелечении приложению нужно уведомить пользователю о невалидном коде и предложить ввести код заново
  "max_attempts": 3,
  "ttl": 90
}

Действия клиента:

checkCode - отправка кода.

Параметры:

Параметр Тип Обязательный Описание
request_id строка Да ID запроса подтверждения из метода confirm
code строка Да код введенный пользователем

Пример успешного взаимодействия

Запрос

POST /phoneconfirm/2/checkCode
Authorization: Bearer 18dasd81230dah12032
Content-Type: application/json
Host: api.peers.tv

{
  "request_id": "bded3728-3ddc-4db9-ab7f-16612f3e3494",
  "code": "1234"
}

Успешный Ответ

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
"result": "ok"
}

Пример ответа с ошибкой

HTTP/1.1 200
Content-Type: application/json; charset=UTF-8

{
"result": "error",
"error": "max_attempts_check_code"
}

Описание полей ответа

Параметр Тип Обязательный Описание
result строка Да Статус выполнения: ok при успехе, error при ошибке
error строка опциональный Ошибка. Список ошибок смотреть ниже

Все возможные значения status

status Описание
confirmed номер телефона успешно подтвержден
unconfirmed номер телефона не подтвержден

Все возможные значения result

result Описание
ok Успешный ответ.
error негативный ответ. Действия приложения определяются ошибкой указанного в параметре error

Все возможные значения code_input_required для всех методов

code_input_required Описание
4_digit_code используется, если пользователю отправлен код 4-х значный
no_code используется, если пользователю отправлено уведомление на телефон через sim-push

Список всех возможных значений для параметра error для всех методов

Ошибка Описание
delivery_failed Не удалось доставить запрос подтверждения ни по одному из доступных способов (SIM-Push, звонок, SMS). Возможно подтверждение через тех. поддержку
request_id_expired Время жизни (ttl) ID запроса подтверждения истекло. Нужно выполнить новый запрос на подтверждение без request_id для повторной попытки подтверждения
request_id_not_found Не найден ID запроса подтверждения. Нужно выполнить новый запрос на подтверждение без request_id для повторной попытки подтверждения
many_requests Слишком частые запросы на подтверждение номера телефона. Приложению необходимо дождаться истечения timeout.
max_attempts_check_code Достигнуто максимальное количество попыток ввода кода. Нужно сменить канал подтверждения в методе confirm'. Счетчик error_attempts обнулится, так как весь процесс подтверждения номера телефона начнется сначала | verify_expired | ttl в методеverifyистек. Нужно сменить канал подтверждения в методеconfirm’. Счетчик error_attempts обнулится
check_code_failed Не удалось проверить код в методе checkCode. Нужно сменить канал подтверждения номера телефона