> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Подтверждение опасной операции в мессенджере

> Рецепт: перевод, смена email или удаление данных выполняются только после подтверждения в мессенджере. Как выбрать между step-up и API серверного подтверждения и что сделать для каждого.

Пользователь уже вошёл, но перед переводом, сменой email или удалением данных вы хотите, чтобы он
подтвердил действие ещё раз — нажатием в мессенджере, а не кодом из SMS.

## Что выбрать

Подойдут оба механизма Veriqa, а различаются они тем, что видит пользователь и откуда начинается
подтверждение.

| | Step-up | API серверного подтверждения |
| - | - | - |
| Кто начинает | Браузер пользователя: новый authorize-запрос | Ваш бэкенд: вызов API |
| Что пользователь читает в мессенджере | Подтверждение входа с [контекстом инициатора](/docs/ru/concepts/initiator-context): приложение, браузер, ОС, регион | Текст самого действия из вашего шаблона, например «Подтвердить платёж на 500 €?» |
| Как узнать, что подтвердил владелец учётной записи | Сравнить `sub` в новом `id_token` с вошедшим пользователем | `expected_identities` в запросе и `matched_type` в результате |
| Что получаете | `id_token` со свежим `auth_time` | Исход: `confirmed`, `declined`, `expired` или `failed` |

**Признак выбора.** Если в сообщении нужно назвать саму операцию — сумму, получателя, новый адрес —
или действие начинается не в браузере пользователя, выбирайте API серверного подтверждения. Если
достаточно убедиться, что за экраном сейчас сам пользователь, хватит step-up.

## Что понадобится

* сервер Veriqa с включённым каналом и подключённое к нему приложение — например, по рецепту
  [Вход в веб-приложение](/docs/ru/recipes/web-app-sign-in);
* доступ к бэкенду, который выполняет операцию.

## Шаги: step-up

<Steps>
  <Step title="Отправьте новый authorize-запрос перед действием">
    Обычный запрос на вход, без специальных параметров — см. [Что отправляете](/docs/ru/scenarios/step-up#что-отправляете).
  </Step>

  <Step title="Проверьте auth_time">
    Выполняйте операцию, только если `auth_time` из нового `id_token` укладывается в ваше окно
    свежести — см. [Что проверяете](/docs/ru/scenarios/step-up#что-проверяете).
  </Step>

  <Step title="Сузьте канал, если нужно">
    Параметр `acr_values` направляет подтверждение в конкретный канал — см.
    [Усиление: два разных канала](/docs/ru/scenarios/step-up#усиление-два-разных-канала).
  </Step>
</Steps>

## Шаги: API серверного подтверждения

<Steps>
  <Step title="Объявите тип действия">
    В записи клиента опишите тип действия: слоты и текст сообщения — см.
    [Настройте клиента](/docs/ru/reference/confirmation-api#1-настройте-клиента).
  </Step>

  <Step title="Создайте подтверждение">
    Бэкенд получает токен по client credentials и вызывает `POST /api/transaction/confirmation`,
    передав в `expected_identities` идентичность владельца учётной записи — см.
    [шаги 2–3](/docs/ru/reference/confirmation-api#2-получите-токен).
  </Step>

  <Step title="Покажите QR-код или ссылку">
    Выведите `channel_entry` из ответа на экран пользователя — см.
    [Создайте подтверждение](/docs/ru/reference/confirmation-api#3-создайте-подтверждение).
  </Step>

  <Step title="Дождитесь исхода">
    Опрашивайте `GET /api/transaction/{id}/result` и выполняйте операцию при `confirmed` с совпавшим
    `matched_type` — см. [Прочитайте исход](/docs/ru/reference/confirmation-api#4-прочитайте-исход).
  </Step>
</Steps>

## Как проверить

Запустите операцию и подтвердите её на телефоне — операция должна выполниться. Затем повторите и
отклоните подтверждение: операция выполниться не должна. Для API серверного подтверждения
проверьте ещё подтверждение с чужого аккаунта: `matched_type` в результате должен остаться `null`.

## Куда дальше

* [Step-up, второй фактор, HIL](/docs/ru/samples/confirmation) — три рабочих примера на API серверного
  подтверждения, среди них удаление проекта только с согласия владельца;
* [Подтверждение действий ИИ-агентов](/docs/ru/scenarios/agent-approvals) — тот же API для шагов агента;
* [Базовые сценарии](/docs/ru/basic-scenarios) — когда нужен вход, а когда серверная транзакция.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.