Неделя 143. Один продукт, два домена

Неделя 143. Один продукт, два домена

Это сто сорок третья неделя с момента, как мы запустили Botseller в августе 2023 года. Прошлый понедельник я описывал переход от платформы к экосистеме - три параллельных продукта из одной инфраструктуры. Эта неделя оказалась её прямым продолжением и проверкой на прочность: мы взяли готовую экосистему и перенесли её в новую географическую плоскость. Один продукт - два домена, две юрисдикции, два маркетинговых стека, единая кодовая база. За семь дней через main прошло около 45 содержательных feature-веток в восьми репозиториях, и больше половины из них - про эту мульти-доменность.

Меня зовут Дмитрий Дьяконов, я основатель и CEO Botseller AI. Если читаете журнал впервые - короткий контекст: мы делаем SaaS-платформу с ИИ-продавцом, CRM и рассылками в 15 мессенджерах, плюс рядом стоят Botseller Academy (обучающая платформа) и Clubator (движок клубов по подписке). Каждый понедельник я пишу честный лог: что смержили в main, что сломали, какие гипотезы закрыли. Поехали.

Пульс недели: что в цифрах

Пульс 143-й недели Botseller: 45 feature-веток в 8 репозиториях по направлениям мульти-домена, Clubator, CRM, CommandFlow и Academy

Цифры для тех, кто любит цифры. Я свёл активность по ключевым репозиториям к одной таблице. Чем больше веток в направлении - тем больше ресурса команды туда ушло на этой неделе. Главное смещение по сравнению со 142-й - почти весь фокус собрался вокруг двух тем: мульти-доменности и стабилизации Clubator после боевого использования.

НаправлениеMerged ветокОсновной фокус недели
Мульти-домен сайта15+botseller.ru на Selectel, getSiteUrl, hreflang, MdxLink, llms.txt per-domain
Botseller Academy4Урок 6.2 «Холодный аутрич без бана», урок 8.4 «Дуальный SaaS» + слайды + аудио
Clubator Followup6Человекочитаемые ошибки, фикс одиночного фото, ссылки в выделение, автопометка недоступных
Clubator брендинг3Уникальный favicon «кубики», PNG в трёх размерах, логотип
CommandFlow + Telegram5Приватные чаты с инвайт-ссылкой, схема миссий, обновление chat_id, развилка выхода
CRM-ядро + платформа3Нода ветвления для автоматических ботов, sync dialog_cols воронок
Тех.админка2use_workhours для ботов, две новые таблицы рабочих часов и выходных
NGL и техадминка1Управление заявками NGL для админов на платформе
SEO-связка двух брендов4Person cross-link Botseller↔Clubator, worksFor fix, jobTitle

Суммарно это около 45 уникальных feature-веток, прошедших через merge request в main за семь дней. Темп ниже, чем на 142-й (там было ~60), но это закономерно: одна большая архитектурная задача почти всегда «съедает» количество мелких фич, потому что её сложно нарезать на параллельные ветки. Зато результат - физическое разделение продукта на две независимые витрины с одной кодовой базой, и я считаю это одним из самых важных шагов года.

Один продукт, два домена: что мы сделали и зачем

Бизнес-вызов мульти-домена Botseller: барьеры botseller.ai в РФ-сегменте против локализации botseller.ru и доверия крупных юрлиц

Главная техническая работа недели прошла в нашей кодовой базе сайта - там живут лендинг, блог и документация. К концу недели Selectel поднял для нас второй контур: тот же код, та же база контента, но другой домен, другой язык по умолчанию, другие юридические тексты, другие телефоны контактов и другая аналитика. Внутри это устроено так: один репозиторий, две ветки CI-пайплайна (build/deploy для .ai и build/deploy для .ru), два docker-стека, два nginx-конфига. Никакого форка кода - всё переключается через build-аргументы NEXT_PUBLIC_SITE и NEXT_PUBLIC_LANGUAGE, которые пробрасываются во все Dockerfiles на этапе сборки.

