Интеграции — экран управления подключением к агрегаторам

Где расположен

В карточке торговой точки (/stores/:id) — новая вкладка «Интеграции» рядом с существующими «Информация», «Меню», «Терминалы».

Состояние «нет подключений»

Empty state:

  • Иконка + заголовок «Подключите агрегаторы доставки»
  • Короткий пояснительный текст: «Заказы с Яндекс.Еды и Маркет Деливери будут приходить напрямую в эту ТТ. Без подключения заказы обрабатываются вручную через планшет от Яндекса.»
  • Карточки доступных агрегаторов с кнопкой «Подключить»:
    • 🟡 Яндекс.Еда (✓ доступно)
    • 🟠 Маркет Деливери (✓ доступно)
    • 🟣 Chibbis (скоро)
    • 🔵 Собственный сайт (скоро)

Состояние «есть подключение»

Список карточек, для каждой — bindings:

┌──────────────────────────────────────────────────────────┐
│ 🟡 Яндекс.Еда                              [активен]  ⚙ │
│ ID ресторана: 123456                                     │
│ Комиссия: 25%                                            │
│ Последнее обновление меню: 17.04.2026, 06:00             │
│ Последний заказ: 17.04.2026, 12:45                       │
│                                                          │
│ [Синхронизировать меню] [Логи] [Отключить]               │
└──────────────────────────────────────────────────────────┘

Форма подключения

Модальное окно «Подключить Яндекс.Еду»:

  1. Поле «ID ресторана в Яндекс.Еде» (external_restaurant_id) — text input.
  2. Поле «Client ID» (OAuth) — text input.
  3. Поле «Client Secret» (OAuth) — password input с кнопкой «глазик».
  4. Поле «Комиссия, %» (commission_percent) — number input, default 25.00.
  5. Ссылка «Как получить credentials?» → тултип или переход в документацию.

Кнопка «Подключить и протестировать»:

  • Валидация полей на клиенте.
  • Отправка POST /api/v1/admin/aggregators/bindings.
  • Затем автоматический POST /bindings/{id}/test — тест-запрос в Яндекс. 🕓 M3 — endpoint пока не реализован, пропустить этот шаг до готовности на бэкенде.
  • Если тест успешен — зелёное уведомление, переход на карточку binding.
  • Если тест не прошёл — красная подсказка с причиной (неверные credentials / ресторан не найден).

Управление активным подключением

Кнопки в карточке:

  • Синхронизировать менюPOST /bindings/{id}/resync-menu. 🕓 M3 — endpoint пока не реализован; до готовности снапшот пересобирается по TTL (1 час).
  • Логи — открывает модалку с таблицей последних 100 запросов (время, направление in/out, операция, статус, длительность). Кнопка «Скачать полный лог за день».
  • Отключить — подтверждение («Заказы с Яндекс.Еды перестанут приходить, текущие заказы не затронуты»). Soft delete binding.
  • Шестерёнка ⚙ — редактировать commission_percent, обновить credentials (например, ротация у Яндекса).

Логи — вкладка

Таблица:

ВремяНаправлениеОперацияRefСтатусДлительность
12:45inboundorder_newye-12320045 ms
12:48outboundstatus_push (accepted)ye-123200120 ms
12:50outboundstatus_push (cooking)ye-12320098 ms
13:10inboundmenu_pull200230 ms

Клик по строке → модалка с полным payload (request/response JSON).

Метрики — вкладка

Графики:

  • Заказов за день / неделю / месяц (line chart).
  • Среднее время от NEW до HANDED_OVER.
  • Процент отклонённых заказов + разбивка по причинам.
  • Ошибки push → агрегатор (% + счётчик).

Permissions

ДействиеКто видит
Вкладка «Интеграции» виднаintegrations.read или stores.edit
Подключить/отключитьintegrations.manage
Редактировать commission_percentintegrations.manage + stores.edit
Логиintegrations.read
Тест-запросintegrations.manage

Новые permissions добавляем в роли «Владелец франшизы» и «Владелец партнёра» (по умолчанию). В «Менеджер ТТ» — только read.

Ссылки