Интеграции — экран управления подключением к агрегаторам
Где расположен
В карточке торговой точки (/stores/:id) — новая вкладка «Интеграции» рядом с существующими «Информация», «Меню», «Терминалы».
Состояние «нет подключений»
Empty state:
- Иконка + заголовок «Подключите агрегаторы доставки»
- Короткий пояснительный текст: «Заказы с Яндекс.Еды и Маркет Деливери будут приходить напрямую в эту ТТ. Без подключения заказы обрабатываются вручную через планшет от Яндекса.»
- Карточки доступных агрегаторов с кнопкой «Подключить»:
- 🟡 Яндекс.Еда (✓ доступно)
- 🟠 Маркет Деливери (✓ доступно)
- 🟣 Chibbis (скоро)
- 🔵 Собственный сайт (скоро)
Состояние «есть подключение»
Список карточек, для каждой — bindings:
┌──────────────────────────────────────────────────────────┐
│ 🟡 Яндекс.Еда [активен] ⚙ │
│ ID ресторана: 123456 │
│ Комиссия: 25% │
│ Последнее обновление меню: 17.04.2026, 06:00 │
│ Последний заказ: 17.04.2026, 12:45 │
│ │
│ [Синхронизировать меню] [Логи] [Отключить] │
└──────────────────────────────────────────────────────────┘
Форма подключения
Модальное окно «Подключить Яндекс.Еду»:
- Поле «ID ресторана в Яндекс.Еде» (
external_restaurant_id) —text input. - Поле «Client ID» (OAuth) —
text input. - Поле «Client Secret» (OAuth) —
password inputс кнопкой «глазик». - Поле «Комиссия, %» (
commission_percent) —number input, default 25.00. - Ссылка «Как получить 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:45 | inbound | order_new | ye-123 | 200 | 45 ms |
| 12:48 | outbound | status_push (accepted) | ye-123 | 200 | 120 ms |
| 12:50 | outbound | status_push (cooking) | ye-123 | 200 | 98 ms |
| 13:10 | inbound | menu_pull | — | 200 | 230 ms |
Клик по строке → модалка с полным payload (request/response JSON).
Метрики — вкладка
Графики:
- Заказов за день / неделю / месяц (line chart).
- Среднее время от
NEWдоHANDED_OVER. - Процент отклонённых заказов + разбивка по причинам.
- Ошибки push → агрегатор (% + счётчик).
Permissions
| Действие | Кто видит |
|---|---|
| Вкладка «Интеграции» видна | integrations.read или stores.edit |
| Подключить/отключить | integrations.manage |
| Редактировать commission_percent | integrations.manage + stores.edit |
| Логи | integrations.read |
| Тест-запрос | integrations.manage |
Новые permissions добавляем в роли «Владелец франшизы» и «Владелец партнёра» (по умолчанию). В «Менеджер ТТ» — только read.