Skip to content

ADOLF SHOP — Раздел 4: Open WebUI Integration

Проект: Интеллектуальная система управления интернет-магазином
Модуль: Shop / Open WebUI
Версия: 1.0
Дата: Январь 2026


4.1 Назначение

Примечание (Март 2026): Ниже описана архитектура интеграции через chat-агента. Фактическая реализация использует standalone-страницу /shop. Структура страницы:

ВкладкаОписание
ДашбордОбщая сводка
ЗаказыУправление заказами
ТоварыКаталог товаров
АналитикаАналитика продаж

Документация агента ниже сохранена как спецификация backend API.

Интеграция модуля Shop с Open WebUI обеспечивает:

  • Интерфейс управления интернет-магазином через агента @Adolf_Shop
  • Прямой доступ к WooCommerce через MCP tools
  • Отображение уведомлений о событиях (заказы, отмены, возвраты)

4.2 Агент @Adolf_Shop

Конфигурация

yaml
name: Adolf_Shop
description: Управление интернет-магазином ohana.market
model: claude-opus-4-5
temperature: 0.3
mcp_servers:
  - woocommerce_mcp
system_prompt: |
  Ты — AI-ассистент для управления интернет-магазином ohana.market на базе WooCommerce.
  
  ## Твои возможности
  
  ### Заказы
  - Просмотр новых заказов (статус: processing)
  - Просмотр заказов в ожидании оплаты (статус: pending)
  - Просмотр проблемных заказов (статусы: failed, refunded)
  - Поиск заказов по номеру, клиенту, дате
  - Детали конкретного заказа
  
  ### Товары
  - Поиск товаров по названию, артикулу, бренду
  
  ### Аналитика
  - Выручка за период
  - Количество заказов
  - Средний чек
  - Топ товаров по продажам
  - Продажи по брендам
  - Заказы без оплаты более 48 часов
  
  ## Бренды магазина
  - Охана Kids — детская одежда
  - Охана Style — взрослая одежда  
  - Охана Care — товары для ухода
  - Охана Lux — премиум-сегмент
  
  ## Правила ответов
  - Форматируй данные в таблицы для наглядности
  - При аналитике всегда указывай период
  - Суммы указывай в рублях (₽)
  - Группируй данные по брендам, если это улучшает понимание
  - При большом количестве данных показывай топ-10

Доступ по ролям

РольДоступОграничения
StaffНет доступа
ManagerНет доступа
SeniorПолный доступ
DirectorПолный доступ
AdministratorПолный доступ

4.3 MCP Tools Configuration

Подключение WooCommerce MCP

json
{
  "mcpServers": {
    "woocommerce_mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@automattic/mcp-wordpress-remote@latest"
      ],
      "env": {
        "WP_API_URL": "${WOOCOMMERCE_MCP_URL}",
        "CUSTOM_HEADERS": "{\"X-MCP-API-Key\": \"${WOOCOMMERCE_CONSUMER_KEY}:${WOOCOMMERCE_CONSUMER_SECRET}\"}"
      }
    }
  }
}

Доступные MCP Tools

Claude автоматически получает доступ к WooCommerce abilities:

ToolОписаниеИспользование
woocommerce/orders-listСписок заказовНовые, в ожидании, проблемные
woocommerce/orders-getДетали заказаПросмотр конкретного заказа
woocommerce/products-listСписок товаровПоиск по каталогу
woocommerce/products-getДетали товараИнформация о товаре

Параметры orders-list

ПараметрТипОписание
statusstringpending, processing, on-hold, completed, cancelled, refunded, failed
customerintegerID клиента
afterstringЗаказы после даты (ISO 8601)
beforestringЗаказы до даты (ISO 8601)
pageintegerНомер страницы
per_pageintegerЗаписей на страницу (max 100)
orderbystringСортировка: date, id, include, title
orderstringasc / desc

Параметры products-list

ПараметрТипОписание
searchstringПоисковый запрос
statusstringpublish, draft, pending
categoryintegerID категории
skustringАртикул
min_pricestringМинимальная цена
max_pricestringМаксимальная цена
stock_statusstringinstock, outofstock, onbackorder
brandintegerID бренда (WooCommerce Brands)

4.4 Сценарии использования

Сценарий 1: Просмотр новых заказов

Пользователь: Покажи новые заказы

Claude:
[MCP: woocommerce/orders-list(status=processing, per_page=20, orderby=date, order=desc)]

Ответ:
## Новые заказы (5)

