fix(bot): замены заявки НЕТ — недозвон не брак (правило владельца 13.07.2026)

В трёх статьях было написано «не берёт трубку → заменим». Это ошибка: замену
мы не делаем, и бот честно обещал её клиентам.

Тон тонкий, тему сглаживаем:
- не обещать замену/возврат («заменим», «вернём деньги») — AnswerGuard::promisesReplacement;
- но и не рубить дверью («замена не полагается», «деньги не возвращаются») — тоже режем;
- мягко: недозвон — обычное дело; совет СМС → звонок позже → мессенджер; спорный
  случай на support@liderra.ru, специалист разбирает индивидуально, без обещаний;
- не выдумывать срок ответа поддержки (она 24/7).

Статьи: zamena-zayavki.md переписана, поправлены kak-rabotat-s-nomerom.md и sdelki.md.
Два старых теста охраняли прежнее (неверное) правило — переписаны под новое.

Тесты 130/130. Бот НЕ на проде.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-07-13 05:59:11 +03:00
parent c320e095e1
commit 9cd12f179f
8 changed files with 141 additions and 27 deletions
+55 -5
View File
@@ -268,14 +268,64 @@ it('«где посмотреть...» — это про портал, а не
});
/**
* 🔴 Хвост прогона (D04): «не берёт трубку значит, не заинтересован, гонять смысла нет».
* По zamena-zayavki.md такую заявку МЕНЯЮТ. Совет бота стоит клиенту денег.
* 🔴 Правило владельца 13.07.2026: заявку с недозвоном мы НЕ МЕНЯЕМ. Бот не имеет права
* обещать замену или возврат денег за такое обещание потом придёт злой клиент.
* Но и грубить нельзя: недозвон обычное дело, а не брак.
*/
it('сторож режет совет «не берёт трубку — забей»', function () {
it('сторож не даёт обещать замену заявки и возврат денег', function () {
$guard = app(AnswerGuard::class);
$context = 'Спорный случай разбирает специалист индивидуально.';
expect($guard->clean('Такую заявку мы заменим. Напишите на support@liderra.ru.', $context))
->toBe('Напишите на support@liderra.ru.');
expect($guard->clean('Мы поменяем этот номер бесплатно. Укажите номер сделки.', $context))
->toBe('Укажите номер сделки.');
expect($guard->clean('Вернём деньги за эту заявку. Укажите номер сделки.', $context))
->toBe('Укажите номер сделки.');
});
/**
* Правило владельца 13.07.2026: тема тонкая сглаживать. Бот не обещает замену,
* но и не рубит «замена не полагается, деньги не возвращаются»: остаётся совет
* и путь к живому специалисту.
*/
it('сторож убирает жёсткий отказ «замена не полагается / деньги не возвращаются»', function () {
$guard = app(AnswerGuard::class);
$context = 'Спорный случай разбирает специалист индивидуально.';
expect($guard->clean('Замена за недозвон не полагается. Отправьте СМС и перезвоните позже.', $context))
->toBe('Отправьте СМС и перезвоните позже.');
expect($guard->clean('Деньги не возвращаются. Напишите на support@liderra.ru.', $context))
->toBe('Напишите на support@liderra.ru.');
});
/**
* Поддержка работает 24/7 (podderzhka.md). «Ответят в течение рабочего дня» / «за пару
* часов» выдуманный срок, которого мы не обещали.
*/
it('сторож режет выдуманный срок ответа поддержки', function () {
$guard = app(AnswerGuard::class);
$text = 'Если не берёт трубку — значит, не заинтересован, гонять смысла нет. Напишите в поддержку.';
expect($guard->clean($text, 'Заявку можно заменить.'))->toBe('Напишите в поддержку.');
$text = 'Обычно специалист отвечает в течение рабочего дня. Напишите на support@liderra.ru.';
expect($guard->clean($text, 'Поддержка работает круглосуточно.'))
->toBe('Напишите на support@liderra.ru.');
});
it('сторож режет пренебрежительный совет «не берёт трубку — забей»', function () {
$guard = app(AnswerGuard::class);
$text = 'Если не берёт трубку — значит, не заинтересован, гонять смысла нет. Отправьте СМС.';
expect($guard->clean($text, 'Недозвон — обычное дело.'))->toBe('Отправьте СМС.');
});
it('сторож НЕ режет добрый совет про недозвон', function () {
$guard = app(AnswerGuard::class);
$text = 'Если человек не берёт трубку, не стоит опускать руки: отправьте СМС и перезвоните позже.';
expect($guard->clean($text, 'Недозвон — обычное дело, а не брак.'))->toBe($text);
});
/**