feat(bot): личный вопрос вошедшего отвечается по карточке, гостю — вход в кабинет
This commit is contained in:
@@ -22,24 +22,25 @@ beforeEach(function () {
|
||||
]);
|
||||
});
|
||||
|
||||
it('стоп-тема (мой баланс) → эскалация без похода в LLM', function () {
|
||||
it('личный вопрос (мой баланс) без карточки фактов → приглашение в кабинет, без похода в LLM', function () {
|
||||
// Правило изменено 13.07.2026: личный вопрос теперь НЕ уходит к живому специалисту —
|
||||
// это дорого и медленно. Вошедшему клиенту отвечает карточка фактов (см.
|
||||
// PersonalAnswersTest); а здесь answer() зовётся по-старому, без карточки — то есть
|
||||
// как гость с лендинга: специалиста звать незачем, зовём в кабинет.
|
||||
Http::fake();
|
||||
|
||||
$answer = app(BotAnswerService::class)->answer('какой у меня баланс?');
|
||||
|
||||
// Текст именно стоп-эскалации («лучше разберёт живой специалист»), а не «в инструкции
|
||||
// нет ответа»: до фикса 12.07.2026 вопрос проскакивал стоп-гейт и эскалировал лишь
|
||||
// пустым поиском. Эскалация просит телефон (правило владельца), а не зовёт оператора.
|
||||
expect($answer->escalate)->toBeTrue()
|
||||
->and($answer->text)->toContain('лучше разберёт живой специалист')
|
||||
->and($answer->text)->toContain('номер телефона');
|
||||
expect($answer->escalate)->toBeFalse()
|
||||
->and($answer->text)->toBe(BotAnswerService::LOGIN_TEXT);
|
||||
Http::assertNothingSent();
|
||||
});
|
||||
|
||||
it('стоп-тема со словами между «у меня» и «баланс» → эскалация ДО поиска и LLM', function () {
|
||||
it('личный вопрос со словами между «у меня» и «баланс» без карточки → тоже приглашение в кабинет, ДО поиска и LLM', function () {
|
||||
// Живой баг 12.07.2026: «какой у меня сейчас баланс?» проскакивал мимо стоп-темы,
|
||||
// поиск находил статью про пополнение и бот отвечал общими словами вместо передачи
|
||||
// человеку. Статья про баланс в базе ЕСТЬ — эскалация обязана сработать раньше поиска.
|
||||
// человеку. Правило 13.07.2026 сменило адресата: без карточки фактов — не специалист,
|
||||
// а кабинет (см. комментарий к тесту выше). Приглашение обязано сработать раньше поиска.
|
||||
KnowledgeChunk::create([
|
||||
'source_path' => 'help/b.md', 'title' => 'Как пополнить баланс', 'tour' => 'top-up-balance',
|
||||
'topics' => 'пополнить, баланс', 'chunk_index' => 0,
|
||||
@@ -49,8 +50,8 @@ it('стоп-тема со словами между «у меня» и «бал
|
||||
|
||||
$answer = app(BotAnswerService::class)->answer('какой у меня сейчас баланс?');
|
||||
|
||||
expect($answer->escalate)->toBeTrue()
|
||||
->and($answer->text)->toContain('лучше разберёт живой специалист');
|
||||
expect($answer->escalate)->toBeFalse()
|
||||
->and($answer->text)->toBe(BotAnswerService::LOGIN_TEXT);
|
||||
Http::assertNothingSent();
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user