| № | Дата | Клиент | Сумма | Товары |
|---|------|--------|-------|--------|
| #12347 | 25.01 11:45 | Сидорова М. | 8 990 ₽ | Костюм детский (1) |
| #12346 | 25.01 11:20 | Козлов А. | 3 490 ₽ | Футболка (2) |
| #12345 | 25.01 10:30 | Иванов И. | 5 990 ₽ | Платье летнее (1) |
| #12344 | 25.01 09:15 | Петрова А. | 12 500 ₽ | Костюм (1), Блузка (2) |
| #12343 | 25.01 08:40 | Николаев С. | 4 200 ₽ | Джинсы (1) |

**Итого:** 35 170 ₽

Сценарий 2: Детали заказа

Пользователь: Покажи заказ 12345

Claude:
[MCP: woocommerce/orders-get(id=12345)]

Ответ:
## Заказ #12345

| Параметр | Значение |
|----------|----------|
| **Статус** | В обработке |
| **Дата** | 25.01.2026 10:30 |
| **Сумма** | 5 990 ₽ |

### Клиент
- **Имя:** Иван Петров
- **Email:** ivan@example.com
- **Телефон:** +7 999 123-45-67

### Адрес доставки
г. Москва, ул. Примерная, д. 1, кв. 10

### Состав заказа
| Товар | Артикул | Кол-во | Цена |
|-------|---------|--------|------|
| Платье летнее | DR-2026-001 | 1 | 5 990 ₽ |

### Комментарий клиента
Позвонить перед доставкой

Сценарий 3: Проблемные заказы

Пользователь: Есть ли проблемные заказы?

Claude:
[MCP: woocommerce/orders-list(status=failed,refunded, per_page=50)]

Ответ:
## Проблемные заказы (2)

### Ошибки оплаты (failed)
| № | Дата | Клиент | Сумма | Причина |
|---|------|--------|-------|---------|
| #12340 | 24.01 | Козлова Н. | 6 500 ₽ | Недостаточно средств |

### Возвраты (refunded)
| № | Дата | Клиент | Сумма | Причина |
|---|------|--------|-------|---------|
| #12305 | 20.01 | Смирнов В. | 9 990 ₽ | Не подошёл размер |

**Рекомендации:**
- Заказ #12340: связаться с клиентом для повторной оплаты
- Заказ #12305: проверить возврат товара на склад

Сценарий 4: Поиск товаров

Пользователь: Найди детские платья до 3000 рублей

Claude:
[MCP: woocommerce/products-list(search=платье, brand=kids_brand_id, max_price=3000)]

Ответ:
## Найдено: 4 товара

| Название | Артикул | Цена | Остаток | Бренд |
|----------|---------|------|---------|-------|
| Платье праздничное | DR-K-010 | 2 990 ₽ | 8 шт | Kids |
| Платье повседневное | DR-K-011 | 1 990 ₽ | 15 шт | Kids |
| Платье летнее | DR-K-012 | 2 490 ₽ | 12 шт | Kids |
| Сарафан | DR-K-013 | 1 790 ₽ | 20 шт | Kids |

Сценарий 5: Аналитика продаж

Пользователь: Аналитика за последнюю неделю

Claude:
[MCP: woocommerce/orders-list(status=completed, after=2026-01-18, per_page=100)]
[Агрегация данных...]

Ответ:
## Аналитика продаж: 18.01 — 25.01.2026

### Общие показатели
| Метрика | Значение |
|---------|----------|
| **Выручка** | 450 000 ₽ |
| **Заказов** | 75 |
| **Средний чек** | 6 000 ₽ |

### Продажи по брендам
| Бренд | Заказов | Выручка | Доля |
|-------|---------|---------|------|
| Style | 35 | 210 000 ₽ | 47% |
| Kids | 25 | 125 000 ₽ | 28% |
| Care | 10 | 65 000 ₽ | 14% |
| Lux | 5 | 50 000 ₽ | 11% |

### Топ-5 товаров
| # | Товар | Продано | Выручка |
|---|-------|---------|---------|
| 1 | Платье летнее | 15 шт | 89 850 ₽ |
| 2 | Костюм детский | 12 шт | 47 880 ₽ |
| 3 | Блузка шёлковая | 10 шт | 45 900 ₽ |
| 4 | Юбка миди | 8 шт | 31 920 ₽ |
| 5 | Футболка базовая | 20 шт | 29 800 ₽ |

Сценарий 6: Заказы без оплаты

Пользователь: Заказы без оплаты больше 48 часов

Claude:
[MCP: woocommerce/orders-list(status=pending, before=2026-01-23T10:00:00)]

Ответ:
## Заказы без оплаты > 48 часов (3)

| № | Дата создания | Клиент | Сумма | Ожидание |
|---|---------------|--------|-------|----------|
| #12330 | 22.01 15:30 | Иванова Е. | 8 500 ₽ | 67 часов |
| #12325 | 22.01 10:00 | Сергеев П. | 4 200 ₽ | 72 часа |
| #12318 | 21.01 18:45 | Козлов Д. | 5 800 ₽ | 88 часов |

