chore(chat): убрать настройки Jivo — чат теперь свой; экскурсии выключены

Config: jivo_bot -> bot (убраны неиспользуемые webhook_secret/outbound_url/token
- транспорт Jivo уже удалён), jivosite убран целиком (виджет больше не нужен).
Env: JIVO_BOT_* -> BOT_*; JIVO_WIDGET_ID/VITE_JIVO_WIDGET_ID удалены.
tours_enabled выключен по умолчанию (BOT_TOURS_ENABLED=false) — экскурсии
«Показать на портале» уходили не по теме вопроса (живая проверка 13.07.2026),
чинить релевантность отдельно; сторож-тест не даёт включить незаметно.

Заодно убраны обнаруженные хвосты того же виджета, оставшиеся от прежних
задач: JivoLivenessProbe (класс+тест+регистрация в мониторинге внешних
сервисов), плитка «JivoSite» в админ-дашборде, встроенный скрипт виджета
в welcome.blade.php, осиротевший тест resources/js/.../JivoWidget.vue
(компонент уже был удалён ранее), declaration VITE_JIVO_WIDGET_ID.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-07-13 08:32:21 +03:00
parent ac0c8f74fc
commit e969b7700a
23 changed files with 50 additions and 157 deletions
@@ -85,9 +85,9 @@ it('счётчики чата живут в атомарном хранилищ
// и защита от накрутки счёта становится дырявой. Хранилище счётчиков должно быть
// атомарным (Redis INCR). Сторож ловит и подмену на 'file', и пропажу самого ключа:
// без ключа config() вернул бы null, и проверка «не file» прошла бы впустую.
expect(config('services.jivo_bot.limiter_store'))->toBeIn(['redis', 'array']);
expect(config('services.bot.limiter_store'))->toBeIn(['redis', 'array']);
// И сам класс обязан брать это хранилище, а не общий кэш приложения.
expect(file_get_contents(app_path('Services/Bot/ChatRateLimiter.php')))
->toContain("Cache::store((string) config('services.jivo_bot.limiter_store'))");
->toContain("Cache::store((string) config('services.bot.limiter_store'))");
});