Зачем это нужно. У нас есть международная история бренда на домене botseller.ai - туда уходят все международные клиенты, англоязычный SEO-кластер и интеграции с зарубежными мессенджерами. Но российский корпоративный сегмент категорически не любит .ai-домены. Закупка через тендеры, требования к локализации, доверие банков и эквайеров, рекламные кабинеты Яндекса - всё это работает гораздо мягче, когда у вас есть полноценный .ru-домен (плюс кириллический ботселлер.рф для тех, кто любит кириллицу в адресной строке). Раньше мы откладывали этот переезд: казалось, дублировать сайт - это огромная работа. На этой неделе мы её сделали.

Матрица витрин дуального SaaS Botseller: две юрисдикции с разными реквизитами, языком, Punycode-доменом и одной кодовой базой

Технически самым сложным было не поднять второй контур, а аккуратно почистить старый код. У нас по всему проекту были захардкоженные ссылки https://botseller.ai/... - в React-компонентах, в MDX-статьях, в structured data, в OG-метаданных. Их надо было заменить на функцию getSiteUrl(), которая возвращает текущий домен в зависимости от build-аргументов. Параллельно мы написали MdxLink - компонент, который автоматически подменяет домен в hardcoded ссылках внутри MDX (потому что переписывать вручную 60 статей блога никто не будет). За один день мы прошлись по landing, blog, docs и academy и заменили все жёсткие URL на динамические.

Архитектура Dual-Core SaaS Botseller: одна кодовая база, два CI/CD пайплайна, два Docker-стека, два nginx-конфига без форка кода

Дальше - SEO-безопасность. Если запустить второй домен с теми же текстами, что и первый - получишь дубль контента, и Google со счастливой улыбкой выкинет один из них из индекса. Чтобы этого не случилось, мы сделали три вещи. Первое: правильный hreflang через хелпер getAlternates в blog, docs и landing/solutions - чтобы поисковики понимали, что страница на .ru и страница на .ai - это региональные версии одного и того же. Второе: разделили /contacts и /about по регионам - на .ru стоят российские реквизиты ООО «Ботселлер», российский телефон и российский адрес, на .ai - международная версия. Третье: динамические llms.txt и llms-full.txt per-domain - LLM-краулеры (ChatGPT, Perplexity, Яндекс.Нейро) теперь получают свою версию манифеста для каждого домена, без перекрёстного загрязнения.

SEO-щит мульти-домена: три линии защиты от каннибализации - hreflang getAlternates, изоляция /contacts и /about, динамические llms.txt per-domain

Был отдельный страх: что в процессе мульти-доменной чистки мы сломаем существующий .ai. У нас в Search Console уже накоплены позиции, есть индексация, есть наработанная семантика - и любая регрессия в meta-тегах, structured data или robots.txt означает потерю трафика. Поэтому мы написали baseline-скрипты, которые перед каждым деплоем сравнивают ключевые SEO-сигналы текущей сборки с эталоном (html lang, meta description, canonical, OG-теги, JSON-LD). Если что-то расходится - CI блокирует деплой. На последних трёх ветках baseline-чек поймал три реальных регрессии: html lang выставлялся неправильно для .ru, meta description дублировался между двумя доменами, и где-то в landing проскочил абсолютный URL вместо относительного. Все три - починили до прода.

CI/CD Baseline-чек Botseller: автоматическая защита SEO-трафика с фиксацией регрессий html lang, дублей meta description и абсолютных URL до прода

Отдельная маленькая, но симпатичная штука - правильный Punycode для кириллического домена. ботселлер.рф в DNS и nginx живёт как xn--80aaedhbn0aakn8a.xn--p1ai (это Punycode-энкодинг, без него браузеры не понимают IDN-домены). Мы пару раз ошиблись и записали это как botseller.рф - смешанная латиница и кириллица, которую nginx не принимает. Вышли две правки в nginx-конфиге для .ru-контура: сначала корректный SSL-путь, потом отдельной коммитом - именно нормализованный Punycode. Это та работа, которую видят только ops-инженеры, но без неё домен просто не открывается.

