Перейти к содержанию

Полностью по API

Максимальный контроль — вы сами отрисовываете UI на основе данных из API. Подходит, когда нужно полностью встроить процесс в ваш интерфейс.

Схема работы

sequenceDiagram
    participant F as Ваш фронтенд
    participant B as Ваш сервер
    participant D as DEBEX API

    B->>D: POST /api/Sessions/start
    D-->>B: SessionDto (elements[])
    B->>F: Отрисовать форму

    loop Пока is_completed = false
        F->>B: Ввод данных
        B->>D: POST /api/Sessions/{id}/process
        D-->>B: SessionDto (следующий шаг)
        B->>F: Обновить форму
    end

    D-->>B: is_completed: true, cookies[]
    B->>F: Готово! cookies[]

Шаг 1. Создать сессию

curl -X POST https://sessions-api.explorer.debex.ru/api/Sessions/start \
  -H "Content-Type: application/json" \
  -d '{"flow_id": "b3f70e2e-ed61-4145-a2ed-f69a459a8934"}'

Ответ — SessionDto с первым шагом:

{
  "session_id": "a1b2c3d4-...",
  "token": "eyJhbGciOi...",
  "step_name": "Ввод логина",
  "step_description": "Введите номер телефона или email",
  "elements": [
    {
      "code": "login",
      "type": "input",
      "name": "Логин",
      "value": "",
      "is_masked": false
    }
  ],
  "is_completed": false,
  "is_failed": false,
  "expires_in_seconds": 300
}

Шаг 2. Отрисовать элементы формы

На основе массива elements постройте форму. Типы элементов:

input — текстовое поле

{ "code": "login", "type": "input", "name": "Логин", "is_masked": false }

Если is_masked: true — используйте <input type="password">.

select — выпадающий список

{ "code": "region", "type": "select", "name": "Регион", "options": ["Москва", "Санкт-Петербург"] }

input_combined — OTP / посимвольный ввод

{ "code": "otp", "type": "input_combined", "name": "Код из SMS", "length": 6 }

Отрисуйте length отдельных полей по 1 символу. Значение отправляйте как одну строку.

error — сообщение об ошибке

{ "code": "error", "type": "error", "name": "Неверный пароль" }

Просто покажите пользователю. Отправлять ничего не нужно.

info — информационное сообщение

{ "code": "info", "type": "info", "name": "Ожидайте SMS..." }

Шаг 3. Отправить данные

Соберите значения из формы и отправьте:

curl -X POST https://sessions-api.explorer.debex.ru/api/Sessions/{id}/process \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "input_data": {
      "login": "user@example.com"
    }
  }'

Ключи в input_data — это значения code из элементов. Элементы с типами error и info не отправляются.

Ответ — обновлённый SessionDto со следующим шагом или результатом.

Шаг 4. Повторять до завершения

Повторяйте шаги 2-3, пока is_completed не станет true. После этого в поле cookies будет массив cookies.

Реалтайм-обновления через SignalR

Вместо поллинга можно подписаться на события через SignalR:

const connection = new signalR.HubConnectionBuilder()
  .withUrl("https://sessions-api.explorer.debex.ru/hubs/sessions", {
    accessTokenFactory: () => sessionToken
  })
  .build();

connection.on("StepChanged", (message) => {
  // message.payload — SessionDto с новым шагом
  renderForm(message.payload.elements);
});

connection.on("SessionCompleted", (message) => {
  // message.payload.cookies — готовые cookies
  handleCookies(message.payload.cookies);
});

connection.on("SessionFailed", (message) => {
  showError("Сессия завершилась с ошибкой");
});

await connection.start();

Доступные события SignalR:

Метод Когда
SessionStarted Сессия создана
SessionCompleted Процесс завершён, cookies доступны
SessionFailed Ошибка или таймаут
StepChanged Переход к следующему шагу
SessionRestarted Сессия перезапущена

Дополнительные эндпоинты

Метод Эндпоинт Описание
GET /api/Sessions/{id} Получить текущее состояние сессии
POST /api/Sessions/{id}/restart Перезапустить сессию
GET /api/Sessions/{id}/debug Отладочная информация (скриншот, HTML)