Долгое время на всех лендингах и на основном сайте стоял Replain. Он работал, но был чужим: один и тот же виджет на всех страницах, без понимания контекста, с отдельной системой заявок и без нормальной связки с моими услугами.
В итоге сделал своего помощника. Теперь на всех шести лендингах и на krivoshein.site стоит один и тот же AI-чат, который знает, на какой странице человек находится, отвечает по теме и умеет оставлять заявку сразу в мой MAX-канал.
Зачем вообще менять
Replain решал базовую задачу — дать человеку возможность написать. Но на практике было несколько раздражающих моментов:
- виджет ничего не знал про конкретный лендинг;
- заявки жили в отдельной системе;
- не было нормальной связи с тарифами и услугами;
- на мобильном он часто мешал;
- приходилось поддерживать два разных канала общения.
Хотелось одного помощника, который понимает контекст и сразу работает с моей существующей инфраструктурой.
Что получилось
Помощник сделан на базе уже существующего Python-бэкенда (тот же, что обслуживает бота в MAX). Сверху добавлен лёгкий JS-виджет.
Основные возможности:
- понимает, на каком лендинге открыт (bots, vps, direct, wordpress, landing, ai-ready или основной сайт);
- приветствует и отвечает по теме страницы;
- знает актуальные тарифы из llms.txt;
- умеет оставлять заявку — она приходит в MAX-канал;
- поддерживает русский и английский;
- подстраивается под светлую и тёмную тему;
- на мобильном старается не мешать (скрывает нижние CTA, когда открыт, корректно работает с клавиатурой).
Как устроена подача знаний
Основной источник правды — llms.txt. На главном сайте лежит полный вариант, на каждом лендинге — более короткий и заточенный под услугу.
Виджет при открытии запрашивает bootstrap с указанием текущего host. Бэкенд подмешивает нужный контекст в system prompt. Поэтому на bots.krivoshein.site помощник говорит про ботов, а на vps — про серверы.
Мобильный UX
Самое больное место оказалось на телефоне. Когда появляется клавиатура, места катастрофически мало.
Что сделали:
- на мобильном убрали quick-replies, чтобы освободить пространство;
- при открытии панели скрывается нижняя полоса кнопок (.mobile-cta-bar);
- используется visualViewport, чтобы панель корректно сжималась под клавиатуру;
- поле ввода старается оставаться видимым.
Идеально ещё не везде, но уже можно нормально писать, а не ловить поле где-то за клавиатурой.
Защита от спама
Раз виджет теперь торчит и на публичном GitHub Pages, пришлось добавить простые ограничения:
- rate-limit по IP;
- не больше 10 заявок с одного IP в сутки;
- honeypot-поле;
- CORS только на свои домены.
Для обычного человека лимиты с большим запасом. Для того, кто захочет долбить API — уже неприятно.
Где сейчас стоит
- ai-ready.krivoshein.site
- bots.krivoshein.site
- direct.krivoshein.site
- landing.krivoshein.site
- vps.krivoshein.site
- wordpress.krivoshein.site
- krivoshein.site
- drslon.ru (GitHub Pages)
Replain со всех этих мест убран.
Что ещё можно улучшить
Пока живой список:
- ещё чуть дожать мобильный UX формы заявки;
- сделать ответы на главном сайте живее (меньше шаблонов на простые реплики);
- добавить кликабельные ссылки в ответах, если где-то ещё остались plain-text URL;
- продумать единый способ обновления версии виджета (скрипт уже есть на сервере).
Вывод
Свой помощник оказался удобнее чужого виджета. Главное — он сидит на той же инфраструктуре, что и MAX-бот, знает контекст страницы и не плодит лишние системы.
Пока это рабочий MVP. Буду дальше тестировать на реальных обращениях и подчищать мелочи.