Полный технический разбор того, как мы устроили дуальный SaaS под две юрисдикции одновременно - я как раз за эту же неделю выпустил отдельным уроком в Academy 8.4. Это редкий случай, когда обучающий контент и инженерная работа выходят синхронно: студенты Academy получают разбор архитектуры ровно в тот момент, когда мы её сами в себя ставим.

Botseller Academy: два премиум-урока за неделю

Botseller Academy: flywheel превращения инженерных фич в обучающие уроки 6.2 «Холодный аутрич без бана» и 8.4 «Дуальный SaaS»

В прошлом журнале я писал, что мы запустили Academy как обучающую воронку - бесшовный SSO от оплаты до первого урока. На этой неделе мы наполнили её двумя крупными премиум-уроками. Каждый урок у нас - это не короткая статейка, а полноценный учебный модуль: 4-5 тысяч слов разбора, 15 слайдов инфографики и аудио-разбор на 10-12 минут. Цель - чтобы студент мог получить материал в любом формате: читать, смотреть, слушать на пробежке.

Первый урок - 6.2 «Холодный аутрич без бана». Это разбор того, как делать Telegram-аутрич массой через сетку аккаунтов, не получая блокировок. Тема острая: 90% наших партнёров приходят из аутрича, и 90% из них на старте сжигают аккаунты не по злому умыслу, а просто из-за незнания механики платформы. Урок собирает в одном месте: правильный warmup, лимиты per-аккаунт, паттерны человеческого поведения, чем отличается soft-ban от hard-ban, как работать с приватными чатами через инвайт-ссылки. К уроку приложили 15 слайдов с примерами и аудио-разбор. Это премиум-материал, доступный только подписчикам Academy.

Второй урок - 8.4 «РФ + зарубеж одновременно: архитектура SaaS для двух юрисдикций». Тут мы фактически разбираем то, что сами сделали на этой неделе: как технически и юридически устроить продукт, который работает одновременно в двух правовых полях. ПДн-политика для РФ против GDPR для Европы, эквайеры, домены, рекламные кабинеты, hreflang, разделение контента, отдельные команды поддержки - всё это в одном уроке с 15-слайдной презентацией под названием Dual_Core_SaaS_Strategy. Аудио-разбор урока вышел на 11:41 минуту, файл - 8.5 МБ, лежит на нашем CDN.

Что важно отметить про процесс производства: мы окончательно отладили пайплайн «инженерная работа → урок Academy». Когда мы делаем что-то новое в коде - я сразу даю задачу в Academy упаковать это в урок. Это работает как двойная верификация: если ты не можешь объяснить, что сделал, в виде учебного модуля - значит, ты сделал что-то странное. И обратно: если урок получается интересным, значит, тема имеет общую методологическую ценность, а не только техническую.

CRM-ядро и техадминка: ветвление, рабочие часы, синхронизация воронок

Ядро CRM Botseller на 143-й неделе: нода ветвления для авто-ботов, расписание use_workhours и server-side sync колонок воронки

Теперь про ядро. CRM - это сердце Botseller, и любое изменение в нём я смотрю лично. На этой неделе у нас три заметные правки.

Первая - нода ветвления для автоматических ботов. У нас в визуальном конструкторе пайплайнов есть «ноды» - блоки, через которые проходит диалог. До этой недели нода ветвления (if/else по условию) работала только в режиме ручного вмешательства оператора. Теперь она работает и для полностью автоматических ботов: бот сам читает условие, сам выбирает ветку, сам уходит дальше по пайплайну. Это снимает ограничение, из-за которого партнёры не могли строить сложные сценарии без участия оператора. Ветка ушла в main в среду 23 апреля.

