55 lines
2.9 KiB
PHP
55 lines
2.9 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use App\Models\KnowledgeChunk;
|
||
|
|
use App\Services\Bot\BotAnswerService;
|
||
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||
|
|
use Illuminate\Support\Facades\Http;
|
||
|
|
|
||
|
|
uses(RefreshDatabase::class);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Экскурсии «Показать на портале» 13.07.2026 были ВЫКЛЮЧЕНЫ: ссылки уходили не по теме
|
||
|
|
* вопроса (совпадало одно случайное слово — бот приписывал экскурсию по уведомлениям
|
||
|
|
* к реплике «первое сообщение подряд»). Правило переписано, экскурсии включены обратно.
|
||
|
|
*
|
||
|
|
* Теперь их держат два условия, и оба обязательны:
|
||
|
|
* 1. Вопрос по теме статьи (KnowledgeSearch::isOnTopic — тесты в ToursRelevanceTest).
|
||
|
|
* 2. Клиент пишет ИЗ КАБИНЕТА. Гостю с лендинга ссылка внутрь кабинета бесполезна:
|
||
|
|
* он там ещё не зарегистрирован, и показывать ему нечего.
|
||
|
|
*
|
||
|
|
* Этот сторож не даёт незаметно вернуть ссылки гостям.
|
||
|
|
*/
|
||
|
|
beforeEach(function () {
|
||
|
|
config()->set('services.bot.tours_enabled', true);
|
||
|
|
config()->set('app.url', 'https://lk.liderra.ru');
|
||
|
|
config()->set('services.yandexgpt', [
|
||
|
|
'api_key' => 'k', 'folder_id' => 'f', 'model' => 'yandexgpt-lite/latest',
|
||
|
|
'endpoint' => 'https://llm.api.cloud.yandex.net/foundationModels/v1/completion',
|
||
|
|
'timeout_seconds' => 8,
|
||
|
|
]);
|
||
|
|
Http::fake([
|
||
|
|
'llm.api.cloud.yandex.net/*' => Http::response([
|
||
|
|
'result' => ['alternatives' => [['message' => ['role' => 'assistant', 'text' => 'Проект создаётся в разделе «Проекты».']]]],
|
||
|
|
]),
|
||
|
|
]);
|
||
|
|
KnowledgeChunk::create([
|
||
|
|
'source_path' => 'help/create.md', 'title' => 'Как создать проект', 'tour' => 'create-project',
|
||
|
|
'topics' => 'создать проект, новый проект', 'chunk_index' => 0,
|
||
|
|
'content' => 'Проект создаётся в разделе «Проекты», кнопка «Создать».',
|
||
|
|
]);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('клиенту из кабинета экскурсия по теме предлагается', function () {
|
||
|
|
$answer = app(BotAnswerService::class)->answer('как создать проект?', [], fromPortal: true);
|
||
|
|
|
||
|
|
expect($answer->text)->toContain('https://lk.liderra.ru/?tour=create-project');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('гостю с лендинга экскурсию не предлагаем — ему нечего показывать в кабинете', function () {
|
||
|
|
$answer = app(BotAnswerService::class)->answer('как создать проект?', [], fromPortal: false);
|
||
|
|
|
||
|
|
expect($answer->text)->not->toContain('?tour=');
|
||
|
|
});
|