Версия: 1.0.0
Дата: 2025-12-27
Тип: PLATFORM
Статус: Design
Универсальная платформа для управления ботами и диалогами с клиентами. Разделение:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ BOT ENGINE │────►│ CHAT SYSTEM │────►│ MESSENGERS │
│ (AI логика) │ │ (диалоги) │ │ (каналы) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ │ │
Сценарии Чаты с клиентами Telegram, WhatsApp
Контексты История сообщений VK, Instagram
Промпты Операторы Email, SMS
Принцип: Бот ≠ Чат. Бот — это логика, чат — это канал связи.
Назначение: Экземпляры ботов (каждый бот = отдельный экземпляр)
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()
);
Назначение: Сценарии диалогов
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()
);
Назначение: Диалоги с клиентами
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()
);
Назначение: Сообщения в диалогах
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()
);
Назначение: Подключения к мессенджерам
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()
);
Назначение: База знаний для ботов
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()
);
┌─────────────────────────────────────────────────────────────┐
│ 🤖 Платформа управления ботами │
├─────────────────────────────────────────────────────────────┤
│ │
│ 📊 Дашборд │
│ • Активные диалоги: 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 мин назад │ │
│ │ "Спасибо, посмотрю каталог" │ │
│ │ [💬 Открыть диалог] [👤 Назначить оператора] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 💬 Диалог с Иван Петров (@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. Оператор может:
- ✅ Нажать "Отправить" → текст становится зелёным и публикуется клиенту
- ✏️ Редактировать → изменить текст перед отправкой
- ❌ Отклонить → написать свой ответ
Название: "Первый контакт"
Тип: lead_gen
Режим: autonomous (полная автономия)
Задачи:
- Поприветствовать
- Квалифицировать лида (бюджет, срочность, потребность)
- Предложить каталог
- Собрать контакт (телефон/email)
Промпт:
Ты — ассистент компании Пиротехника SPB.
Цель: квалифицировать нового клиента.
Сценарий:
1. Поздоровайся, представься
2. Спроси, что интересует (праздник? корпоратив? подарок?)
3. Уточни бюджет
4. Предложи 2-3 варианта из каталога
5. Попроси контакт для отправки предложения
Правила:
- Не более 3 вопросов подряд
- Если клиент не отвечает 5 минут — напомни через 1 час
- Если грубит — передай оператору
Триггеры:
- Новое сообщение от незнакомого номера/аккаунта
- Команда /start в Telegram
Метрика успеха: Получен контакт (телефон или email)
Название: "Консультант"
Тип: sales
Режим: assistant (подсказывает оператору)
Задачи:
- Ответить на вопросы о товарах
- Помочь с выбором
- Рассчитать стоимость
- Оформить предзаказ
Промпт:
Ты — эксперт по пиротехнике.
Цель: помочь клиенту выбрать товары и довести до покупки.
У тебя есть доступ к:
- Каталогу товаров (pim_catalog)
- Ценам и акциям
- Базе знаний (FAQ)
Сценарий:
1. Уточни потребность (для чего фейерверк?)
2. Предложи 3-5 вариантов с описанием
3. Ответь на вопросы (состав, эффект, безопасность)
4. Рассчитай итоговую стоимость с доставкой
5. Предложи оформить заказ
Если НЕ ЗНАЕШЬ ответа → предложи: "Уточню у менеджера, минутку"
Тогда оператор видит вопрос и отвечает сам.
Триггеры:
- Клиент из базы CRM (уже был контакт)
- Клиент открыл ссылку из email-рассылки
Метрика успеха: Создан заказ или добавлены товары в корзину
Название: "Closer"
Тип: sales
Режим: hybrid (бот + оператор вместе)
Задачи:
- Закрыть сделку
- Оформить заказ
- Согласовать оплату и доставку
Промпт:
Ты — менеджер по продажам.
Цель: ЗАКРЫТЬ сделку.
Клиент уже определился с товаром.
Осталось:
1. Подтвердить состав заказа
2. Уточнить адрес доставки
3. Выбрать способ оплаты
4. Создать заказ в системе
Будь настойчив, но вежлив.
Используй urgency: "Товар в наличии, могу зарезервировать"
Предложи бонус: "При заказе сегодня — бесплатная доставка"
Триггеры:
- Клиент добавил товары в корзину
- Клиент спросил "как оформить заказ?"
- Прошло >30 минут с момента добавления в корзину (reminder)
Метрика успеха: Заказ оформлен и оплачен
Название: "Поддержка 24/7"
Тип: support
Режим: autonomous → assistant (если не может решить)
Задачи:
- Ответить на вопросы о заказе
- Помочь с трекингом
- Решить проблему
Промпт:
Ты — служба поддержки.
Цель: решить проблему клиента быстро.
База знаний:
- Статусы заказов (Order таблица)
- Треки доставки
- FAQ по возвратам, гарантии
Сценарий:
1. Спроси номер заказа
2. Покажи статус и трек-номер
3. Если проблема — предложи решение из FAQ
4. Если не можешь решить → "Передам менеджеру, ответим в течение часа"
ВАЖНО: При словах "брак", "не работает", "хочу вернуть" → СРАЗУ передать оператору
Триггеры:
- Клиент написал после оформления заказа
- Ключевые слова: "заказ", "трек", "доставка", "где мой"
Метрика успеха: Проблема решена без эскалации оператору
Название: "VIP менеджер"
Тип: sales
Режим: autonomous
Задачи:
- Предложить новинки
- Напомнить о сезонных товарах
- Персональные скидки
Промпт:
Ты — личный менеджер VIP клиента.
Цель: увеличить повторные покупки.
История клиента:
- Прошлые заказы
- Средний чек
- Предпочтения (категории, бренды)
Сценарий:
1. Поздоровайся по имени
2. "Помните, в прошлый раз вы брали [товар]? Вышла новинка!"
3. Предложи персональную скидку 15%
4. "Хотите оформить заказ или сначала посмотреть каталог?"
Тон: дружелюбный, как старому знакомому.
Триггеры:
- Прошло 3 месяца с последнего заказа
- Новинка в категории, которую покупал клиент
- День рождения клиента
Метрика успеха: Повторный заказ
Клиент → Бот → Ответ → Клиент
Когда использовать:
- Холодные лиды (квалификация)
- FAQ / Поддержка
- Ночные часы (когда операторов нет)
Преимущества:
- Мгновенный ответ 24/7
- Не требует операторов
- Масштабируется
Недостатки:
- Может ошибаться
- Нет гибкости для сложных кейсов
Клиент → Бот генерирует → Оператор видит (серый) →
→ Нажимает ✅ → Становится зелёным → Публикуется
UI:
┌─────────────────────────────────────────┐
│ [14:35] Клиент: Сколько доставка? │
│ │
│ 🤖 ПРЕДЛОЖЕНИЕ (серый фон): │
│ ┌───────────────────────────────────┐ │
│ │ "Доставка 500₽, срок 2-3 дня" │ │
│ └───────────────────────────────────┘ │
│ [✅ Отправить] [✏️ Редактировать] │
│ │
│ Оператор нажал ✅ │
│ │
│ [14:35] Анна (зелёный фон): │
│ ┌───────────────────────────────────┐ │
│ │ "Доставка 500₽, срок 2-3 дня" │ │
│ └───────────────────────────────────┘ │
│ ✓ Отправлено │
└─────────────────────────────────────────┘
Когда использовать:
- Продажи (важно не ошибиться)
- Первый контакт с крупным клиентом
- Обучение новых операторов
Преимущества:
- Оператор контролирует каждое сообщение
- Бот ускоряет работу (не нужно печатать)
- Качество ответов как от человека
Бот отвечает автономно → При сложном вопросе → Передаёт оператору
Логика:
1. Бот пытается ответить сам
2. Если уверенность < 80% → показывает оператору
3. Если оператор не ответил 2 минуты → бот: "Уточню у менеджера"
4. Оператор отвечает → диалог возвращается боту
Когда использовать:
- Поддержка (большинство вопросов стандартные)
- Высокая нагрузка (много диалогов одновременно)
Преимущества:
- Баланс между скоростью и качеством
- Операторы занимаются только сложными кейсами
┌──────────────────────────────────────────────────────────┐
│ 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
Подключение:
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)
Подключение:
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}
Подключение:
INSERT INTO messenger_connections (
name, messenger, credentials, default_bot_id
) VALUES (
'VK Community',
'vk',
'{
"group_id": "...",
"access_token": "...",
"secret": "..."
}',
1
);
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 для входящих сообщений
Версия: 1.0.0
Автор: Claude Sonnet 4.5
Дата: 2025-12-27