Вторая - синхронизация dialog_cols воронок Botseller CRM. Это про настройку колонок воронки на странице платформы: раньше при изменении воронки в админке колонки в боковой панели у клиента не пересобирались автоматически - надо было перезагружать страницу. Сделали серверную синхронизацию через единый эндпоинт, теперь UI обновляется в реальном времени. Это мелочь, но именно такие мелочи отличают продукт, в который приятно заходить, от продукта, которым можно пользоваться.

Третья - и самая большая по последствиям - рабочие часы и выходные для ботов. В нашей тех.админке мы добавили флаг use_workhours на уровне бота и две новые таблицы: одну для расписания рабочих часов (по дням недели), вторую для выходных (по конкретным датам - например, праздники). Раньше клиенты приходили и говорили: «бот отвечает в 3 ночи, мы получаем оператора в Telegram, а это значит, что и оператор просыпается». Теперь бот может работать только в заданные часы, а в нерабочее время - либо молчать, либо отвечать заранее настроенным сообщением «мы свяжемся в рабочее время». В пятницу 24 апреля начальная инфраструктура легла в админку, на следующей неделе будем подключать UI на стороне платформы.

Параллельно прошла одна правка в тех.админке по схеме chat_id - теперь его можно поменять PATCH-запросом, когда бот присоединяется к новому чату. Это нужно для CommandFlow и связки с Telegram-инфраструктурой - о ней дальше.

CommandFlow + Telegram: миссии, инвайт-ссылки и развилки

CommandFlow Botseller: эволюция Telegram-инфраструктуры от приватных чатов через инвайт-ссылки до атомарного обновления миссий и динамического chat_id

CommandFlow - это наш сервис, который управляет «миссиями» Telegram-аккаунтов в рассылочной инфраструктуре. Аккаунт приходит, получает миссию (вступить в чат, прочитать, отправить, выйти), отчитывается о результате. На этой неделе мы закрыли тут три заметные правки.

Первая - поддержка приватных чатов с пригласительной ссылкой. Раньше у нас стояло жёсткое условие, которое скипало приватные чаты, если у них не было публичного username. Это закрывало целый класс задач: вступление в закрытые группы по инвайт-ссылке (а это сейчас 30-40% всей B2B-коммуникации в Telegram). Убрали это условие, теперь аккаунт идёт в приватный чат через инвайт-токен и нормально там работает.

Вторая - полная схема обновления миссии. Когда миссия меняется (статус, приоритет, параметры), в БД должны прокидываться все её параметры, а не только изменённые. Это база, но мы накопили технического долга, и приходилось патчить миссии по нескольку раз, чтобы поля корректно дописывались. Перешли на схему «обновляем сразу всё», и теперь у нас гарантированная консистентность состояния миссии в любой момент времени.

Третья - обновление chat_id после присоединения лида к чату. Раньше: лид присоединялся к чату, мы посылали ему сообщение, и оно уходило в исходный диалог - не в новый чат, куда лид уже перешёл. Теперь после присоединения мы автоматически апдейтим chat_id лида на актуальный - сообщение приходит туда, где лид сейчас находится. Эта правка вышла из реальной боли клиентов в нише комьюнити-продуктов: они получают подписчика в общий чат, и хотят писать ему именно туда, а не в личку.

В telethon_bot на этой же неделе появилась развилка - чтобы аккаунт мог выходить и из каналов, и из чатов (раньше было только одно). Плюс мы добавили детальные логи в эндпоинты CommandFlow - чтобы видеть, какая команда от какого аккаунта и с каким результатом отработала. Это не функциональное изменение, но без него отлаживать сетевые сценарии в проде - больно. На неделе с большим объёмом ребейсов и переездов наблюдаемость особенно важна.

Clubator: Followup-разбор и новый брендинг

