diff --git a/app/app/Services/Bot/BotAnswerService.php b/app/app/Services/Bot/BotAnswerService.php index 598893c1..ff211f1b 100644 --- a/app/app/Services/Bot/BotAnswerService.php +++ b/app/app/Services/Bot/BotAnswerService.php @@ -12,8 +12,32 @@ namespace App\Services\Bot; */ class BotAnswerService { - /** Личные данные, деньги конкретного клиента, скидки, юр-темы, просьба человека. */ - private const STOP_PATTERN = '/(мо[йяеи]\s+(баланс|сч[её]т|деньг|проект|заявк|сделк)|у меня\s+(?:\S+\s+){0,3}(баланс|сч[её]т|деньг|проект|заявк|сделк)|скидк|оператор|человек|менеджер|жалоб|претензи|юрист|договор|возврат денег)/iu'; + /** + * Жёсткие стоп-темы: деньги/скидки/юр-вопросы, просьба человека, а также + * эксклюзивность и перепродажа заявок (коммерчески чувствительно — бот не обсуждает + * ни в какую сторону). Работают всегда. + */ + private const HARD_STOP_PATTERN = '/(' + .'скидк|оператор|человек|менеджер|жалоб|претензи|юрист|договор|возврат денег' + .'|эксклюзив|перепрода' + .'|(ещё|еще)\s+кому|кому(-то)?\s+(ещё|еще)' + .'|только\s+(мне|мо[ияй]|нам|наши|у нас|у меня)' + .'|(заявк|лид|сделк)\w*\s+(?:\S+\s+){0,4}(прода[её]те|отда[её]те|достают)' + .'|(продаёте|продаете|отдаёте|отдаете)\s+(?:\S+\s+){0,4}(заявк|лид|нескольким|друг)' + .'|нескольким' + .')/iu'; + + /** Личные данные клиента («мой баланс», «сколько у меня заявок») — v1 их не знает. */ + private const PERSONAL_PATTERN = '/(' + .'мо[йяеи]\s+(баланс|сч[её]т|деньг|проект|заявк|сделк)' + .'|у меня\s+(?:\S+\s+){0,3}(баланс|сч[её]т|деньг|проект|заявк|сделк)' + .')/iu'; + + /** + * «Как это делается» — вопрос о функции портала, а не о состоянии счёта клиента. + * Снимает ложную эскалацию с «перенести МОИ заявки из амоцрм» (живой урок 12.07.2026). + */ + private const HOWTO_PATTERN = '/(перенест|перенос|импорт|загрузи|выгрузи|экспорт|скача|как\s+(создать|поменять|сменить|настроить|изменить|добавить|удалить))/iu'; private const ESCALATE_TEXT = 'Этот вопрос лучше разберёт живой специалист — передаю ему диалог. Он ответит здесь же.'; @@ -30,7 +54,11 @@ class BotAnswerService */ public function answer(string $question, array $history = []): BotAnswer { - if (preg_match(self::STOP_PATTERN, $question) === 1) { + $isHowTo = preg_match(self::HOWTO_PATTERN, $question) === 1; + $isStop = preg_match(self::HARD_STOP_PATTERN, $question) === 1 + || (! $isHowTo && preg_match(self::PERSONAL_PATTERN, $question) === 1); + + if ($isStop) { return new BotAnswer(self::ESCALATE_TEXT, escalate: true); } diff --git a/app/resources/help/api-i-webhook.md b/app/resources/help/api-i-webhook.md new file mode 100644 index 00000000..c3b0c362 --- /dev/null +++ b/app/resources/help/api-i-webhook.md @@ -0,0 +1,20 @@ +--- +title: API-ключ и приём заявок по webhook +topics: api, апи, ключ, интеграция, webhook, вебхук, подключить свою crm, автоматизация, разработчику +--- + +Для интеграций с вашими системами — «Настройки» → «API и Webhook». + +API-ключ — персональный ключ для запросов в публичный API портала. Показывается +один раз при выпуске: скопируйте и сохраните. Кнопка «Перегенерировать» выпускает +новый ключ, старый перестаёт работать немедленно — обновите его во всех своих +интеграциях. + +Webhook приёма заявок — способ присылать в Лидерру заявки из ваших собственных +источников (например, с вашего сайта): ваш сервер отправляет POST-запрос на +указанный адрес с подписью (HMAC-SHA256, секрет показывается один раз). Повторные +отправки одной и той же заявки в течение суток отсеиваются автоматически — дублей +не будет. Есть кнопка «Тестовый webhook» для проверки связи. + +Если слова «HMAC» и «POST» ни о чём не говорят — просто передайте эту страницу +вашему программисту, там всё стандартно. По вопросам интеграции поможет поддержка. diff --git a/app/resources/help/balans-i-pauza.md b/app/resources/help/balans-i-pauza.md new file mode 100644 index 00000000..f4a28119 --- /dev/null +++ b/app/resources/help/balans-i-pauza.md @@ -0,0 +1,28 @@ +--- +title: Баланс, запас дней и почему приём на паузе +tour: top-up-balance +topics: пауза, приостановлен, заморозка, не хватает баланса, запас, на сколько хватит, приём лидов приостановлен, проект не запущен, разморозка, нулевой баланс, недостаточно средств +--- + +Портал следит, чтобы вы не ушли в минус: на балансе должно хватать денег на дневной +заказ всех активных проектов (сумма их дневных лимитов по вашей цене за заявку). + +Плитка «Запас» в «Биллинге» показывает, на сколько дней хватит баланса при текущем +дневном заказе. Без активных проектов баланс не расходуется и прогноз не считается. + +Чтобы запустить проект, баланса должно хватать на его полный дневной лимит вместе +с остальными активными проектами. Не хватает — проект создаётся на паузе, а портал +показывает окно «Проект не запущен» с точной суммой: пополните примерно на столько-то +или уменьшите объём. + +Если деньги закончились, приём заявок приостанавливается: наверху появляется красная +плашка «Приём лидов приостановлен — не хватает баланса на дневной заказ» с подсказкой, +сколько нужно ещё, а на почту приходит письмо (и напоминания, если пауза затянулась). + +Возобновление — автоматическое и цельное: пополните баланс так, чтобы хватало на весь +дневной заказ, — и всё включится само, разом (и приём, и проекты). Частичное пополнение +паузу не снимает — так сделано, чтобы не было наполовину работающего состояния. +Альтернатива пополнению — уменьшить дневные лимиты или поставить часть проектов +на паузу: тогда дневной заказ станет меньше и денег хватит. + +Ничего не сгорает: заявки, баланс и настройки при паузе сохраняются полностью. diff --git a/app/resources/help/chto-takoe-proekt.md b/app/resources/help/chto-takoe-proekt.md index 86be5a0b..81f6bf1e 100644 --- a/app/resources/help/chto-takoe-proekt.md +++ b/app/resources/help/chto-takoe-proekt.md @@ -1,21 +1,47 @@ --- -title: Что такое проект +title: Что такое проект и как его создать tour: create-project -topics: создать проект, заявка на лиды, источник, сайт конкурента, лимит заявок, новый проект, сделки, откуда заявка +topics: проект, создать проект, новый проект, заявка на лиды, источник, лимит заявок, дневной лимит, регионы, дни приёма, пауза проекта, запустить проект, удалить проект, вся РФ, сайт звонок смс, массовые действия --- -Проект — это ваша заявка на поток клиентов. Вы указываете источник (например, сайт, -похожий на ваш бизнес) и сколько заявок в день хотите получать — а система начинает -присылать вам заявки с контактами. +Проект — это ваша заявка на поток клиентов. Вы указываете источник и сколько заявок +в день готовы принимать, а система начинает присылать вам заявки с контактами. +Количество проектов не ограничено — ограничивает только баланс. -Как создать: раздел «Проекты» → кнопка «Создать проект». Понадобится указать название, -источник и дневной лимит заявок. Второй путь — раздел «Конкурентное поле»: там -искусственный интеллект сам находит конкурентов и их источники, и проект создаётся -из найденного в один клик. +Создание: раздел «Проекты» → кнопка «Создать проект». Второй путь — раздел +«Конкурентное поле»: там из найденного источника конкурента проект создаётся +в один клик. Создание проекта бесплатно — деньги списываются только за +полученные заявки. -Заявки из проекта появляются в разделе «Сделки» — с телефоном и статусом. В таблице -сделок видно, от какого конкурента и с какого источника пришла каждая заявка -(колонки «Конкурент» и «Источник»), а запускать и останавливать проект можно прямо -из карточки сделки. Проект можно поставить на паузу или изменить лимит в любой момент. +Поля проекта: +- Тип источника — Сайт, Звонок или СМС. Сайт — заявки с сайтов вашей ниши + (укажите сайт, похожий на ваш бизнес, — приведём таких же клиентов). Звонок — + звонки на указанный номер (вводите в любом формате — приведём сами). СМС — + заявки по СМС от указанных отправителей, можно задать ключевое слово. Тип + задаётся при создании и потом не меняется; сам адрес или номер поменять можно. +- Название проекта. +- Лимит заявок в день — от 1 до 10 000 (по умолчанию 50). Это сколько заявок + в день вы готовы принимать и оплачивать; менять можно в любой момент. Больше + лимита за день не придёт. +- Регионы — один, несколько или галочка «Вся РФ (все регионы)». +- Дни недели приёма — в какие дни принимать заявки; кнопки «Будни» и «Все дни». -Портал удобно работает и с телефона: основные разделы — в нижних вкладках экрана. +Перед самым первым проектом система попросит короткие реквизиты компании +(тип лица, контактное имя и телефон, ИНН для ИП/юрлица) — прямо в окне создания. + +Запуск: если баланса хватает — проект запускается сразу, иначе создаётся на паузе, +и портал подскажет, сколько пополнить. Статусы карточки проекта: «Собирает заявки», +«Готовим к запуску», «На паузе», «Не запущен — не хватает баланса», +«Приостановлен — не хватает баланса». + +Когда вступают изменения: лимит, регионы и дни приёма начинают действовать +со следующего дня — внесли до 18:00 МСК, значит уже завтра; после 18:00 — +послезавтра. Так происходит потому, что заказ на завтрашний день формируется +накануне вечером. Пауза действует сразу: новые сборы прекращаются, но уже +заказанные на завтра заявки ещё придут — это нормально. + +Пауза и возобновление — в меню карточки проекта («⋮»). Для возобновления нужен +достаточный баланс. Удаление — там же; если по проекту есть сделки или сбор уже +идёт, удаление блокируется: поставьте на паузу, удалить можно будет на следующий +день. Есть массовые действия: выделите несколько проектов — и регионы, дни, лимит, +пауза/запуск или удаление применятся ко всем разом. diff --git a/app/resources/help/dashboard-i-otchety.md b/app/resources/help/dashboard-i-otchety.md new file mode 100644 index 00000000..44ed49b3 --- /dev/null +++ b/app/resources/help/dashboard-i-otchety.md @@ -0,0 +1,23 @@ +--- +title: Дашборд и отчёты — цифры вашего бизнеса +topics: дашборд, главная, статистика, отчёты, конверсия, воронка, график, аналитика, показатели, kpi +--- + +Дашборд — первый экран портала, сводка за выбранный период (сегодня / 7 дней / +30 дней / период вручную): + +- «Получено лидов» — сколько заявок пришло, с сравнением к прошлому периоду; +- «Конверсия в оплату» — доля заявок, по которым прошла оплата (дошедших до + статуса «Сделка»); +- «Активные проекты» — сколько проектов сейчас собирают заявки; +- плитка баланса с прогнозом, на сколько дней хватит; +- график активности по дням и воронка — путь заявок по статусам: новая → + просмотрено → в работе → сделка. Видно, на каком этапе сколько заявок + и где они «застревают». + +Данные обновляются вживую — метка «Live» рядом со сводкой. + +Раздел «Отчёты» — более подробная аналитика по периодам и проектам. + +Средняя стоимость заявки за период показана в шапке дашборда — удобно следить +за экономикой: сколько стоит заявка и какая доля доходит до продажи. diff --git a/app/resources/help/import-dannyh.md b/app/resources/help/import-dannyh.md new file mode 100644 index 00000000..745147ba --- /dev/null +++ b/app/resources/help/import-dannyh.md @@ -0,0 +1,19 @@ +--- +title: Импорт своих заявок из CSV +topics: импорт, перенести заявки, загрузить базу, csv, выгрузка из другой crm, исторические заявки, миграция данных, амосрм, амоцрм, amocrm, битрикс, bitrix, из другой системы, перенести клиентов, залить базу +--- + +Если у вас есть база заявок из другой системы — её можно перенести в Лидерру. +Раздел «Импорт данных» (на телефоне — в меню «Ещё»). + +Формат: CSV-файл в кодировке UTF-8, размером до 10 МБ. Есть галочка «Пробный +прогон» — файл проверится без записи сделок: удобно убедиться, что всё читается, +прежде чем загружать по-настоящему. + +После загрузки виден прогресс и итог: сколько заявок добавлено, обновлено, +пропущено. Если в файле встретились статусы, которых нет в воронке Лидерры, +портал предложит «Замапить» — сопоставить каждый незнакомый статус с одним +из наших пяти. История всех импортов сохраняется на этой же странице. + +Импортированные заявки бесплатны — списания только за новые заявки, которые +приносит система. diff --git a/app/resources/help/kak-popolnit-balans.md b/app/resources/help/kak-popolnit-balans.md index 14dff54a..14ed42a1 100644 --- a/app/resources/help/kak-popolnit-balans.md +++ b/app/resources/help/kak-popolnit-balans.md @@ -1,16 +1,31 @@ --- title: Как пополнить баланс tour: top-up-balance -topics: пополнить, закинуть деньги, оплата, счёт, платёж, банковская карта, безнал, пополнение баланса, счёт на оплату, акт, подарок при регистрации +topics: пополнить, закинуть деньги, оплата, счёт, платёж, банковская карта, безнал, пополнение баланса, счёт на оплату, акт, подарок при регистрации, минимальная сумма, сбп, юкасса --- -Пополнить баланс: раздел «Биллинг» → кнопка «Пополнить». Для юридических лиц и ИП -работает оплата по счёту: система выставит PDF-счёт, после оплаты деньги зачислятся -автоматически, а закрывающий акт придёт на почту. Выставленные счета видны во вкладке -«Счета» раздела «Биллинг». +Пополнить баланс: раздел «Биллинг» → кнопка «Пополнить». Минимальная сумма — 100 ₽, +максимальная — 1 000 000 ₽; есть быстрые кнопки 1 000 / 5 000 / 10 000 / 25 000 ₽. -Новым клиентам при регистрации мы дарим 1000 ₽ на баланс — можно сразу попробовать -портал в деле, ничего не платя. +Два способа: +- Картой или СБП онлайн — после оплаты баланс обновится автоматически в течение + минуты. Если после оплаты видите надпись «Платёж обрабатывается» — это нормально, + просто подождите чуть-чуть. +- По счёту (для юридических лиц и ИП) — выберите «По счёту», система сформирует + PDF-счёт по реквизитам вашей компании. Оплатите его банковским переводом — баланс + пополнится после поступления денег, а закрывающий акт сформируется автоматически. + Выставленные счета и акты — во вкладке «Биллинг» → «Счета». -Баланс и историю всех операций (пополнения и списания) видно в разделе «Биллинг», -списания по каждой заявке — во вкладке «Списания». +Для оплаты по счёту нужны заполненные реквизиты компании — раздел «Настройки» → +«Реквизиты» (название подставится по ИНН автоматически). + +Новым клиентам при регистрации мы дарим 1000 ₽ на баланс — стартовый бонус +зачисляется после подтверждения почты, можно сразу попробовать портал в деле. + +Баланс и историю всех операций видно в разделе «Биллинг»: плитки «Кошелёк ₽» +(текущая сумма), «≈ Лиды» (на сколько заявок хватит по текущей цене) и «Запас» +(на сколько дней хватит при текущем дневном заказе). История пополнений +и списаний — в «Истории транзакций», списания по каждой заявке — во вкладке +«Списания». + +Если возникли трудности с оплатой — напишите в поддержку, поможем. diff --git a/app/resources/help/konkurentnoe-pole.md b/app/resources/help/konkurentnoe-pole.md index e3f5d03a..c5c6a64b 100644 --- a/app/resources/help/konkurentnoe-pole.md +++ b/app/resources/help/konkurentnoe-pole.md @@ -1,41 +1,61 @@ --- -title: Конкурентное поле — автоподбор конкурентов +title: Конкурентное поле — конкуренты и их источники tour: konkurentnoe-pole -topics: конкурентное поле, автоподбор, найти конкурентов, собрать конкурентов, собрать источники, изучение конкурента, откуда лиды, радар, добавить конкурента вручную, руками, самому, самостоятельно, без ИИ, бесплатно, объединить дубли, дубликаты, почистить поле, одинаковые конкуренты +topics: конкурентное поле, автоподбор, найти конкурентов, собрать конкурентов, собрать источники, изучение конкурента, откуда лиды, радар, добавить конкурента вручную, руками, самому, самостоятельно, без ИИ, бесплатно, объединить дубли, дубликаты, почистить поле, одинаковые конкуренты, похожесть, предложения, очередь, федеральный, подменный номер --- «Конкурентное поле» — раздел, где искусственный интеллект находит ваших конкурентов и их источники клиентов, а вы превращаете найденное в свои проекты. Пункт меню -«Конкурентное поле» слева (значок радара). +«Конкурентное поле» слева (значок радара), на телефоне — вкладка «Поле». -Как это работает, по шагам. Сначала сбор конкурентов: нажмите «Собрать конкурентов -для меня», укажите, чем занимаетесь и где — система найдёт похожие фирмы. Сбор стоит -300 ₽ за подбор, деньги списываются только если что-то нашли; пустой результат — бесплатно. +Устройство раздела: две вкладки. «В поле» — конкуренты, которых вы взяли в работу. +«Предложения» — то, что нашла Лидерра: вы сами решаете, кого перенести в поле, +а кого удалить. У каждого конкурента — процент похожести на вас (100% сверху), +тип «региональный» или «федеральный», сайт и ссылки на справочники (2ГИС, +Яндекс.Карты), счётчики источников и проектов. -Дальше изучение: у каждого конкурента можно нажать «Собрать источники для меня» — -система вскроет его сайты и телефоны, по которым к нему идут клиенты. Изучение одного -конкурента платное (цена показана в окне запуска); списание — только если источники -нашлись. Повторный сбор по уже изученному конкуренту оплачивается за работу, даже если -нового не найдётся, но уже найденное не задваивается и работающие источники не трогаются. +Шаг 1 — сбор конкурентов: кнопка «Собрать конкурентов для меня». Опишите простыми +словами, чем занимаетесь, укажите регион (один за один подбор), свой сайт (чтобы +не предложить вас самих) и 2–5 примеров известных вам конкурентов с сайтами или +ссылками на 2ГИС/Яндекс.Карты — чем больше примеров, тем точнее подбор. Можно +включить и федеральных игроков. Цена — 300 ₽ за подбор; деньги списываются только +если что-то нашли, пустой результат — бесплатно. Найденное ложится в «Предложения». -Можно изучать пачкой: отметьте несколько конкурентов и нажмите «Собрать источники (N)» — -задания встанут в очередь и выполнятся по очереди. Если на балансе не хватает на всю -пачку, система подскажет: пополнить или уменьшить выборку. +Шаг 2 — изучение: у конкурента нажмите «Собрать источники для меня» — система +найдёт его сайты и телефоны, по которым к нему идут клиенты. Цена — 50 ₽ +за изучение; списание только если источники нашлись. Повторный сбор по уже +изученному конкуренту оплачивается за работу, даже если нового не найдётся, +но уже найденное не задваивается, работающие источники не трогаются, а то, +что вы удаляли, система предложит вернуть. -Можно и без искусственного интеллекта, руками — это бесплатно. На экране «Конкурентного -поля» есть кнопка «+ Добавить вручную»: вписываете название конкурента, тип (местный или -федеральный), при желании описание и его точки — названия, сайты, ссылки на карточки -(2ГИС, Яндекс Карты). Такой конкурент появляется в поле рядом с найденными автоматически, -его карточку можно менять кнопкой «Изменить». Источники у конкурента тоже добавляются -вручную на его странице — «добавьте источник вручную». Платный ИИ-сбор нужен только когда -хотите, чтобы система сама нашла конкурентов или вскрыла их сайты и телефоны. +Можно пачкой: отметьте несколько конкурентов и нажмите «Собрать источники (N)» — +задания встанут в честную очередь (видно «Вы в очереди: №N») и выполнятся сами, +страницу можно закрыть. Если баланса на всю пачку не хватает, портал подскажет: +пополнить на сколько-то или уменьшить выборку. -«Найти и объединить дубли» (кнопка с метёлкой 🧹 на экране поля) — уборка одинаковых -карточек. Один и тот же конкурент может попасть в поле дважды: например, вы добавили его -руками, а потом его же нашёл автоподбор. Система находит такие пары-двойники и показывает -их вам группами; вы смотрите и подтверждаете — подтверждённые склеиваются в одну карточку, -ничего не теряется. Без вашего подтверждения ничего не объединяется и не удаляется. -Это бесплатно. На кнопке виден счётчик — сколько групп дублей найдено. +У каждого найденного номера — метка, как его читать: «✓ настоящий номер» — живой +номер фирмы; «🎭 рекламный подменный» — номер из рекламы, он меняется, в работу +брать не стоит; «⚠ на сайте — проверьте» — найден в тексте сайта, позвоните +и убедитесь. Рядом — «где нашли»: ссылка, по которой можно проверить самому. -Из найденного источника в один клик создаётся проект — дальше он работает как обычный -проект и приносит заявки в раздел «Сделки». +Можно и без ИИ, руками — бесплатно. Кнопка «+ Добавить вручную»: название, тип +(региональный/федеральный), похожесть на ваше усмотрение, описание и точки — +названия, сайты, ссылки на карточки. Источник конкуренту тоже добавляется +вручную на его странице: сайт или телефон + пометка, где вы его нашли. + +«Найти и объединить дубли» (кнопка 🧹) — уборка одинаковых карточек: один и тот же +конкурент мог попасть в поле дважды (добавили руками, а потом нашёл ИИ). Система +показывает пары-двойники группами, вы подтверждаете — подтверждённые склеиваются +в одну карточку. Без вашего решения ничего не объединяется и не удаляется. +Бесплатно; на кнопке — счётчик найденных групп. Ошиблись — «История слияний» +вернёт карточку назад. + +Из источника проект создаётся в один клик: кнопка «Создать проект», укажите +регионы, дневной лимит и дни приёма. Создание бесплатно — деньги только +за полученные заявки. Дальше проект работает как обычный и приносит заявки +в «Сделки» — там в колонках «Конкурент» и «Источник» видно, откуда пришла +каждая заявка. + +Удалённое не пропадает навсегда: удалённые конкуренты и источники можно вернуть +из «Ранее удалённых» и «Истории слияний». Если по источнику работает активный +проект — сначала остановите проект, потом удаляйте. diff --git a/app/resources/help/mobilnaya-versiya.md b/app/resources/help/mobilnaya-versiya.md new file mode 100644 index 00000000..2799bdc6 --- /dev/null +++ b/app/resources/help/mobilnaya-versiya.md @@ -0,0 +1,19 @@ +--- +title: Портал на телефоне +topics: телефон, мобильная версия, смартфон, приложение, с телефона, нижние вкладки, мобильный +--- + +Портал полноценно работает с телефона — отдельное приложение не нужно, просто +откройте lk.liderra.ru в браузере. + +Внизу экрана — пять главных вкладок: «Поле» (Конкурентное поле), «Проекты», +«Сделки», «Биллинг», «Канбан». Остальные разделы — в меню «Ещё» (значок ☰): +Дашборд, Отчёты, Настройки, Импорт данных, Помощь. + +С телефона удобно: смотреть новые заявки и звонить по ним в один тап, менять +статусы (в «Канбане» — одна колонка с переключателем этапов), ставить проекты +на паузу и запускать, пополнять баланс, отвечать на уведомления. + +Полная функциональность — на компьютере: некоторые редкие операции на телефоне +упрощены. Всё, что вы делаете с телефона, мгновенно видно на компьютере +и наоборот — это один и тот же кабинет. diff --git a/app/resources/help/nachalo-raboty.md b/app/resources/help/nachalo-raboty.md new file mode 100644 index 00000000..4fa25546 --- /dev/null +++ b/app/resources/help/nachalo-raboty.md @@ -0,0 +1,38 @@ +--- +title: С чего начать — регистрация и первые заявки +tour: create-project +topics: начать, регистрация, как зарегистрироваться, первые шаги, подарок, бонус, 1000 рублей, подтверждение почты, с чего начать, новичок, старт, код из письма, что такое заявка, что такое лид, откуда заявки, откуда лиды, как работает сервис +--- + +Лидерра — сервис получения заявок (лидов) с оплатой за результат: вы пополняете баланс +и платите только за переданные вам заявки. Абонентской платы и скрытых комиссий нет. + +Что такое заявка (лид): это контакт человека, который прямо сейчас интересуется +услугой в вашей нише. Вы указываете в проекте источник — сайт или телефон, по теме +которых к конкурентам идут клиенты, — и система приводит вам таких же клиентов. +Каждая переданная заявка приходит в раздел «Сделки» с телефоном, городом +и источником, и за неё списывается фиксированная цена. + +Регистрация: укажите рабочий email и пароль (минимум 8 символов), примите оферту +и политику обработки персональных данных. На почту придёт 6-значный код — введите +его, и аккаунт активируется. Не пришло — проверьте спам; повторную отправку можно +запросить через 30 секунд. + +Подарок новичку: после подтверждения почты на баланс автоматически зачисляется +стартовый бонус 1000 ₽ — можно сразу попробовать получать заявки. В истории +транзакций он виден как «Стартовый бонус». + +Три шага до первых заявок: +1. Пополните баланс — раздел «Биллинг» → «Пополнить» (минимум 100 ₽). +2. Создайте проект — укажите, по какому сайту или телефону собирать клиентов + и сколько заявок в день нужно. Перед первым проектом система попросит короткие + реквизиты (тип лица, имя, телефон, ИНН для ИП/юрлица) — это пара минут. +3. Готово: проект встаёт в сбор, заявки идут со следующего дня и появляются + в разделе «Сделки» — с телефоном, источником и статусом. + +Почему заявки со следующего дня: заказ на завтрашний день формируется накануне +вечером. Всё, что вы создали или изменили до 18:00 МСК, начинает работать уже +завтра; после 18:00 — послезавтра. + +При первом входе портал показывает короткий тур-подсказку по разделам. Если +запутались — раздел «Помощь»: частые вопросы, форма заявки и чат с поддержкой. diff --git a/app/resources/help/nastroiki-i-bezopasnost.md b/app/resources/help/nastroiki-i-bezopasnost.md new file mode 100644 index 00000000..450b0a2d --- /dev/null +++ b/app/resources/help/nastroiki-i-bezopasnost.md @@ -0,0 +1,31 @@ +--- +title: Настройки — профиль, реквизиты, безопасность +topics: настройки, профиль, реквизиты, инн, сменить пароль, двухфакторная, 2фа, 2fa, резервные коды, сессии, почта аккаунта, тайм-зона, безопасность +--- + +Раздел «Настройки» — вкладки: Профиль, Реквизиты, Безопасность, API и Webhook, +Уведомления. + +Профиль: имя, фамилия, телефон, тайм-зона. Email аккаунта самостоятельно поменять +нельзя — он связан со входом; для смены напишите в поддержку. + +Реквизиты: нужны, чтобы создать первый проект (тип лица, контактное имя, телефон, +ИНН для ИП/юрлица). Название организации подставится по ИНН автоматически — или +введите вручную. Для оплаты по счёту заполняются полные реквизиты (КПП, ОГРН, +адрес, банк, БИК, счета) — блок «Реквизиты для оплаты», можно позже. + +Безопасность: +- Смена пароля — новый пароль не короче 10 символов (при регистрации минимум был 8; + при смене требования строже). +- Двухфакторная защита (2FA) — подключается за минуту: отсканируйте QR-код + приложением (Google Authenticator, Yandex Key, 1Password и другие) и введите + 6-значный код. После включения система выдаст 8 резервных кодов — сохраните их, + они показываются один раз и выручат, если потеряете телефон. Коды можно + перевыпустить. +- Активные сессии — список устройств, с которых выполнен вход (устройство, IP, + время); любую чужую сессию можно завершить. О входе с незнакомого устройства + придёт письмо. + +Вход в портал: email + пароль, при включённой 2FA — ещё 6-значный код или резервный +код. Забыли пароль — «Забыли пароль?» на странице входа: пришлём ссылку для сброса +(действует 60 минут; лимит — 5 попыток в 15 минут, проверьте спам). diff --git a/app/resources/help/podderzhka.md b/app/resources/help/podderzhka.md new file mode 100644 index 00000000..5096eda3 --- /dev/null +++ b/app/resources/help/podderzhka.md @@ -0,0 +1,21 @@ +--- +title: Поддержка — как с нами связаться +topics: поддержка, помощь, связаться, написать, чат, оператор, техподдержка, вопрос, проблема, жалоба, человек +--- + +Раздел «Помощь» — три способа связаться: +- Чат — окошко в правом нижнем углу портала: пишите, консультант ответит; + при необходимости диалог подхватит живой специалист. +- Форма «Оставить заявку» — имя, контакт (телефон или email) и сообщение; + мы свяжемся по указанному контакту. +- Почта — support@liderra.ru. + +Там же, в «Помощи», — ответы на частые вопросы: что такое заявка, сколько стоит, +как начать, почему списались деньги, почему приём на паузе. + +Если поддержке нужно посмотреть ваш кабинет изнутри, чтобы разобраться в проблеме, +вход выполняется только с вашего разрешения — по коду, который придёт вам +на почту; о начале и завершении такого входа вы получите письма. + +Вопросы про деньги на вашем счёте, возвраты и спорные заявки решает живой +специалист поддержки — опишите ситуацию, разберёмся индивидуально. diff --git a/app/resources/help/sdelki-i-kanban.md b/app/resources/help/sdelki-i-kanban.md new file mode 100644 index 00000000..e12c5f66 --- /dev/null +++ b/app/resources/help/sdelki-i-kanban.md @@ -0,0 +1,32 @@ +--- +title: Сделки и Канбан — работа с заявками +topics: сделки, заявки, лиды, канбан, доска, статусы, воронка, экспорт, эксель, фильтры, комментарий, телефон клиента, поменять статус, город, поставлен +--- + +Все полученные заявки живут в разделе «Сделки» — таблицей, и в «Канбане» — карточками +по статусам. Это одни и те же заявки в разном виде: выбирайте, как удобнее. + +Колонки таблицы «Сделки»: Телефон, Конкурент (от какого конкурента пришла заявка, +если проект создан через «Конкурентное поле»), Источник (с какого источника), +Город, Статус, Комментарий, Поставлен (дата и время). По телефону и дате можно +сортировать. Фильтры: поиск по телефону, статус, проект, город, диапазон дат. + +Статусы воронки — пять: +- «Новая сделка» — заявка только поступила; +- «Просмотрено» — вы открыли заявку (ставится автоматически); +- «В работе» — менеджер ведёт заявку; +- «Сделка» — успех, закрыто в продажу; +- «Не реализовано» — не сконвертировалась. + +Статус меняется: в карточке заявки, перетаскиванием карточки между колонками +в «Канбане», или массово — выделите несколько строк в «Сделках» и выберите статус. + +В карточке заявки: телефон, проект, стоимость этой заявки, тип, источник, город, +поле «Комментарий» для заметок менеджера (до 5000 символов) и история событий. + +Экспорт: в «Сделках» задайте диапазон дат поставки и нажмите «Экспорт в Excel» +или «Экспорт в CSV» — файл со всеми заявками выборки. + +На телефоне «Канбан» показывает одну колонку с переключателем этапов, статус +меняется через карточку. Заявки приходят с уведомлением — колокольчик в шапке +и, если включено, письмо на почту. diff --git a/app/resources/help/smena-istochnika.md b/app/resources/help/smena-istochnika.md new file mode 100644 index 00000000..fc2058dd --- /dev/null +++ b/app/resources/help/smena-istochnika.md @@ -0,0 +1,21 @@ +--- +title: Смена источника проекта +tour: change-source +topics: сменить источник, поменять сайт, поменять номер, другой источник, смена источника, заявки не потеряются, старый источник +--- + +Источник у проекта можно сменить без потери заявок: откройте проект в разделе +«Проекты» → «Редактировать» и укажите новый адрес сайта, номер телефона или +отправителей СМС. + +Меняется только сам адрес/номер — тип источника (Сайт, Звонок, СМС) задан при +создании и не меняется. Нужен другой тип — создайте отдельный проект. + +Как это работает по времени: заказ на завтра формируется накануне вечером, поэтому +если сбор по старому источнику уже запущен, портал попросит подтвердить смену +и предупредит: заявки по старому источнику ещё придут до определённой даты +(они ваши и оплачиваются как обычно), а дальше пойдут уже по новому источнику. +Ничего не пропадает и не задваивается. + +Изменение вступает в силу со следующего дня: внесли до 18:00 МСК — завтра, +после 18:00 — послезавтра. diff --git a/app/resources/help/tarify-i-spisaniya.md b/app/resources/help/tarify-i-spisaniya.md index 680005ad..037eb86e 100644 --- a/app/resources/help/tarify-i-spisaniya.md +++ b/app/resources/help/tarify-i-spisaniya.md @@ -1,14 +1,30 @@ --- -title: Тарифы и списания +title: Тарифы и списания — сколько стоит заявка tour: tariffs -topics: сколько стоит, цена заявки, цена лида, тариф, списание, деньги, стоимость, оплата за лид +topics: сколько стоит, цена заявки, цена лида, тариф, тарифные ступени, списание, деньги, стоимость, оплата за лид, комиссия, дешевле, ступень --- -Вы платите только за полученные заявки — абонентской платы нет. Деньги списываются -с баланса за каждую доставленную заявку по вашей тарифной ступени. +Вы платите только за полученные заявки — абонентской платы и скрытых комиссий нет. +Деньги списываются с баланса в момент, когда заявка приходит к вам, по цене вашей +текущей тарифной ступени. Ничего не резервируется заранее. -Тарифная ступень зависит от объёма: чем больше заявок в месяц, тем дешевле каждая. -Актуальные цены — раздел «Биллинг» → «Тарифы». +Цена за заявку зависит от объёма: всего 7 тарифных ступеней, чем больше заявок +вы получаете за месяц — тем дешевле каждая следующая. Ступени применяются +накопительно в течение календарного месяца. Свою текущую цену и ступень видно +в разделе «Биллинг» → панель «Цены за лид»: там отмечено «вы здесь» и сколько +заявок до следующей ступени. -Если на балансе не хватает денег на очередную заявку, проекты автоматически встают -на паузу — ничего не сгорает, после пополнения работа продолжается. +Каждое списание видно во вкладке «Биллинг» → «Списания»: дата, ссылка на сделку, +ступень и цена. Выборку за период можно скачать в CSV. Пополнения и списания +вместе — в «Истории транзакций». + +Стоимость конкретной заявки также показана в её карточке в разделе «Сделки» +(поле «Стоимость лида»). + +Отдельно оплачиваются только добровольные услуги «Конкурентного поля» (сбор +конкурентов и сбор источников) — и там деньги списываются только при успешном +результате. Создание проектов бесплатно. + +Если на балансе не хватает денег, приём заявок автоматически приостанавливается — +в минус вы не уйдёте, ничего не сгорает. После пополнения работа продолжается +автоматически. diff --git a/app/resources/help/uvedomleniya.md b/app/resources/help/uvedomleniya.md new file mode 100644 index 00000000..fc9fb972 --- /dev/null +++ b/app/resources/help/uvedomleniya.md @@ -0,0 +1,24 @@ +--- +title: Уведомления — колокольчик и письма +tour: notifications +topics: уведомления, колокольчик, письма, оповещения, новый лид на почту, дайджест, звук, отключить уведомления, включить уведомления +--- + +Уведомления приходят двумя каналами: в приложении (колокольчик в шапке портала) +и письмом на почту. Что и куда присылать — настраивается в «Настройки» → +«Уведомления»: там таблица «событие × канал», отметьте нужные галочки. + +События: +- Новый лид — поступила новая заявка (клик по уведомлению открывает её карточку); +- Низкий баланс — осталось меньше 3 дней работы по текущим ценам; +- Нулевой баланс — приём заявок приостановлен, нет средств; +- Пополнение успешно — платёж зачислен на баланс; +- Счёт оплачен — оплата по счёту поступила; +- Новое устройство — вход в аккаунт с незнакомого устройства или IP; +- Анонсы и промо — новости платформы и новые функции. + +Можно включить звуковой сигнал при новом уведомлении в приложении. + +Письма приходят также о важных состояниях: приостановке и возобновлении приёма +заявок, готовности результата «Конкурентного поля», завершении импорта. Если писем +много — оставьте только нужные события или получайте сводки дайджестом. diff --git a/app/tests/Feature/Bot/BotAnswerServiceTest.php b/app/tests/Feature/Bot/BotAnswerServiceTest.php index 210a9296..1423097a 100644 --- a/app/tests/Feature/Bot/BotAnswerServiceTest.php +++ b/app/tests/Feature/Bot/BotAnswerServiceTest.php @@ -100,6 +100,42 @@ it('LLM ответил «в инструкции этого нет» → чес ->and($answer->text)->toContain('живому специалисту'); }); +it('вопрос про эксклюзивность заявок → эскалация без похода в LLM', function () { + Http::fake(); + + $variants = [ + 'а заявки эксклюзивные или как?', + 'вы эти лиды кому-то ещё продаёте?', + 'эти заявки только мои или вы их ещё кому-то отдаёте?', + 'заявки достаются только мне?', + 'вы одну заявку нескольким продаёте?', + ]; + foreach ($variants as $q) { + expect(app(BotAnswerService::class)->answer($q)->escalate)->toBeTrue(); + } + Http::assertNothingSent(); +}); + +it('«перенести МОИ заявки из другой CRM» → это про функцию импорта, а не личные данные', function () { + // Живой урок 12.07.2026: стоп-тема ловила «мои заявки» и уводила к человеку вопрос + // про импорт. Слова «перенести/импорт» — признак вопроса «как это делается». + KnowledgeChunk::create([ + 'source_path' => 'help/i.md', 'title' => 'Импорт своих заявок из CSV', 'tour' => null, + 'topics' => 'импорт, перенести заявки, амоцрм', 'chunk_index' => 0, + 'content' => 'Базу заявок из другой системы можно перенести: раздел «Импорт данных», файл CSV.', + ]); + Http::fake([ + 'llm.api.cloud.yandex.net/*' => Http::response([ + 'result' => ['alternatives' => [['message' => ['role' => 'assistant', 'text' => 'Да, через «Импорт данных» — файл CSV.']]]], + ]), + ]); + + $answer = app(BotAnswerService::class)->answer('можно перенести мои заявки из амоцрм?'); + + expect($answer->escalate)->toBeFalse() + ->and($answer->text)->toContain('Импорт данных'); +}); + it('просьба позвать человека → эскалация', function () { Http::fake(); diff --git a/app/tests/Feature/Bot/HelpRebuildKnowledgeCommandTest.php b/app/tests/Feature/Bot/HelpRebuildKnowledgeCommandTest.php index ad1670cd..9b273c25 100644 --- a/app/tests/Feature/Bot/HelpRebuildKnowledgeCommandTest.php +++ b/app/tests/Feature/Bot/HelpRebuildKnowledgeCommandTest.php @@ -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); });