6.6 KiB
6.6 KiB
Задача: Система приветствий для каналов коммуникации
Контекст
В системе реализованы три канала взаимодействия с пользователями:
- Web - чат на сайте
- Telegram - бот в мессенджере
- Email - почтовый робот
У каждого канала своя специфика первого контакта:
- Web: сразу при открытии чата
- Telegram: после нажатия
/start - Email: после получения первого письма
Текущее состояние
Что работает:
- ✅ AI Assistant с настройками промптов, RAG таблиц, правил
- ✅ Векторный поиск по базе знаний (таблицы типа Notion)
- ✅ Система плейсхолдеров для подстановки данных
- ✅ Обработка сообщений от авторизованных пользователей
Что НЕ работает:
- ❌ Первое взаимодействие не использует RAG и настройки AI
- ❌ Нет автоматических приветствий с контекстом
- ❌ Каждый канал обрабатывается по-разному
- ❌ Нет UI для управления приветствиями
Требования
1. Использовать существующую инфраструктуру
- Настройки из
/settings/ai/assistant(system_prompt, RAG tables, rules) - Векторный поиск для получения актуального контекста
- Плейсхолдеры из таблиц базы данных
2. Генерация приветствий с AI
При первом контакте:
- Загрузить настройки AI Assistant
- Выполнить RAG-поиск по выбранным таблицам
- Сгенерировать контекстное приветствие через LLM
- Запомнить, что приветствие показано
3. Специфика каналов
Учесть особенности каждого канала:
- Web: показать приветствие сразу при загрузке чата
- Telegram: отправить при команде
/start - Email: отправить автоответ на первое письмо
4. UI для управления
Добавить в /settings/ai/assistant секцию:
┌──────────────────────────────────────┐
│ Настройки первого контакта │
├──────────────────────────────────────┤
│ [Web] [Telegram] [Email] │
│ │
│ ☑ Включить AI-приветствие │
│ ☑ Использовать RAG │
│ ☑ Применять правила │
│ │
│ Дополнительный промпт: │
│ [текстовое поле] │
└──────────────────────────────────────┘
Техническая реализация
БД: Таблица конфигурации каналов
CREATE TABLE channel_welcome_configs (
id SERIAL PRIMARY KEY,
channel VARCHAR(20) UNIQUE NOT NULL,
is_enabled BOOLEAN DEFAULT true,
use_ai_assistant_settings BOOLEAN DEFAULT true,
custom_prompt_encrypted TEXT,
show_on VARCHAR(20) DEFAULT 'first_contact',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
БД: Таблица отслеживания первых контактов
CREATE TABLE first_contact_tracking (
id SERIAL PRIMARY KEY,
identifier_hash VARCHAR(64) NOT NULL,
channel VARCHAR(20) NOT NULL,
welcome_shown BOOLEAN DEFAULT false,
first_message_at TIMESTAMP DEFAULT NOW(),
UNIQUE(identifier_hash, channel)
);
Backend: Сервис ChannelWelcomeService
class ChannelWelcomeService {
// Проверить, показывали ли приветствие
async isFirstContact(identifier, channel);
// Загрузить настройки канала
async getChannelConfig(channel);
// Сгенерировать AI-приветствие
async generateWelcome(channel, identifier);
// Пометить, что приветствие показано
async markWelcomeShown(identifier, channel);
}
Интеграция с существующим кодом
1. Обновить unifiedMessageProcessor.js:
async function processMessage(messageData) {
const { userId, channel, identifier } = messageData;
// Проверяем первый контакт
if (await channelWelcomeService.isFirstContact(identifier, channel)) {
const welcome = await channelWelcomeService.generateWelcome(channel, identifier);
await channelWelcomeService.markWelcomeShown(identifier, channel);
// Добавляем приветствие в ответ
messageData.systemMessage = welcome;
}
// Остальная обработка...
}
2. Обновить WebBot, TelegramBot, EmailBot:
- Добавить метод
sendSystemMessage()для отправки приветствий - При первом сообщении запрашивать приветствие у
ChannelWelcomeService
3. Frontend: расширить AiAssistantSettings.vue:
- Добавить секцию "Настройки каналов"
- Табы для Web/Telegram/Email
- Настройки: вкл/выкл, использовать RAG, доп. промпт
Результат
После реализации:
- ✅ Каждый канал генерирует умные приветствия с RAG
- ✅ Используются существующие настройки AI Assistant
- ✅ Админ управляет через UI
- ✅ Отслеживание первых контактов
- ✅ Масштабируемость для новых каналов
Приоритет
Средний - улучшает UX, но не критично для работы системы.
Оценка времени
3-4 часа разработки + тестирование.