Clubator на 143-й неделе: полировка UX под боевой нагрузкой Followup, человекочитаемые ошибки и новый брендинг с изумрудными кубиками

Clubator на этой неделе оказался под нагрузкой - им начали активно пользоваться внутренние клиенты для рассылок follow-up’ов в Telegram. И первое же боевое использование вскрыло целый каскад мелких, но обидных багов в подсистеме Followup. Поэтому 20 апреля у нас прошёл «Followup-разбор полётов» - один день, шесть merged веток, все - про опыт пользователя в одном экране.

Человекочитаемые ошибки + автопометка недоступных юзеров. Раньше при ошибке отправки follow-up’а пользователь видел сырое исключение Telegram API - что-нибудь вроде PEER_ID_INVALID или USER_IS_BLOCKED. Это технически корректно, но полностью бесполезно для оператора, который не знает, что с этим делать. Переписали слой ошибок - теперь оператор видит «Этот пользователь заблокировал бота» или «Пользователь удалил аккаунт», и автоматически такие пользователи помечаются как недоступные, чтобы не делать следующие попытки в их сторону. Это сразу убрало 70% «холостых» ретраев в очереди.

Фикс дубля одиночного фото + видимая ссылка в превью. Был баг: если в follow-up прикреплено одно фото, оно отправлялось дважды (один раз как медиа, второй - в составе album-группы). Чинили долго - выяснилось, что у нас неправильно работала ветка одиночного вложения в обработчике медиа. Параллельно сделали так, чтобы ссылка в превью была видна оператору в редакторе follow-up’а - до этого превью схлопывалось, и оператор не понимал, как сообщение увидит получатель.

Вставка ссылки из модалки в выделенный текст. Маленькая, но любимая правка. Раньше: ты выделил слово в редакторе, нажал «вставить ссылку», ввёл URL в модалке - и ссылка вставлялась в произвольное место курсора, а не на выделенное слово. Чинили примерно час, но теперь UX в редакторе - как в нормальном WYSIWYG. Это та самая «полировка», которую невозможно перепутать ни с чем другим: или работает, или нет.

Параллельно с Followup-эпопеей мы окончательно отделили Clubator от Botseller визуально. До этой недели у Clubator не было собственной фирменной графики - он жил с дефолтным favicon и заимствованным логотипом. Теперь у него есть собственный favicon (стилизованные «кубики» в эмеральдовой палитре, симметричный 2×2 grid для малых размеров), полноценный логотип LayoutDashboard, и три PNG-иконки разных размеров плюс solid-версия для тёмного UI. Иконки сразу залили на CDN.

И последняя ops-правка: мы синхронизировали nginx + xray prod-конфиги с Roksana (у нас сервер с этим именем) обратно в репозиторий. Это та самая работа, которую все откладывают: «у нас же на проде живая конфигурация, в репе её копия может устареть, и однажды кто-нибудь раскатит репу поверх и снесёт продакшен». Теперь репа = прод, и любое изменение проходит через коммит, ревью и CI. Скучно, но обязательно.

Knowledge Graph Botseller: консолидация E-E-A-T для Google через Person Дмитрий Дьяконов с worksFor ООО Ботселлер и subOrganization Clubator как дочерний бренд

Параллельно с инженерным мульти-доменом мы провели SEO-чистку обоих брендов на уровне structured data. Я как автор статей фигурирую и на botseller.ai/blog, и на clubator.ru/blog - и у меня в обоих местах должна быть одна и та же Person-сущность с правильными связями. Раньше у меня в worksFor был массив из двух организаций (Botseller + Clubator), что технически валидно, но смущало Knowledge Graph - он не понимал, кто из них первичный. Поправили: один Organization в worksFor (ООО «Ботселлер»), а в его schema через subOrganization указан Clubator как дочерний бренд - то есть направление иерархии теперь однозначное.

