system/@bot-platform.system/ARCHITECTURE.md

Платформа управления ботами

Версия: 1.0.0
Дата: 2025-12-27
Тип: PLATFORM
Статус: Design


Концепция

Универсальная платформа для управления ботами и диалогами с клиентами. Разделение:

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│ BOT ENGINE      │────►│ CHAT SYSTEM     │────►│ MESSENGERS      │
│ (AI логика)     │     │ (диалоги)       │     │ (каналы)        │
└─────────────────┘     └─────────────────┘     └─────────────────┘
        │                       │                       │
        │                       │                       │
   Сценарии              Чаты с клиентами      Telegram, WhatsApp
   Контексты             История сообщений      VK, Instagram
   Промпты               Операторы              Email, SMS

Принцип: Бот ≠ Чат. Бот — это логика, чат — это канал связи.


1. Структура базы данных

Таблица: bot_instances

Назначение: Экземпляры ботов (каждый бот = отдельный экземпляр)

CREATE TABLE bot_instances (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL,                -- Название бота
    type VARCHAR(50) NOT NULL,                 -- Тип: sales, support, lead_gen, notification
    stage VARCHAR(50),                         -- Стадия воронки: cold, warm, hot, customer, repeat
    mode VARCHAR(50) DEFAULT 'autonomous',     -- Режим: autonomous, assistant, hybrid

    -- AI модель
    ai_provider VARCHAR(50) DEFAULT 'openrouter',  -- openrouter, anthropic, openai
    ai_model VARCHAR(100),                     -- Модель AI
    ai_temperature DECIMAL(3,2) DEFAULT 0.7,   -- Температура
    ai_max_tokens INTEGER DEFAULT 500,         -- Макс. токены

    -- Промпты
    system_prompt TEXT,                        -- Системный промпт
    context_prompt TEXT,                       -- Контекст (о компании, товарах)
    rules_prompt TEXT,                         -- Правила поведения

    -- Поведение
    auto_reply BOOLEAN DEFAULT false,          -- Автоматические ответы
    reply_delay_seconds INTEGER DEFAULT 0,     -- Задержка перед ответом
    max_messages_per_day INTEGER,              -- Лимит сообщений в день

    -- Интеграции
    connected_process_id INTEGER,              -- ID процесса (CRM, ERP)
    connected_knowledge_base_id INTEGER,       -- ID базы знаний

    -- Статус
    is_active BOOLEAN DEFAULT true,
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

Таблица: bot_scenarios

Назначение: Сценарии диалогов

CREATE TABLE bot_scenarios (
    id SERIAL PRIMARY KEY,
    bot_id INTEGER REFERENCES bot_instances(id),
    name VARCHAR(255),                         -- Название сценария
    trigger_type VARCHAR(50),                  -- keyword, intent, event, schedule
    trigger_value TEXT,                        -- Триггер (ключевое слово, событие)

    -- Условия
    conditions JSONB,                          -- Условия активации
    priority INTEGER DEFAULT 0,                -- Приоритет (если несколько сценариев)

    -- Действия
    actions JSONB,                             -- Массив действий
    /* Примеры действий:
       [
         {"type": "send_message", "text": "Здравствуйте!"},
         {"type": "ask_question", "question": "Как вас зовут?", "save_to": "customer_name"},
         {"type": "call_api", "url": "...", "method": "POST"},
         {"type": "transfer_to_operator", "department": "sales"},
         {"type": "create_lead", "crm_id": 123}
       ]
    */

    is_active BOOLEAN DEFAULT true,
    created_at TIMESTAMP DEFAULT NOW()
);

Таблица: chat_conversations

Назначение: Диалоги с клиентами

CREATE TABLE chat_conversations (
    id SERIAL PRIMARY KEY,

    -- Клиент
    customer_id INTEGER,                       -- ID клиента (если зарегистрирован)
    customer_name VARCHAR(255),                -- Имя
    customer_phone VARCHAR(50),                -- Телефон
    customer_email VARCHAR(255),               -- Email

    -- Канал
    channel VARCHAR(50),                       -- telegram, whatsapp, vk, instagram, email, sms, web
    channel_user_id VARCHAR(255),              -- ID пользователя в канале
    channel_chat_id VARCHAR(255),              -- ID чата в канале

    -- Бот
    bot_id INTEGER REFERENCES bot_instances(id),  -- Какой бот обслуживает

    -- Оператор
    operator_id INTEGER,                       -- ID оператора (если подключен)
    operator_mode VARCHAR(50),                 -- manual, assisted, monitoring

    -- Статус
    status VARCHAR(50) DEFAULT 'active',       -- active, waiting, closed, archived
    stage VARCHAR(50),                         -- Стадия воронки

    -- Контекст
    context JSONB,                             -- Контекст диалога (переменные, данные)
    tags TEXT[],                               -- Теги для фильтрации

    -- Метрики
    messages_count INTEGER DEFAULT 0,
    bot_messages_count INTEGER DEFAULT 0,
    operator_messages_count INTEGER DEFAULT 0,
    response_time_avg INTEGER,                 -- Среднее время ответа (секунды)

    -- Время
    started_at TIMESTAMP DEFAULT NOW(),
    last_message_at TIMESTAMP,
    closed_at TIMESTAMP,

    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

Таблица: chat_messages

Назначение: Сообщения в диалогах

CREATE TABLE chat_messages (
    id SERIAL PRIMARY KEY,
    conversation_id INTEGER REFERENCES chat_conversations(id),

    -- Отправитель
    sender_type VARCHAR(50),                   -- customer, bot, operator, system
    sender_id INTEGER,                         -- ID бота или оператора

    -- Сообщение
    message_type VARCHAR(50) DEFAULT 'text',   -- text, image, file, audio, video, location, contact
    content TEXT,                              -- Текст сообщения
    content_json JSONB,                        -- Структурированное содержимое

    -- Для режима assistant
    is_suggested BOOLEAN DEFAULT false,        -- Предложено ботом
    is_approved BOOLEAN DEFAULT false,         -- Одобрено оператором
    suggested_at TIMESTAMP,                    -- Когда предложено
    approved_at TIMESTAMP,                     -- Когда одобрено

    -- Метаданные
    metadata JSONB,                            -- Дополнительные данные
    read_at TIMESTAMP,                         -- Когда прочитано

    created_at TIMESTAMP DEFAULT NOW()
);

Таблица: messenger_connections

Назначение: Подключения к мессенджерам

CREATE TABLE messenger_connections (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255),                         -- Название подключения
    messenger VARCHAR(50),                     -- telegram, whatsapp, vk, instagram

    -- Креды
    credentials JSONB,                         -- API ключи, токены
    /* Примеры:
       Telegram: {"bot_token": "..."}
       WhatsApp: {"phone_number_id": "...", "access_token": "..."}
       VK: {"group_id": "...", "access_token": "..."}
    */

    -- Маппинг на бота
    default_bot_id INTEGER REFERENCES bot_instances(id),

    -- Настройки
    webhook_url VARCHAR(500),                  -- URL для вебхуков
    polling_enabled BOOLEAN DEFAULT false,     -- Использовать polling

    -- Статус
    is_active BOOLEAN DEFAULT true,
    last_sync_at TIMESTAMP,                    -- Последняя синхронизация

    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW()
);

Таблица: bot_knowledge_base

Назначение: База знаний для ботов

CREATE TABLE bot_knowledge_base (
    id SERIAL PRIMARY KEY,
    bot_id INTEGER REFERENCES bot_instances(id),

    -- Категория
    category VARCHAR(100),                     -- faq, products, company, support

    -- Вопрос-ответ
    question TEXT,                             -- Вопрос или ключевые слова
    answer TEXT,                               -- Ответ

    -- Дополнительно
    keywords TEXT[],                           -- Ключевые слова для поиска
    source_url VARCHAR(500),                   -- Ссылка на источник

    -- Метрики
    usage_count INTEGER DEFAULT 0,             -- Сколько раз использовалось
    last_used_at TIMESTAMP,                    -- Когда последний раз использовалось

    is_active BOOLEAN DEFAULT true,
    created_at TIMESTAMP DEFAULT NOW()
);

2. Интерфейс управления

Главное меню

┌─────────────────────────────────────────────────────────────┐
│  🤖 Платформа управления ботами                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  📊 Дашборд                                                 │
│     • Активные диалоги: 47                                  │
│     • Ботов запущено: 5/8                                   │
│     • Операторов онлайн: 3                                  │
│     • Сообщений сегодня: 342                                │
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ 🤖 Боты     │  │ 💬 Чаты     │  │ 📡 Каналы   │         │
│  │ Управление  │  │ Диалоги     │  │ Мессенджеры │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ 📚 База     │  │ 📈 Аналитика│  │ ⚙️ Настройки│         │
│  │ знаний      │  │ Отчёты      │  │ Общие       │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Раздел: Боты

┌─────────────────────────────────────────────────────────────┐
│  🤖 Боты                                    [+ Создать бота] │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Фильтры: [Все] [Активные] [Выключенные]                   │
│           [По типу ▼] [По стадии ▼]                         │
│                                                             │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ 🟢 Бот "Холодные лиды" (lead_gen)                     │  │
│  │    Стадия: cold | Режим: autonomous                   │  │
│  │    Диалогов: 23 активных | Конверсия: 12%            │  │
│  │    [⚙️ Настроить] [📊 Статистика] [⏸️ Пауза]          │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                             │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ 🟢 Бот "Продажи" (sales)                              │  │
│  │    Стадия: hot | Режим: assistant                     │  │
│  │    Диалогов: 8 активных | Конверсия: 45%             │  │
│  │    [⚙️ Настроить] [📊 Статистика] [⏸️ Пауза]          │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                             │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ 🔴 Бот "Поддержка 24/7" (support)                     │  │
│  │    Стадия: customer | Режим: hybrid                   │  │
│  │    Диалогов: 0 | Статус: ВЫКЛЮЧЕН                    │  │
│  │    [⚙️ Настроить] [📊 Статистика] [▶️ Запустить]      │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Настройки бота (форма)

┌─────────────────────────────────────────────────────────────┐
│  ⚙️ Настройка бота "Продажи"                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Основные настройки                                         │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ Название:        [Бот "Продажи"_______________]     │    │
│  │ Тип:            [sales ▼]                           │    │
│  │ Стадия воронки: [hot ▼]                             │    │
│  │ Режим работы:   [assistant ▼]                       │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
│  AI модель                                                  │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ Провайдер:  [openrouter ▼]                          │    │
│  │ Модель:     [gemini-2.0-flash-exp ▼]                │    │
│  │ Temperature: [0.7_______] (креативность)             │    │
│  │ Max tokens:  [500_______]                            │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
│  Промпты                                                    │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ Системный промпт (роль):                             │    │
│  │ ┌───────────────────────────────────────────────┐    │    │
│  │ │Ты — менеджер по продажам пиротехники.         │    │    │
│  │ │Твоя цель — помочь клиенту выбрать товары.     │    │    │
│  │ │Будь вежлив и профессионален.                  │    │    │
│  │ └───────────────────────────────────────────────┘    │    │
│  │                                                      │    │
│  │ Контекст (о компании):                               │    │
│  │ ┌───────────────────────────────────────────────┐    │    │
│  │ │Компания: Пиротехника SPB                      │    │    │
│  │ │Ассортимент: 4000+ товаров                     │    │    │
│  │ │Доставка: по всей России                       │    │    │
│  │ └───────────────────────────────────────────────┘    │    │
│  │                                                      │    │
│  │ Правила:                                             │    │
│  │ ┌───────────────────────────────────────────────┐    │    │
│  │ │- Не обсуждай цены напрямую, предложи каталог │    │    │
│  │ │- При вопросе о доставке - передай оператору   │    │    │
│  │ │- Максимум 3 вопроса подряд                    │    │    │
│  │ └───────────────────────────────────────────────┘    │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
│  Поведение                                                  │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ ☑ Автоответы (без участия оператора)                │    │
│  │ ☑ Задержка перед ответом: [2______] секунд          │    │
│  │ ☐ Лимит сообщений в день: [100____]                 │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
│  Интеграции                                                 │
│  ┌─────────────────────────────────────────────────────┐    │
│  │ CRM процесс:    [Lead создание ▼]                   │    │
│  │ База знаний:    [FAQ Продажи ▼]                     │    │
│  │ Подключить к:   [☑ Telegram] [☐ WhatsApp] [☐ VK]   │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                             │
│  [💾 Сохранить]  [🔄 Сбросить]  [🗑️ Удалить бота]          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Раздел: Чаты

┌─────────────────────────────────────────────────────────────┐
  💬 Активные диалоги                                        
├─────────────────────────────────────────────────────────────┤
                                                             
  Фильтры: [Активные] [Ожидают] [Закрытые]                  
           [Канал: Все ▼] [Бот: Все ▼] [Оператор: Все ▼]    
                                                             
  ┌─────────────────────────────────────────────────────┐    
   🔴 Иван Петров (@ivan_p)  Telegram                     
      Бот: Продажи | Оператор: Анна                        
      Последнее сообщение: 2 мин назад                     
      "Сколько стоит доставка до Москвы?"                  
      [💬 Открыть диалог] [👤 Передать оператору]           
  └─────────────────────────────────────────────────────┘    
                                                             
  ┌─────────────────────────────────────────────────────┐    
   🟢 Мария Сидорова (+7912...)  WhatsApp                 
      Бот: Холодные лиды | Оператор:                      
      Последнее сообщение: 15 мин назад                    
      "Спасибо, посмотрю каталог"                          
      [💬 Открыть диалог] [👤 Назначить оператора]          
  └─────────────────────────────────────────────────────┘    
                                                             
└─────────────────────────────────────────────────────────────┘

Окно диалога (режим Assistant)

┌─────────────────────────────────────────────────────────────┐
  💬 Диалог с Иван Петров (@ivan_p)  Telegram              
  Бот: Продажи | Оператор: Анна Кузнецова                   
├─────────────────────────────────────────────────────────────┤
                                                             
  История сообщений:                                         
                                                             
  [14:30] Иван: Здравствуйте, интересует фейерверк          
                                                             
  [14:31] Бот:  Здравствуйте! С удовольствием помогу        
               подобрать фейерверк. Какой бюджет             
               рассматриваете?                               
                                                             
  [14:32] Иван: До 5000 рублей                               
                                                             
  [14:33] Бот:  Отлично! У нас есть отличные варианты:      
               1. "Праздничный" - 3500                     
               2. "Яркий вечер" - 4200                      
               Могу отправить каталог?                       
                                                             
  [14:35] Иван: Сколько стоит доставка до Москвы?           
                                                             
  ┌─────────────────────────────────────────────────────┐    
   🤖 БОТ ПРЕДЛАГАЕТ:                                       
   ┌───────────────────────────────────────────────┐        
    "Доставка до Москвы 500₽, срок 2-3 дня.      │    │    │
│  │ │  Бесплатно при заказе от 10000₽."                    
   └───────────────────────────────────────────────┘        
   [✅ Отправить] [✏️ Редактировать] [❌ Отклонить]         
  └─────────────────────────────────────────────────────┘    
                                                             
  ┌─────────────────────────────────────────────────────┐    
   Ваш ответ: [____________________________________]        
                                           [📎] [😊]        
                                      [Отправить >]         
  └─────────────────────────────────────────────────────┘    
                                                             
  Быстрые ответы:                                            
  [Отправить каталог] [Уточнить адрес] [Передать менеджеру] 
                                                             
  Контекст:                                                  
   Бюджет: до 5000                                         
   Интересует: фейерверк                                    
   Регион: Москва                                           
                                                             
└─────────────────────────────────────────────────────────────┘

Как работает:
1. Бот в режиме реального времени генерирует ответ
2. Ответ показывается оператору серым фоном в блоке "БОТ ПРЕДЛАГАЕТ"
3. Оператор может:
- ✅ Нажать "Отправить" → текст становится зелёным и публикуется клиенту
- ✏️ Редактировать → изменить текст перед отправкой
- ❌ Отклонить → написать свой ответ


3. Типовые боты для воронки

3.1. Холодные лиды (cold)

Название: "Первый контакт"
Тип: lead_gen
Режим: autonomous (полная автономия)

Задачи:
- Поприветствовать
- Квалифицировать лида (бюджет, срочность, потребность)
- Предложить каталог
- Собрать контакт (телефон/email)

Промпт:

Ты — ассистент компании Пиротехника SPB.
Цель: квалифицировать нового клиента.

Сценарий:
1. Поздоровайся, представься
2. Спроси, что интересует (праздник? корпоратив? подарок?)
3. Уточни бюджет
4. Предложи 2-3 варианта из каталога
5. Попроси контакт для отправки предложения

Правила:
- Не более 3 вопросов подряд
- Если клиент не отвечает 5 минут — напомни через 1 час
- Если грубит — передай оператору

Триггеры:
- Новое сообщение от незнакомого номера/аккаунта
- Команда /start в Telegram

Метрика успеха: Получен контакт (телефон или email)


3.2. Тёплые лиды (warm)

Название: "Консультант"
Тип: sales
Режим: assistant (подсказывает оператору)

Задачи:
- Ответить на вопросы о товарах
- Помочь с выбором
- Рассчитать стоимость
- Оформить предзаказ

Промпт:

Ты — эксперт по пиротехнике.
Цель: помочь клиенту выбрать товары и довести до покупки.

У тебя есть доступ к:
- Каталогу товаров (pim_catalog)
- Ценам и акциям
- Базе знаний (FAQ)

Сценарий:
1. Уточни потребность (для чего фейерверк?)
2. Предложи 3-5 вариантов с описанием
3. Ответь на вопросы (состав, эффект, безопасность)
4. Рассчитай итоговую стоимость с доставкой
5. Предложи оформить заказ

Если НЕ ЗНАЕШЬ ответа → предложи: "Уточню у менеджера, минутку"
Тогда оператор видит вопрос и отвечает сам.

Триггеры:
- Клиент из базы CRM (уже был контакт)
- Клиент открыл ссылку из email-рассылки

Метрика успеха: Создан заказ или добавлены товары в корзину


3.3. Горячие (hot)

Название: "Closer"
Тип: sales
Режим: hybrid (бот + оператор вместе)

Задачи:
- Закрыть сделку
- Оформить заказ
- Согласовать оплату и доставку

Промпт:

Ты — менеджер по продажам.
Цель: ЗАКРЫТЬ сделку.

Клиент уже определился с товаром.
Осталось:
1. Подтвердить состав заказа
2. Уточнить адрес доставки
3. Выбрать способ оплаты
4. Создать заказ в системе

Будь настойчив, но вежлив.
Используй urgency: "Товар в наличии, могу зарезервировать"
Предложи бонус: "При заказе сегодня — бесплатная доставка"

Триггеры:
- Клиент добавил товары в корзину
- Клиент спросил "как оформить заказ?"
- Прошло >30 минут с момента добавления в корзину (reminder)

Метрика успеха: Заказ оформлен и оплачен


3.4. Постпродажа (customer)

Название: "Поддержка 24/7"
Тип: support
Режим: autonomous → assistant (если не может решить)

Задачи:
- Ответить на вопросы о заказе
- Помочь с трекингом
- Решить проблему

Промпт:

Ты — служба поддержки.
Цель: решить проблему клиента быстро.

База знаний:
- Статусы заказов (Order таблица)
- Треки доставки
- FAQ по возвратам, гарантии

Сценарий:
1. Спроси номер заказа
2. Покажи статус и трек-номер
3. Если проблема — предложи решение из FAQ
4. Если не можешь решить → "Передам менеджеру, ответим в течение часа"

ВАЖНО: При словах "брак", "не работает", "хочу вернуть" → СРАЗУ передать оператору

Триггеры:
- Клиент написал после оформления заказа
- Ключевые слова: "заказ", "трек", "доставка", "где мой"

Метрика успеха: Проблема решена без эскалации оператору


3.5. Повторные покупки (repeat)

Название: "VIP менеджер"
Тип: sales
Режим: autonomous

Задачи:
- Предложить новинки
- Напомнить о сезонных товарах
- Персональные скидки

Промпт:

Ты — личный менеджер VIP клиента.
Цель: увеличить повторные покупки.

История клиента:
- Прошлые заказы
- Средний чек
- Предпочтения (категории, бренды)

Сценарий:
1. Поздоровайся по имени
2. "Помните, в прошлый раз вы брали [товар]? Вышла новинка!"
3. Предложи персональную скидку 15%
4. "Хотите оформить заказ или сначала посмотреть каталог?"

Тон: дружелюбный, как старому знакомому.

Триггеры:
- Прошло 3 месяца с последнего заказа
- Новинка в категории, которую покупал клиент
- День рождения клиента

Метрика успеха: Повторный заказ


4. Режимы работы бота

4.1. Autonomous (Автономный)

Клиент → Бот → Ответ → Клиент

Когда использовать:
- Холодные лиды (квалификация)
- FAQ / Поддержка
- Ночные часы (когда операторов нет)

Преимущества:
- Мгновенный ответ 24/7
- Не требует операторов
- Масштабируется

Недостатки:
- Может ошибаться
- Нет гибкости для сложных кейсов


4.2. Assistant (Ассистент оператору)

Клиент → Бот генерирует → Оператор видит (серый) →
→ Нажимает ✅ → Становится зелёным → Публикуется

UI:

┌─────────────────────────────────────────┐
│ [14:35] Клиент: Сколько доставка?       │
│                                         │
│ 🤖 ПРЕДЛОЖЕНИЕ (серый фон):             │
│ ┌───────────────────────────────────┐   │
│ │ "Доставка 500₽, срок 2-3 дня"    │   │
│ └───────────────────────────────────┘   │
│ [✅ Отправить] [✏️ Редактировать]       │
│                                         │
│ Оператор нажал ✅                       │
│                                         │
│ [14:35] Анна (зелёный фон):             │
│ ┌───────────────────────────────────┐   │
│ │ "Доставка 500₽, срок 2-3 дня"    │   │
│ └───────────────────────────────────┘   │
│ ✓ Отправлено                            │
└─────────────────────────────────────────┘

Когда использовать:
- Продажи (важно не ошибиться)
- Первый контакт с крупным клиентом
- Обучение новых операторов

Преимущества:
- Оператор контролирует каждое сообщение
- Бот ускоряет работу (не нужно печатать)
- Качество ответов как от человека


4.3. Hybrid (Гибридный)

Бот отвечает автономно → При сложном вопросе → Передаёт оператору

Логика:
1. Бот пытается ответить сам
2. Если уверенность < 80% → показывает оператору
3. Если оператор не ответил 2 минуты → бот: "Уточню у менеджера"
4. Оператор отвечает → диалог возвращается боту

Когда использовать:
- Поддержка (большинство вопросов стандартные)
- Высокая нагрузка (много диалогов одновременно)

Преимущества:
- Баланс между скоростью и качеством
- Операторы занимаются только сложными кейсами


5. Архитектура системы чатов

Компоненты

┌──────────────────────────────────────────────────────────┐
│                    CHAT PLATFORM                         │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  ┌────────────────┐      ┌────────────────┐             │
│  │ MESSAGE ROUTER │─────►│ BOT ENGINE     │             │
│  │ (входящие msg) │      │ (AI ответы)    │             │
│  └────────────────┘      └────────────────┘             │
│         │                        │                       │
│         │                        ▼                       │
│         │               ┌────────────────┐              │
│         └──────────────►│ CONVERSATION   │              │
│                         │ MANAGER        │              │
│                         └────────────────┘              │
│                                 │                        │
│                                 ▼                        │
│                        ┌────────────────┐               │
│                        │ OPERATOR UI    │               │
│                        │ (веб-интерфейс)│               │
│                        └────────────────┘               │
│                                                          │
└──────────────────────────────────────────────────────────┘
         ▲                                    │
         │                                    ▼
┌────────────────┐                  ┌─────────────────┐
│ MESSENGERS     │                  │ INTEGRATIONS    │
│ - Telegram     │                  │ - CRM           │
│ - WhatsApp     │                  │ - Email         │
│ - VK           │                  │ - Analytics     │
└────────────────┘                  └─────────────────┘

Процесс обработки сообщения

1. Клиент пишет в Telegram
   
2. Webhook  MESSAGE ROUTER
   
3. Определяется conversation_id
   - Если новый  создать conversation
   - Если существует  загрузить контекст
   
4. Проверка: Есть ли активный оператор?
   
   ├─ НЕТ  BOT ENGINE генерирует ответ
            
            ├─ Режим autonomous  отправить клиенту
            ├─ Режим assistant  показать оператору
            └─ Режим hybrid  если уверен  отправить,
                              иначе  показать оператору
   
   └─ ДА  Сообщение идёт оператору
            Бот генерирует подсказку (серым)
   
5. Сохранить сообщение в chat_messages
   
6. Обновить контекст conversation

6. Интеграция с мессенджерами

6.1. Telegram

Подключение:

INSERT INTO messenger_connections (
    name, messenger, credentials, default_bot_id
) VALUES (
    'Telegram Main Bot',
    'telegram',
    '{"bot_token": "YOUR_TOKEN"}',
    1  -- ID бота
);

Webhook:

POST /api/webhooks/telegram/{connection_id}

Поддержка:
- Текст
- Изображения
- Документы
- Кнопки (inline keyboard)
- Команды (/start, /help)


6.2. WhatsApp Business API

Подключение:

INSERT INTO messenger_connections (
    name, messenger, credentials, default_bot_id
) VALUES (
    'WhatsApp Business',
    'whatsapp',
    '{
        "phone_number_id": "...",
        "access_token": "...",
        "business_account_id": "..."
    }',
    1
);

