feat(jivo-bot): всеобъемлющая клиентская инструкция — 15 статей + защита секретов

Разведка портала 5 агентами (экраны, биллинг/настройки, Конкурентное поле,
все подсказки (?), внутренние правила) → база знаний бота выросла 4 → 15 статей:
начало работы (что такое заявка, подарок 1000₽), проекты (лимиты/регионы/дни,
правило 18:00 МСК), тарифы (7 ступеней, списание по факту), пополнение (100₽,
карта/счёт/акт), баланс и пауза (разморозка «всё-или-ничего»), сделки и канбан
(5 статусов, экспорт), Конкурентное поле (сбор 300₽/изучение 50₽, очередь,
ручной режим, дубли, метки номеров), смена источника, настройки и 2FA,
уведомления, импорт CSV, API/webhook, мобильная версия, дашборд, поддержка.

Защита коммерческой тайны (проверено агентом-цензором — 15/15 статей чисто):
ни слова про поставщика/каналы/закупку и про то, что заявка может уйти не только
одному клиенту; вопросы об эксклюзивности и перепродаже — жёсткая стоп-тема
(бот не отвечает НИ В КАКУЮ сторону, зовёт живого специалиста), внутренние
движки не упоминаются, ложных обещаний (авто-возврат, «Команда») нет.

Стоп-темы разделены: HARD (деньги/скидки/юр/эксклюзив — всегда) и PERSONAL
(«мой баланс») с исключением HOWTO — «перенести мои заявки из амоцрм» больше
не уходит к человеку, бот рассказывает про импорт.

TDD: 40/40 зелёные. Живая проверка 20+ вопросов на стенде.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-07-12 11:02:23 +03:00
parent dd16edde8e
commit 1a686d07c8
18 changed files with 483 additions and 65 deletions
@@ -17,6 +17,7 @@ it('перечитывает resources/help и заполняет knowledge_chun
$this->artisan('help:rebuild-knowledge')->assertExitCode(0);
expect(DB::table('knowledge_chunks')->where('source_path', 'help/deleted-article.md')->count())->toBe(0)
->and(DB::table('knowledge_chunks')->where('title', 'Что такое проект')->count())->toBeGreaterThan(0)
->and(DB::table('knowledge_chunks')->where('title', 'Тарифы и списания')->count())->toBeGreaterThan(0);
->and(DB::table('knowledge_chunks')->where('title', 'like', 'Что такое проект%')->count())->toBeGreaterThan(0)
->and(DB::table('knowledge_chunks')->where('title', 'like', 'Тарифы и списания%')->count())->toBeGreaterThan(0)
->and(DB::table('knowledge_chunks')->distinct('source_path')->count('source_path'))->toBeGreaterThanOrEqual(12);
});