Дополнительно: в jobTitle теперь стоит «CEO & Founder, ООО «Ботселлер»» - с явным указанием на головную компанию. В description Person - Botseller идёт первым как флагман, Clubator - вторым как дочерний продукт. На уровне Clubator в его schema появилась обратная ссылка: parentOrganization → Botseller. Кликабельный автор в статьях Clubator теперь ведёт на профиль Дмитрия Дьяконова на Botseller - это создаёт единый E-E-A-T-кластер для обоих брендов: Google видит, что один человек ведёт два связанных продукта, и это вес для обоих доменов сразу, а не разорванные сигналы.

Параллельно вышла отдельная ревизия большой статьи «Как мы строили Botseller» - фактчек по реальным цифрам платформы. Автобиографические статьи особенно опасны: в них легко занизить или завысить данные, а потом эти цифры расходятся как факт. Перепроверили всё, что упоминается: даты, объёмы, статистика клиентов, история ключевых решений.

NGL и техадминка платформы: UI заявок для админов

Админка NGL заявок Botseller: переход от прямых SQL-запросов через DBeaver к выделенному UI в админке платформы с auditable-процессами

Маленькая, но важная фича в админке платформы - UI управления заявками NGL для админов. NGL у нас - это отдельный класс заявок от потенциальных клиентов с особой логикой обработки (не буду раскрывать детали - это внутренняя бизнес-механика партнёрки). До этой недели админы работали с такими заявками через прямые SQL-запросы или через вызов в Telegram. Теперь у нас есть нормальный экран в админке: список заявок, фильтры, статусы, действия. Доступ - только для роли админа, нельзя случайно показать обычному пользователю.

Это - часть общей линии этого квартала: всё, что делается через DBeaver или вручную через Telegram, должно постепенно переехать в админку платформы. Не потому что это удобнее (хотя да, удобнее), а потому что процессы должны быть auditable - кто что сделал, когда, с каким результатом. Без админки эта аудиторность невозможна.

В чём главный итог 143-й недели?

Итог 143-й недели Botseller AI: глобальный движок botseller.ai и локальное доверие botseller.ru на единой кодовой базе

Если 142-я неделя была про переход от платформы к экосистеме, то 143-я - про географическую развёртку этой экосистемы. Мы взяли продукт, который раньше жил под одним международным брендом, и выставили его одновременно на двух витринах: международной .ai и российской .ru/.рф. Без форка кода, без дубликата команды, без перекрёстного загрязнения SEO. Параллельно с этим - выпустили обучающий урок ровно про эту архитектуру, чтобы партнёры могли пройти этот путь у себя без наших шишек.

Я считаю, что это был правильный квартальный ход. Российский B2B-сегмент в нише ИИ-продаж сейчас в фазе активного выбора платформ, и наличие .ru-домена снимает 80% возражений в первой коммуникации. До этой недели мы их теряли просто на этапе «а у вас домен ai? ну и дороговато наверное». После этой недели у нас на этом возражении - отдельный лендинг с российскими реквизитами, российской ценовой шкалой и поддержкой кириллического домена.

Что дальше. На 144-й неделе план: довести use_workhours до UI на платформе (рабочие часы для ботов нужны минимум 30% наших клиентов), добавить полноценный flow заявок NGL с автоматической маршрутизацией, и закрыть оставшиеся регрессии мульти-домена, которые ловит baseline-чек. Ещё - выпустить третий урок Academy 8.x по дуальному SaaS, потому что одна теоретическая часть и одна архитектурная - этого мало, нужен практический разбор «куда переезжать на DNS-уровне».

Приходите в Telegram-канал

Если этот формат отчётов вам полезен - подпишитесь на наш Telegram-канал @botseller_ai. Там я каждую неделю выкладываю эти журналы, плюс короткие посты про продуктовые решения, эксперименты и инциденты в проде. Без рекламы, без воды - только то, что мы сами считаем важным.