Webhook:

POST /api/webhooks/whatsapp/{connection_id}

6.3. VK

Подключение:

INSERT INTO messenger_connections (
    name, messenger, credentials, default_bot_id
) VALUES (
    'VK Community',
    'vk',
    '{
        "group_id": "...",
        "access_token": "...",
        "secret": "..."
    }',
    1
);

7. API endpoints

Боты

GET    /api/bots                    # Список ботов
POST   /api/bots                    # Создать бота
GET    /api/bots/{id}               # Детали бота
PUT    /api/bots/{id}               # Обновить бота
DELETE /api/bots/{id}               # Удалить бота
POST   /api/bots/{id}/start         # Запустить бота
POST   /api/bots/{id}/stop          # Остановить бота

Диалоги

GET    /api/conversations           # Список диалогов
GET    /api/conversations/{id}      # Детали диалога
POST   /api/conversations/{id}/messages  # Отправить сообщение
PUT    /api/conversations/{id}/assign    # Назначить оператора
POST   /api/conversations/{id}/close     # Закрыть диалог

Сообщения

GET    /api/messages/{id}           # Детали сообщения
POST   /api/messages/{id}/approve   # Одобрить предложение бота (для assistant mode)
POST   /api/messages/{id}/reject    # Отклонить предложение

Мессенджеры

GET    /api/messengers              # Список подключений
POST   /api/messengers              # Создать подключение
POST   /webhooks/{messenger}/{id}   # Webhook для входящих сообщений

8. Следующие шаги

Фаза 1: MVP (2-3 недели)

Фаза 2: Операторы (1-2 недели)

Фаза 3: Расширение (2-3 недели)


Версия: 1.0.0
Автор: Claude Sonnet 4.5
Дата: 2025-12-27