Тысяча отправок за круг: арифметика рассылки по чатам

Двадцать аккаунтов, у каждого полсотни групп. Задача — раз в сутки донести до них одно предложение. Звучит как работа на полчаса. Считаем честно, во что она обходится руками, что именно меняет автоматизация — и почему выигрыш здесь совсем не в скорости отправки.

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

Исходные данные

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

Считаем один круг — один проход аккаунта по всему своему списку чатов.

1000

отправок за круг: 20 аккаунтов × 50 групп. Это один проход, а не месяц работы.

8–16

часов за экраном, если делать это руками с честной паузой 30–60 секунд между сообщениями.

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

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

Главный поворот: выигрыш не в скорости

Софт не отправляет быстрее человека. Он держит те же 30–60 секунд. Выигрыш в другом: ждать можно одновременно двадцать раз. У каждого аккаунта свой круг, свой таймер и свой старт — залипший аккаунт не тормозит остальных.

Один аккаунт проходит свои 50 групп за 25–50 минут. Стартуют они не разом, а со сдвигом в 300 секунд, так что двадцатый начинает через полтора часа после первого, и весь флот заканчивает круг примерно за два часа против восьми-шестнадцати. Но настоящая цифра другая: человеческого времени в этом круге — ноль.

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

Что настраивается сверх «вставить текст»

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

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

Девять проверок перед каждой отправкой

Перед одним сообщением в один чат система спрашивает: жива ли задача и открыто ли расписание · не поставлен ли аккаунт на паузу человеком · не рано ли писать в этот чат с этого аккаунта · не писали ли уже в этот чат в этом круге · не выключен ли чат галочкой · не замечена ли в нём капча · выдержан ли индивидуальный интервал чата · не лежит ли чат в исключённой папке · не в карантине ли эта пара.

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

Когда сообщение не ушло: чат или аккаунт

Центральная идея всей конструкции. Один разборщик делит беды на три сорта — свойство чата, состояние аккаунта, обрыв связи, — потому что цена ошибки несимметрична: приняв больной аккаунт за плохие чаты, можно закрыть сотни здоровых площадок разом.

Что случилосьЧто делает система
В чате медленный режимкарантин только этого чата — на срок таймера
Telegram притормозил аккаунтаккаунт выходит из круга, чаты не трогаем
Капча, запрет записи, бан, «только админам»карантин чата на 7 суток
Чат исчез или сменил адрескарантин на 30 суток, пометка «нужны руки»
Чат включил платные сообщениявыключается у этого аккаунта навсегда
Аккаунт заморожен, забанен, сессия мертвааккаунт снимается с круга, чаты остаются чистыми
Мёртвый прокси, обрыв связипомечается связь, а не аккаунт

Две последние строки написаны кровью и разобраны отдельно — в статье «Кто виноват: чат или аккаунт». Там же про ошибку Telegram, название которой прямо провоцирует закрыть весь список целей.

Перезапуск сервера не начинает круг заново

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

Где спотыкаются — четыре места

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

Честные границы этого модуля

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

Что забрать себе, даже если вы всё делаете руками

  1. Считайте круг, а не сообщение. «Полчаса работы» превращается в рабочий день на умножении.
  2. Паузу берите вилкой, а не числом, и разносите старты аккаунтов.
  3. Разделяйте вину. Прежде чем вычеркнуть чат, проверьте, писал ли туда успешно другой аккаунт; прежде чем хоронить аккаунт — проверьте прокси.
  4. Не верьте счётчику «отправлено». Сообщение, удалённое антиспам-ботом через две секунды, для счётчика тоже отправлено.

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

разбор

Кто виноват: чат или аккаунт

как устроено

Пять уровней и одна связка

Откуда цифры. Тысяча отправок и восемь-шестнадцать часов — это арифметика: 20 × 50 умножить на паузу 30–60 секунд. Паузы, шаг веерного старта в 300 секунд, порядок выбора текста, состав проверок перед отправкой и разбор ошибок — рабочие настройки и поведение продукта, а не планы. Результатов конкретных клиентов здесь нет намеренно: называть чужие цифры без разрешения мы не будем, а выдумывать свои — тем более.

Рассылка по чатам — один из модулей кабинета

Свой текст на связку «аккаунт + чат», паузы диапазоном, расписание с часовым поясом и разбор причины по каждому неотправленному сообщению.