Если хотите попробовать платформу - заходите на botseller.ai (международная версия) или botseller.ru (российская версия с поддержкой кириллического домена ботселлер.рф). При регистрации даём 500 ₽ в подарок, чтобы можно было запустить ИИ-бота без вложений и потрогать его руками.

И если вам интересна не только платформа, но и бизнес вокруг неё - посмотрите партнёрскую программу и калькулятор дохода партнёра. Реферал, интегратор, IT-франшиза - три модели на любой профиль. До встречи на 144-й.

FAQ

Зачем заводить второй домен, если botseller.ai уже работает и индексируется?

Потому что российский B2B-сегмент - это отдельная вселенная с собственными требованиями к доверию. Тендеры, юрлица, рекламные кабинеты Яндекса, банковские эквайеры - все они мягче работают с .ru-доменом и с компанией, которая «выглядит как российская». Это не про патриотизм, это про конверсию на этапе первого касания. На .ai мы продолжаем играть международно, на .ru - получаем доступ к сегменту, который раньше отваливался на возражении «у вас домен какой-то странный».

Как вы избегаете дубля контента между .ai и .ru?

Тремя механизмами одновременно. Первое - корректный hreflang через хелпер getAlternates: поисковики видят, что страница на .ru и страница на .ai - это региональные версии одной и той же сущности. Второе - разделение /contacts и /about по регионам: на каждом домене стоят свои реквизиты, телефоны и юридические тексты, физический контент отличается. Третье - динамические llms.txt per-domain для AI-краулеров (ChatGPT, Perplexity, Яндекс.Нейро): каждый домен отдаёт свой манифест без перекрёстного загрязнения.

Что такое baseline-чеки SEO в CI и зачем они нужны?

Это автоматизированные тесты, которые перед каждым деплоем сравнивают ключевые SEO-сигналы новой сборки с эталоном: html lang, meta description, canonical, OG-теги, JSON-LD. Если что-то расходится - CI блокирует деплой и заставляет инженера посмотреть, что он сломал. На этой неделе baseline-чек поймал три реальных регрессии до прода - все три починили в feature-ветке, не выкатывая на основной домен. Без таких чеков любой большой рефакторинг (а мульти-доменный переезд - это именно он) рискует уронить позиции.

Чем отличается урок 6.2 от обычной статьи блога про холодный аутрич?

Тем, что это премиум-материал внутри Botseller Academy, а не публичный блог. Урок собирает в одном месте всю практическую механику аутрича через сетку аккаунтов: warmup, лимиты per-аккаунт, паттерны человеческого поведения, разбор soft-ban vs hard-ban, работу с приватными чатами через инвайт-ссылки. К нему приложены 15 слайдов инфографики и аудио-разбор на 11+ минут. В блоге мы такие материалы не публикуем - это часть платной обучающей подписки.

Почему Followup-баги в Clubator всплыли именно сейчас, спустя несколько недель после релиза?

Потому что мы только-только начали активно ими пользоваться внутри. Когда продукт лежит без нагрузки - 90% багов спят. Стоит подключить пять реальных операторов, которые делают по 50 follow-up’ов в день - и за один день вылезает шесть проблем, которые в спокойном режиме не воспроизводятся годами. Это нормальная цена за то, чтобы сначала проверить продукт на себе, прежде чем продавать наружу. Все шесть багов мы закрыли за один день - 20 апреля.

Когда ждать use_workhours в UI платформы?

Бэкенд и схема в нашей тех.админке уже готовы (две новые таблицы, флаг на боте). На следующей неделе подключаем UI на стороне платформы - управление расписанием рабочих часов и списком выходных дней через настройки бота. Это нужно минимум 30% клиентов, особенно в нишах, где живой оператор работает только в дневное время (медицина, юристы, образование). Плюс хотим сразу заложить поддержку часовых поясов, чтобы один и тот же бот мог обслуживать клиентов в разных регионах с разными графиками.