Перейти к основному содержимому

Функционал OTP

Отправка кода​

Handshake​

POST /otp/handshake

Request:

FieldRequiredTypeDescription
type✅stringТип OTP указанные в challenge_type
mobilePhoneЕсли не указан emailstringНомер телефона
emailЕсли не указан mobilePhonestringЭл. Почта
entities❌arrayМассив связанных сущностей. Например: client: 123, lead: 5
entities.*.type✅stringТип сущности: client, lead, loanApp итд
entities.*.id✅stringИдентификатор сущности

Response:

{
"status": "ok",
"timestamp": 1657524075000,
"data": {
"type": "", // Название типа OTP
"channel": "sms", // Какой канал будет использоваться для отправки кода
"availableIn": 120 // Время жизни процесса OTP
}
}

Инициализация​

POST otp/init

Request:

FieldRequiredTypeDescription
type✅stringТип OTP указанные в challenge_type
mobilePhoneЕсли не указан emailstringНомер телефона
emailЕсли не указан mobilePhonestringЭл. Почта
entities❌arrayМассив связанных сущностей. Например: client: 123, lead: 5
entities.*.type✅stringТип сущности: client, lead, loanApp итд
entities.*.id✅stringИдентификатор сущности

Response:

{
"status": "ok",
"timestamp": 1657524169000,
"data": {
"uuid": "", // Идентификатор процесса OTP
"channel": "sms" // Канал отправки кода
}
}

Подтверждение кода​

API​

PUT otp/{uuid}/attempt

  • uuid → идентификатор процесса OTP, полученный при инициализации

Request:

FieldRequiredTypeDescription
code✅stringКод для проверки

Response:

{
"status": "ok",
"timestamp": 1657524358000,
"data": {
"accepted": true
}
}

Поиск​

GET|POST otp/{type}, где type - Тип OTP

Request:

FieldRequiredTypeDescription
type✅stringТип OTP указанные в challenge_type
mobilePhone❌stringНомер телефона
email❌stringЭл. Почта
entities❌arrayМассив связанных сущностей. Например: client: 123, lead: 5
entities.*.type✅stringТип сущности: client, lead, loanApp итд
entities.*.id✅stringИдентификатор сущности

Response:

{
"status": "ok",
"timestamp": 1686816422000,
"data": [
{
"id": 50,
"uuid": "98df8e4e-7240-4291-9322-282a8d97542a",
"type": "email-verification",
"status": "accepted",
"phone": null,
"email": "email@example.com",
"ip": null,
"entities": [
{
"type": "client",
"id": "338"
},
{
"type": "process",
"id": "13513451345-sdnfsfgnsfgn-13135"
}
],
"attempts": 0,
"createdAt": "2023-04-07T08:22:06+00:00",
"updatedAt": "2023-04-07T08:22:06+00:00",
"currentRoute": {
"status": "sent",
"channel": "email",
"templateId": "34",
"attempts": 0
}
}
]
}

Настройки типов OTP​

Для тенанта можно настроить несколько типов OTP

Challenge Types​

Возможные параметры:

  • Название
  • Тип кода:
    • numeric - только цифры
    • alphanumeric - цифры и заглавные латинские буквы
    • alphabetic - заглавные латинские буквы
  • Длина кода
  • Время жизни процесса OTP
  • Максимальное кол-во попыток ввода кода, вне зависимости способа доставки

CRUD​

Endpoint api/otp/crud/challenge-types

Request:

FieldRequiredTypeDescription
name✅stringНазвание
code_type❌stringТип генерируемого кода. (numeric, alphanumeric, alphabetic). По умолчанию: numeric
code_length❌intДлин кода. По умолчанию: 6
ttl❌intВремя работы кода OTP. Указывается в секундах По умолчанию: 3600
max_attempts❌intМаксимальное кол-во попыток. По умолчанию: 5

Challenge Type Routes​

Для каждого типа OTP можно настроить разные способы доставки кода:

Возможные параметры:

  • Канал доставки - (sms, email)
  • ID шаблона - Код шаблоне можно получить через переменную ${answer}
  • Порядок способа доставки
  • Кол-во попыток ввода кода для данного типа доставки

CRUD​

Endpoint api/otp/crud/challenge-types-routes

Request:

FieldRequiredTypeDescription
challenge_type_id✅intID Challenge-а
order❌intПорядок отправки канала
channel✅stringКанал отправки. (sms, email)
template_id✅intID шаблона для выбранного канала
attempts❌intМаксимальное кол-во попыток. По умолчанию: 1

Ограничение по запросам​

ПравилоВ минутуВ часВ день
Тип OTP + контакт (email или телефон)61824