Чего мы не делаем принципиально

Список возможностей есть у всех, и по нему инструменты почти неразличимы. Список отказов есть у единиц — а он говорит о продукте больше. Вот восемь вещей, которых в CloudSend нет намеренно, с причиной по каждой. Некоторые из них конкуренты продают как преимущество.

Поэтому список того, чего продукт не делает, полезнее списка того, что он делает: он показывает, где проходит граница между «работает» и «выглядит убедительно в рекламе».

1. Не подменяем отпечаток устройства

Приём, который часто продают как маскировку: каждому аккаунту назначить свою «модель телефона», чтобы флот не выглядел однородным.

Проблема в том, что для живой сессии смена устройства — это не маскировка, а событие: аккаунт, который вчера был на одном телефоне, а сегодня на другом, выглядит как угнанный. В нашем коде это записано одной строкой прямо там, где создаётся подключение: Telegram банит за смену устройства, используем параметры по умолчанию.

Генератор случайных устройств в кодовой базе есть — он достался по наследству. Мы проверили: его не вызывает ни один модуль, и это осознанно.

2. Не обходим скрытый список участников

Если админ чата закрыл список участников, парсер его не достанет. Никакого перебора по алфавиту, никаких обходных троп — этого просто нет в коде.

Причина не в морали, а в честности обещания: инструмент, который обещает «собрать любую аудиторию», продаёт вам ожидание, которое не выполнит. Половина собранной базы для приглашений отвалится и по другой причине — у людей закрыта приватность, и это тоже ограничение площадки, а не брак софта. Лучше знать это до покупки.

3. Не уникализируем текст невидимыми символами

Юникод-подмена букв, нулевая ширина между словами, «похожие» эмодзи — классический набор для обхода фильтров. У нас его нет вовсе.

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

4. Не ставим кнопки под скопированным постом

При копировании канала кнопки под постом не переносятся — и не будут. Кнопки под сообщением умеет ставить только бот; аккаунт-пользователь такого права не имеет в принципе.

Здесь важна не сама функция, а то, как о ней сказать. Можно написать «поддерживаем перенос постов» и промолчать про кнопки — клиент узнает об этом сам, на первом же посте. Мы пишем прямо, включая то, что форматирование не переносится и публикуется простой текст.

5. Не греем аккаунты в чужих чатах

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

Мы так не делаем: чужой чат — чужая территория, там за прогрев дают бан. Как устроен наш прогрев — на его странице. Переписка между вашими же аккаунтами в вашем же чате даёт профилю ту же «жизнь», но без риска нарваться на модератора чужого сообщества.

6. Не оцениваем аккаунты нейросетью

«ИИ-защита аккаунтов» и «ИИ-рейтинг здоровья» звучат современно. Мы считаем это обёрткой и делаем иначе: балл живучести считается правилами и весами, без обращения к модели.

Причина в трёх словах владельца продукта: признаки числовые, правила детерминированные, два прогона обязаны давать один ответ. У такой оценки есть свойство, которого у нейросетевой не бывает: её можно объяснить и оспорить. Вы видите, какой фактор сколько дал.

И отдельное правило внутри: ноль вместо недоступного значения запрещён. Если признак не измерен, он не занижает балл молча — он уменьшает уверенность в оценке, и это видно. Разница между «плохо» и «не смотрели» здесь принципиальная.

7. Не даём рою готовый словарь «живых словечек»

Самый распространённый способ сделать текст «разговорным» — подсунуть модели список: «щас», «норм», «спс», «ваще». Получается разговорно. И получается отпечаток: весь рой, все чаты и все клиенты начинают говорить одними и теми же пятнадцатью словами. Это уже не маскировка, а подпись.

Такого списка у нас нет ни в одном месте. Вместо слов у каждого жителя есть направление: насколько он формален, многословен, ставит ли точки, любит ли эмодзи. Слова он подбирает сам, каждый раз заново.

Из той же логики — отказ от образцов речи в досье персонажа. Казалось бы, полезно: покажи модели, как этот человек пишет. На деле модель начинает копировать примеры, и в комнате появляется один общий голос. Поэтому образцы речи в промпты не попадают вовсе, а при заселении система прямо предупреждает: примеров того, как персона пишет, в промптах больше нет — они будут отброшены.

8. Не делаем кнопку «дослать» и «пересинхронизировать»

Кнопка, которая чинит продукт руками, — признание, что раздвоение осталось внутри. Если задача может «не досчитать» и потребовать ручного повтора, правильный ответ — починить задачу, а не выдать владельцу инструмент для уборки за нами.

Фоновое самолечение — нормально. Ручной триггер как функция интерфейса — нет.

Отказы, которые касаются того, что мы говорим, а не делаем

Три правила из той же семьи, но про интерфейс и тексты.

  • Не выдумываем срок ограничения. Если Telegram не назвал дату снятия — мы пишем «срок не назван», а не подставляем свою догадку. Своя догадка, показанная как факт от площадки, — худший вид вранья, потому что на неё планируют работу.
  • Не рисуем зелёное там, где не смотрели. У значения три состояния: проверено, не удалось проверить, не проверялось. «Ноль аккаунтов в спам-блоке» при непроверенном флоте — это не хорошая новость, а отсутствие новостей.
  • Не берём денег за брак модели. Пустой ответ нейросети не списывается вовсе. И цену задачи показываем диапазоном, а не одним числом: одно число выглядело бы обещанием, которого мы не сдержим.

Честно про сам этот список

  • Это не список добродетелей. Часть отказов — прямое следствие того, как устроен Telegram: кнопки под постом мы не ставим не из принципа, а потому что аккаунту это недоступно.
  • Отказ не делает продукт безопасным. Ни один пункт не защищает от блокировки — он лишь убирает те приёмы, которые её приближают.
  • Список не закрыт. Что-то из него может появиться, если окажется, что риск мы оценили неверно. Тогда мы напишем об этом так же прямо, как написали здесь.

Как этим пользоваться при выборе инструмента

Вопросы, которые стоит задать любому продавцу — включая нас:

  1. Что ваш софт делать не умеет? Ответ «всё умеет» означает, что границы вам придётся находить самому.
  2. Подменяете ли устройство? Если да — спросите, что происходит с живой сессией при смене отпечатка.
  3. Как считается оценка аккаунта? Если «нейросетью» — спросите, дадут ли два прогона один ответ и можно ли оценку оспорить.
  4. Что показывает экран, когда проверка не удалась? Если ноль или зелёное — экрану нельзя верить.
  5. Есть ли кнопка «дослать»? Её наличие — короткий рассказ о том, как продукт относится к собственным сбоям.

Ни один из этих вопросов не про функции. Все они про то, что будет, когда что-то пойдёт не так, — а оно пойдёт.

Читайте дальше

принципы

Проверено, не удалось, не проверялось

разбор

У чата нет нормы, есть характер комнаты

Откуда факты. Каждый отказ проверен по коду: комментарий о смене устройства стоит в месте создания подключения, а генератор устройств не вызывается ни одним модулем; перебора скрытых участников в коде нет; юникод-уникализации нет вовсе; расчёт живучести не обращается к модели и запрещает подставлять ноль вместо неизмеренного значения; образцы речи персонажей отбрасываются при заселении с явным предупреждением клиенту. Ограничения этого списка названы отдельным блоком выше.

Границы, названные до покупки

Каждый модуль на своём экране говорит, чего он не умеет: границы лучше узнавать до запуска.