**Общая сумма:** 18 500 ₽

**Рекомендации:**
- Отправить напоминание об оплате
- При отсутствии реакции — отменить через 24 часа

4.5 Уведомления

Интеграция с Notification System

Celery Beat polling создаёт уведомления при обнаружении событий:

python
# При обнаружении нового заказа
notification_publisher.publish(
    event_type="shop.order.new",
    title="Новый заказ",
    message=f"Заказ #{order_id} на сумму {total} ₽",
    source_module="shop",
    source_id=str(order_id),
    level="info",
    data={
        "order_id": order_id,
        "total": total,
        "customer": customer_name
    }
)

# При отмене заказа
notification_publisher.publish(
    event_type="shop.order.cancelled",
    title="Заказ отменён",
    message=f"Клиент отменил заказ #{order_id}",
    source_module="shop",
    source_id=str(order_id),
    level="warning",
    data={
        "order_id": order_id,
        "reason": cancellation_reason
    }
)

# При возврате
notification_publisher.publish(
    event_type="shop.order.refunded",
    title="Возврат средств",
    message=f"Оформлен возврат по заказу #{order_id}",
    source_module="shop",
    source_id=str(order_id),
    level="warning",
    data={
        "order_id": order_id,
        "refund_amount": refund_amount
    }
)

# При ошибке оплаты
notification_publisher.publish(
    event_type="shop.order.failed",
    title="Ошибка оплаты",
    message=f"Не удалась оплата заказа #{order_id}",
    source_module="shop",
    source_id=str(order_id),
    level="error",
    data={
        "order_id": order_id,
        "failure_reason": failure_reason
    }
)

Типы уведомлений

СобытиеУровеньОписание
shop.order.newinfoНовый заказ в обработке
shop.order.cancelledwarningЗаказ отменён клиентом
shop.order.refundedwarningОформлен возврат средств
shop.order.failederrorОшибка оплаты

4.6 Обработка ошибок

Ошибки MCP

При ошибках MCP Claude формирует понятное сообщение:

ОшибкаСообщение пользователю
Connection timeout"Не удалось подключиться к магазину. Попробуйте через минуту."
Authentication error"Ошибка авторизации в магазине. Обратитесь к администратору."
No results"По вашему запросу ничего не найдено."
Rate limit"Слишком много запросов. Подождите минуту и повторите."
Server error"Ошибка на стороне магазина. Попробуйте позже."

Пример обработки ошибки

Пользователь: Покажи заказ 99999

Claude:
[MCP: woocommerce/orders-get(id=99999)]
[Error: 404 Not Found]

Ответ:
Заказ #99999 не найден. Проверьте номер заказа и попробуйте снова.

4.7 Настройка агента

Создание агента в Open WebUI

  1. Перейти в Workspace → Functions → Create new
  2. Тип: MCP Agent
  3. Заполнить:
    • Name: Adolf_Shop
    • Description: Управление интернет-магазином ohana.market
    • Model: claude-opus-4-5
  4. Добавить MCP Server:
    • Name: woocommerce_mcp
    • URL: ${WOOCOMMERCE_MCP_URL}
  5. Настроить System Prompt (см. раздел 4.2)
  6. Настроить доступ: Senior, Director, Administrator

Environment Variables

bash
# В конфигурации Open WebUI
WOOCOMMERCE_MCP_URL=https://ohana.market/wp-json/woocommerce/mcp
WOOCOMMERCE_CONSUMER_KEY=ck_xxxxxxxx
WOOCOMMERCE_CONSUMER_SECRET=cs_xxxxxxxx

4.8 Ограничения MVP

ОграничениеОписание
Только чтениеWrite-операции (изменение статуса) не доступны
Нет кэшированияКаждый запрос обращается к WooCommerce
ПагинацияМаксимум 100 записей за запрос
АналитикаРасчёт на стороне Claude

Приложение А: Справочник запросов

Заказы

Запрос пользователяMCP ToolПараметры
"Новые заказы"orders-liststatus=processing
"Заказы в ожидании"orders-liststatus=pending
"Проблемные заказы"orders-liststatus=failed,refunded
"Заказ #12345"orders-getid=12345

Товары

Запрос пользователяMCP ToolПараметры
"Найди платье"products-listsearch=платье
"Товары Kids"products-listbrand=kids_id

Приложение Б: Контрольные точки

КритерийПроверка
Агент доступен@Adolf_Shop отвечает на запросы
MCP работаетДанные из WooCommerce получаются
УведомленияСобытия polling создают notifications
ДоступStaff/Manager получают отказ

Документ подготовлен: Январь 2026
Версия: 1.0
Статус: Черновик

Документация ADOLF Platform