72b6879f4b
- Refactored max_bot from nested packages to flat module structure - Q2: Extended BotUser model (patronymic, email, org, address, vcf_raw, contact_hash, phone_verified, email_verified, last_interaction, total_conversations, total_tickets) - Q2: VCF parser (FN, N, TEL, EMAIL, ORG, ADR), upsert on re-contact, NLP history context (_get_user_history_context -> YandexGPT) - Q1: Broadcast preview modal with 10s confirmation timer - Q3: CSS var(--white)->var(--bg-card), var(--text)->var(--text-primary) - Q4: bot_settings showNotification(), editable max_bot_id - Q5: Webhook secret passthrough via X-Max-Bot-Api-Secret - Masking sensitive keys, dialog_cleared handler, migrate via _add_column_if_not_exists() - Rate limit (asyncio.sleep 0.5 per 10), dead code removed, conv.intent context in contact.py - Portal pages: bot_consent, bot_kb (edit), bot_settings, bot_test, bot_tickets, portal_settings - Tests: 21/21 passing, added test_yandex_gpt.py, test_email_sender.py - Deploy: deploy_full.sh, schema.sql, seed_knowledge_base.sql
195 lines
19 KiB
SQL
195 lines
19 KiB
SQL
-- ============================================
|
||
-- Categories
|
||
-- ============================================
|
||
INSERT INTO bot_categories (id, name, description, sort_order) VALUES
|
||
(1, 'О компании', 'Общая информация о компании AegisOne Engineering', 1),
|
||
(2, 'Аудит безопасности', 'Услуги по независимому аудиту систем безопасности', 2),
|
||
(3, 'Сервисное обслуживание (SLA)', 'Регулярное обслуживание и SLA-контракты', 3),
|
||
(4, 'Реагирование на инциденты', 'Мониторинг и реагирование на инциденты безопасности', 4),
|
||
(5, 'Технический надзор', 'Контроль качества монтажа и пусконаладки', 5),
|
||
(6, 'Документация и нормативы', 'Проектная документация и соответствие нормативам', 6),
|
||
(7, 'Риск-инжиниринг', 'Оценка и управление рисками безопасности', 7),
|
||
(8, 'Отрасли и кейсы', 'Отрасли, в которых работаем, и примеры из практики', 8)
|
||
ON CONFLICT (id) DO NOTHING;
|
||
|
||
-- ============================================
|
||
-- 40 Q&A pairs
|
||
-- ============================================
|
||
TRUNCATE bot_knowledge_base RESTART IDENTITY CASCADE;
|
||
|
||
-- === CATEGORY 1: О КОМПАНИИ (6 with answers) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(1, 'Чем занимается AegisOne Engineering?',
|
||
'AegisOne Engineering предоставляет инженерные решения для безопасности бизнеса: аудит, сервисное обслуживание и технический надзор систем безопасности. Мы снижаем риски, обеспечиваем стабильность и подтверждаем соответствие нормативам.',
|
||
ARRAY['компания', 'услуги', 'безопасность', 'инжиниринг', 'аудит', 'сервис', 'надзор'], TRUE, 'https://aegisone.ru/', 1),
|
||
|
||
(1, 'Где находится AegisOne Engineering?',
|
||
'Юридический адрес: 350072, Россия, Краснодарский край, г. Краснодар, ул. Московская, д. 81/1, пом. 25. Работаем по всему Краснодарскому краю, ЮФО и всей России с выездом специалиста на объект.',
|
||
ARRAY['адрес', 'краснодар', 'местоположение', 'офис', 'где найти'], TRUE, 'https://aegisone.ru/', 2),
|
||
|
||
(1, 'Сколько лет работает компания?',
|
||
'Компания работает более 20 лет на рынке Краснодара, Краснодарского края и Южного федерального округа.',
|
||
ARRAY['история', 'стаж', 'опыт', 'лет', 'компания'], TRUE, 'https://aegisone.ru/', 3),
|
||
|
||
(1, 'Какая миссия компании?',
|
||
'Наша миссия — давать руководителям объективную картину состояния их систем безопасности, выявляя скрытые угрозы и экономя ресурсы. Мы не продаём оборудование — мы продаём спокойствие и стабильность.',
|
||
ARRAY['миссия', 'цель', 'принципы', 'философия'], TRUE, 'https://aegisone.ru/', 4),
|
||
|
||
(1, 'Продаёт ли AegisOne Engineering оборудование?',
|
||
'Нет, мы не продаём оборудование. Мы работаем с системами безопасности «под ключ», но в рамках независимых услуг выступаем исключительно как эксперты. Наша задача — объективно оценить ситуацию и обеспечить работоспособность.',
|
||
ARRAY['оборудование', 'продажа', 'монтаж', 'не продаём'], TRUE, 'https://aegisone.ru/', 5),
|
||
|
||
(1, 'Какие гарантии даёт компания?',
|
||
'Для SLA-контрактов гарантируем время реакции, периодичность ТО и KPI, прописанные в договоре. Для аудита — полноту и объективность отчёта. Все специалисты имеют профильное образование и опыт от 10 лет.',
|
||
ARRAY['гарантии', 'качество', 'kpi', 'сроки', 'специалисты'], TRUE, 'https://aegisone.ru/', 6);
|
||
|
||
-- === CATEGORY 2: АУДИТ БЕЗОПАСНОСТИ (4 with answers, 2 inactive) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(2, 'Что такое независимый аудит безопасности?',
|
||
'Это объективная оценка состояния систем видеонаблюдения, СКУД и ОПС с выявлением уязвимостей и скрытых рисков. Результат — детальный отчёт с фотографиями, рекомендациями и дорожной картой.',
|
||
ARRAY['аудит', 'независимый', 'оценка', 'проверка', 'безопасность'], TRUE, 'https://aegisone.ru/audit/', 7),
|
||
|
||
(2, 'Что входит в аудит систем безопасности?',
|
||
'Входит проверка систем видеонаблюдения (состояние камер, покрытие, качество записи), СКУД (уязвимости, корректность конфигурации) и ОПС (эффективность обнаружения угроз, своевременность реагирования).',
|
||
ARRAY['аудит', 'видеонаблюдение', 'скуда', 'опс', 'проверка'], TRUE, 'https://aegisone.ru/audit/', 8),
|
||
|
||
(2, 'Сколько стоит аудит?',
|
||
'Стоимость зависит от объекта: площади, количества систем, удалённости. Называем цену после предварительного обсуждения — это бесплатно и ни к чему не обязывает.',
|
||
ARRAY['аудит', 'цена', 'стоимость', 'сколько стоит'], TRUE, 'https://aegisone.ru/audit/', 9),
|
||
|
||
(2, 'Как проходит аудит?',
|
||
'В 5 этапов: 1) первичное обсуждение, 2) анализ документов, 3) выезд на объект (визуальный и инструментальный осмотр), 4) подготовка отчёта, 5) презентация результатов руководству.',
|
||
ARRAY['аудит', 'процесс', 'этапы', 'как проходит'], TRUE, 'https://aegisone.ru/audit/', 10),
|
||
|
||
(2, 'Чем аудит отличается от внутренней проверки службы безопасности?',
|
||
NULL,
|
||
ARRAY['аудит', 'отличие', 'внутренняя проверка', 'собственная служба'], FALSE, 'https://aegisone.ru/audit/', 11),
|
||
|
||
(2, 'Что содержится в отчёте по аудиту?',
|
||
NULL,
|
||
ARRAY['отчёт', 'результат', 'аудит', 'содержание'], FALSE, 'https://aegisone.ru/audit/', 12);
|
||
|
||
-- === CATEGORY 3: SLA (3 with answers, 2 inactive) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(3, 'Что входит в сервисное обслуживание (SLA)?',
|
||
'Регулярное техническое обслуживание, 24/7 мониторинг систем, гарантированное время реакции, отчётность по KPI. Включает профилактику отказов и плановые проверки.',
|
||
ARRAY['sla', 'сервис', 'обслуживание', 'то', 'техническое'], TRUE, 'https://aegisone.ru/sla/', 13),
|
||
|
||
(3, 'Какие тарифы SLA есть?',
|
||
'Базовый (от 15 000 ₽/мес): ежемесячное ТО, 48ч реакция, удалённый мониторинг. Оптимальный (от 30 000 ₽/мес): ТО 2 раза/мес, 24ч реакция, 24/7 мониторинг. Максимальный (от 60 000 ₽/мес): еженедельное ТО, 12ч реакция, выделенный инженер.',
|
||
ARRAY['sla', 'тарифы', 'цены', 'стоимость', 'базовый', 'оптимальный', 'максимальный'], TRUE, 'https://aegisone.ru/sla/', 14),
|
||
|
||
(3, 'Нужно ли проводить аудит перед заключением SLA?',
|
||
'Рекомендуется, чтобы определить фактическое состояние систем и оптимальный тариф. Точное предложение формируется после аудита.',
|
||
ARRAY['аудит', 'sla', 'перед', 'нужен ли'], TRUE, 'https://aegisone.ru/sla/', 15),
|
||
|
||
(3, 'Как контролируется качество обслуживания по SLA?',
|
||
NULL,
|
||
ARRAY['контроль', 'качество', 'sla', 'отчётность', 'kpi'], FALSE, 'https://aegisone.ru/sla/', 16),
|
||
|
||
(3, 'Что происходит при аварийной ситуации по SLA?',
|
||
NULL,
|
||
ARRAY['авария', 'sla', 'экстренная', 'реагирование', 'поломка'], FALSE, 'https://aegisone.ru/sla/', 17);
|
||
|
||
-- === CATEGORY 4: ИНЦИДЕНТЫ (3 with answers, 1 inactive) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(4, 'Что такое реагирование на инциденты?',
|
||
'Это 24/7 мониторинг систем безопасности и оперативное реагирование на инциденты. Включает расследование причин, устранение последствий и профилактику повторений.',
|
||
ARRAY['инцидент', 'реагирование', 'мониторинг', '24/7'], TRUE, 'https://aegisone.ru/incident/', 18),
|
||
|
||
(4, 'Как быстро вы реагируете на инцидент?',
|
||
'Время реакции — от 4 до 24 часов в зависимости от тарифа SLA. Возможен экстренный выезд.',
|
||
ARRAY['скорость', 'время', 'реакция', 'инцидент', 'быстро'], TRUE, 'https://aegisone.ru/incident/', 19),
|
||
|
||
(4, 'Какие системы вы мониторите?',
|
||
'Видеонаблюдение, СКУД, охранно-пожарную сигнализацию (ОПС) и системы периметральной защиты.',
|
||
ARRAY['мониторинг', 'системы', 'видеонаблюдение', 'скуда', 'опс'], TRUE, 'https://aegisone.ru/incident/', 20),
|
||
|
||
(4, 'Нужен ли договор для разового вызова на инцидент?',
|
||
NULL,
|
||
ARRAY['договор', 'разовый', 'инцидент', 'без договора'], FALSE, 'https://aegisone.ru/incident/', 21);
|
||
|
||
-- === CATEGORY 5: ТЕХНИЧЕСКИЙ НАДЗОР (3 with answers, 1 inactive) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(5, 'Что такое технический надзор?',
|
||
'Это независимый контроль качества монтажа и пусконаладки систем безопасности. Гарантируем соответствие проекту, нормативам и срокам.',
|
||
ARRAY['технический надзор', 'контроль', 'монтаж', 'качество', 'пусконаладка'], TRUE, 'https://aegisone.ru/supervision/', 22),
|
||
|
||
(5, 'Когда нужен технический надзор?',
|
||
'При строительстве или реконструкции объекта, при модернизации систем безопасности, а также при приёмке объекта в эксплуатацию.',
|
||
ARRAY['надзор', 'когда нужен', 'строительство', 'модернизация', 'приёмка'], TRUE, 'https://aegisone.ru/supervision/', 23),
|
||
|
||
(5, 'Чем технадзор отличается от авторского надзора?',
|
||
'Авторский надзор ведётся проектировщиком и проверяет соответствие проекту. Технический надзор — это независимый контроль качества, сроков и соблюдения норм.',
|
||
ARRAY['отличие', 'авторский', 'технадзор', 'проектировщик'], TRUE, 'https://aegisone.ru/supervision/', 24),
|
||
|
||
(5, 'Как документируются результаты технадзора?',
|
||
NULL,
|
||
ARRAY['документы', 'акты', 'технадзор', 'результаты'], FALSE, 'https://aegisone.ru/supervision/', 25);
|
||
|
||
-- === CATEGORY 6: ДОКУМЕНТАЦИЯ (3 with answers, 1 inactive) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(6, 'Какие документы вы разрабатываете?',
|
||
'Проектную документацию для видеонаблюдения, СКУД, ОПС, периметральной защиты. А также проводим экспертизу существующей документации и аудит соответствия нормативам.',
|
||
ARRAY['документация', 'проектная', 'разработка', 'скуда', 'опс', 'пожарная'], TRUE, 'https://aegisone.ru/documentation/', 26),
|
||
|
||
(6, 'Какие документы нужны для сдачи объекта?',
|
||
'Зависит от типа объекта. Обычно: проектная документация (стадии П и Р), исполнительная документация, акты скрытых работ, паспорта и сертификаты оборудования, акты приёмки.',
|
||
ARRAY['сдача', 'документы', 'объект', 'приёмка', 'исполнительная'], TRUE, 'https://aegisone.ru/documentation/', 27),
|
||
|
||
(6, 'Есть ли лицензия на проектирование?',
|
||
'Да, компания имеет все необходимые разрешения и компетенции для проектирования объектов любого класса сложности.',
|
||
ARRAY['лицензия', 'разрешение', 'проектирование', 'сро'], TRUE, 'https://aegisone.ru/documentation/', 28),
|
||
|
||
(6, 'Можно ли восстановить утерянную документацию?',
|
||
NULL,
|
||
ARRAY['восстановление', 'документация', 'утеряна', 'исполнительная схема'], FALSE, 'https://aegisone.ru/documentation/', 29);
|
||
|
||
-- === CATEGORY 7: РИСК-ИНЖИНИРИНГ (3 with answers, 1 inactive) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(7, 'Что такое риск-инжиниринг?',
|
||
'Это системный подход к управлению рисками безопасности: оценка, анализ и разработка стратегии защиты. Помогает защитить бизнес от финансовых и репутационных потерь.',
|
||
ARRAY['риск', 'инжиниринг', 'управление', 'оценка', 'стратегия'], TRUE, 'https://aegisone.ru/risk/', 30),
|
||
|
||
(7, 'Чем риск-инжиниринг отличается от аудита?',
|
||
'Аудит оценивает текущее состояние систем. Риск-инжиниринг шире: анализирует бизнес-процессы, угрозы, сценарии и предлагает стратегию с экономическим обоснованием.',
|
||
ARRAY['отличие', 'риск-инжиниринг', 'аудит', 'разница'], TRUE, 'https://aegisone.ru/risk/', 31),
|
||
|
||
(7, 'Как измерить эффективность безопасности?',
|
||
'Через ROI безопасности: сравниваем стоимость риска «до» и «после» внедрения мер. Даём конкретные цифры и сроки окупаемости.',
|
||
ARRAY['эффективность', 'roi', 'безопасность', 'измерение', 'окупаемость'], TRUE, 'https://aegisone.ru/risk/', 32),
|
||
|
||
(7, 'Как часто нужно обновлять оценку рисков?',
|
||
NULL,
|
||
ARRAY['обновление', 'периодичность', 'риски', 'оценка', 'частота'], FALSE, 'https://aegisone.ru/risk/', 33);
|
||
|
||
-- === CATEGORY 8: ОТРАСЛИ И КЕЙСЫ (7 inactive — all need answers) ===
|
||
INSERT INTO bot_knowledge_base (category_id, question, answer, keywords, is_active, source_url, sort_order) VALUES
|
||
(8, 'В каких отраслях вы работаете?',
|
||
NULL,
|
||
ARRAY['отрасли', 'клиенты', 'ритейл', 'склады', 'производство', 'офисы', 'гостиницы', 'банки'], FALSE, 'https://aegisone.ru/', 34),
|
||
|
||
(8, 'Работаете ли вы с торговыми центрами?',
|
||
NULL,
|
||
ARRAY['тц', 'торговый центр', 'ритейл', 'безопасность'], FALSE, 'https://aegisone.ru/', 35),
|
||
|
||
(8, 'Работаете ли вы с производственными предприятиями?',
|
||
NULL,
|
||
ARRAY['производство', 'завод', 'промышленность', 'безопасность'], FALSE, 'https://aegisone.ru/', 36),
|
||
|
||
(8, 'Был ли у вас кейс со складом торговой сети?',
|
||
NULL,
|
||
ARRAY['кейс', 'склад', 'торговая сеть', 'пример'], FALSE, 'https://aegisone.ru/', 37),
|
||
|
||
(8, 'Какой результат вы получили для банковского офиса?',
|
||
NULL,
|
||
ARRAY['банк', 'офис', 'опс', 'пожарная', 'кейс'], FALSE, 'https://aegisone.ru/', 38),
|
||
|
||
(8, 'Что такое метод «Тайный покупатель»?',
|
||
NULL,
|
||
ARRAY['тайный покупатель', 'оценка', 'персонал', 'охрана', 'метод'], FALSE, 'https://aegisone.ru/', 39),
|
||
|
||
(8, 'Есть ли у вас кейсы для гостиниц?',
|
||
NULL,
|
||
ARRAY['гостиница', 'отель', 'кейс', 'скуда', 'бронирование'], FALSE, 'https://aegisone.ru/', 40);
|