Сразу оговорка. В этой статье нет ни отзывов, ни процентов роста, ни «клиент получил столько-то заявок»: чужие результаты называть без разрешения нельзя, а придумывать — тем более. Считаем то, что проверяется: арифметику и настройки, которые работают в продукте сейчас.
Исходные данные
Двадцать аккаунтов, у каждого около пятидесяти групп, в которых он уже состоит. Первое, где интуиция врёт: списки чатов у аккаунтов почти не совпадают — каждый вступал в свои группы по своему поводу. Аккаунты не дублируют друг друга, а дополняют, и суммарный охват флота (все рабочие аккаунты, которыми вы пишете) заметно больше, чем у любого отдельного.
Считаем один круг — один проход аккаунта по всему своему списку чатов.
отправок за круг: 20 аккаунтов × 50 групп. Это один проход, а не месяц работы.
часов за экраном, если делать это руками с честной паузой 30–60 секунд между сообщениями.
Пауза — не перестраховка: двадцать сообщений подряд без задержек дают ограничение аккаунта и раздражённых модераторов. Ровная пауза не лучше: сообщения по метроному читаются как поток от автомата, и на них перестают отвечать. Поэтому фиксированных задержек нет нигде — везде вилка «от–до».
И это только клики. Параллельно оператор обязан помнить, куда уже написал в этом круге, какие чаты запретили запись, где включён медленный режим, кто поймал ограничение и не занят ли аккаунт другой задачей — потому что два дела одновременно с одного аккаунта Telegram читает как неестественную активность.
Главный поворот: выигрыш не в скорости
Софт не отправляет быстрее человека. Он держит те же 30–60 секунд. Выигрыш в другом: ждать можно одновременно двадцать раз. У каждого аккаунта свой круг, свой таймер и свой старт — залипший аккаунт не тормозит остальных.
Один аккаунт проходит свои 50 групп за 25–50 минут. Стартуют они не разом, а со сдвигом в 300 секунд, так что двадцатый начинает через полтора часа после первого, и весь флот заканчивает круг примерно за два часа против восьми-шестнадцати. Но настоящая цифра другая: человеческого времени в этом круге — ноль.
Веерный старт нужен не только для скорости. Двадцать одинаковых сообщений в одну минуту — это то, из-за чего вас попросят из чата: люди видят вал, а не разговор.
Что настраивается сверх «вставить текст»
Ровно это отделяет рассылку от спама. Настройка живёт на пяти уровнях — кабинет, папка-кампания, аккаунт, чат и связка «этот аккаунт в этом чате», — а текст выбирается по строгому приоритету из четырёх ступеней: свой текст для связки, тексты аккаунта, «Избранное» аккаунта, общий текст кампании. Сверху ложится спинтакс и режим без пересечений, чтобы флот не писал одно и то же. Подробный разбор — в отдельной статье «Пять уровней и одна связка».
Расписание задаётся с часовым поясом, а не по времени сервера, и вне окна рассылка засыпает и просыпается сама. Окно проверяется в трёх местах: при старте, перед каждым кругом и перед каждым следующим чатом — круг идёт около часа, и без последней проверки работа регулярно уезжала бы в ночь, когда в чате никого нет.
Девять проверок перед каждой отправкой
Перед одним сообщением в один чат система спрашивает: жива ли задача и открыто ли расписание · не поставлен ли аккаунт на паузу человеком · не рано ли писать в этот чат с этого аккаунта · не писали ли уже в этот чат в этом круге · не выключен ли чат галочкой · не замечена ли в нём капча · выдержан ли индивидуальный интервал чата · не лежит ли чат в исключённой папке · не в карантине ли эта пара.
Отдельно из целей вычитаются собственные служебные чаты — в свою же группу отчётов ничего не уедет. Полный состав настроек — на странице каталоге модулей.
Когда сообщение не ушло: чат или аккаунт
Центральная идея всей конструкции. Один разборщик делит беды на три сорта — свойство чата, состояние аккаунта, обрыв связи, — потому что цена ошибки несимметрична: приняв больной аккаунт за плохие чаты, можно закрыть сотни здоровых площадок разом.
| Что случилось | Что делает система |
|---|---|
| В чате медленный режим | карантин только этого чата — на срок таймера |
| Telegram притормозил аккаунт | аккаунт выходит из круга, чаты не трогаем |
| Капча, запрет записи, бан, «только админам» | карантин чата на 7 суток |
| Чат исчез или сменил адрес | карантин на 30 суток, пометка «нужны руки» |
| Чат включил платные сообщения | выключается у этого аккаунта навсегда |
| Аккаунт заморожен, забанен, сессия мертва | аккаунт снимается с круга, чаты остаются чистыми |
| Мёртвый прокси, обрыв связи | помечается связь, а не аккаунт |
Две последние строки написаны кровью и разобраны отдельно — в статье «Кто виноват: чат или аккаунт». Там же про ошибку Telegram, название которой прямо провоцирует закрыть весь список целей.
Перезапуск сервера не начинает круг заново
Задача живёт в очереди в базе, а не в памяти процесса: сервер перезапустили — работа продолжится с того места, где остановилась, а отметка «в этот чат в этом круге уже писали» лежит там же, поэтому повторной отправки не будет.
Где спотыкаются — четыре места
- Одинаковые списки чатов и выключенная рандомизация. Если у всех аккаунтов папки один список групп, порядок обхода надо перемешивать — иначе флот идёт по чатам строем. Продукт предупреждает об этом на экране, но по умолчанию перемешивание выключено.
- Ожидание, что «Избранное» главнее. Оно младше личных текстов. Не тот текст в чате — ищите личный текст аккаунта или связки.
- Пять модулей одним аккаунтом. Потолки считаются на пару «аккаунт + модуль», а не на аккаунт целиком, и общего счётчика нет.
- Рассылка работает только с папками, а веерный старт с шагом пять минут имеет смысл от трёх-пяти аккаунтов.
Честные границы этого модуля
- Суточного потолка «сообщений с одного аккаунта» нет. Ни один механизм не считает, сколько один аккаунт отправил за сутки по всем чатам, — считайте нагрузку сами. Профиль темпа с потолками в продукте есть, но рассылка его не спрашивает.
- Индивидуальный суточный лимит для каждого чата задать нельзя. Живая настройка на уровне чата — «не чаще чем раз в N минут».
- Из медиа только фото и видео. Ни документов, ни кружков, ни стикеров, ни альбомов.
- Нет закрепления, кнопок под сообщением и ответов на сообщения.
- Защита «не писать дважды» работает внутри одного круга, а не «никогда больше».
- Юникод-уникализации текста нет вовсе — ни подмены эмодзи, ни невидимых символов.
Что забрать себе, даже если вы всё делаете руками
- Считайте круг, а не сообщение. «Полчаса работы» превращается в рабочий день на умножении.
- Паузу берите вилкой, а не числом, и разносите старты аккаунтов.
- Разделяйте вину. Прежде чем вычеркнуть чат, проверьте, писал ли туда успешно другой аккаунт; прежде чем хоронить аккаунт — проверьте прокси.
- Не верьте счётчику «отправлено». Сообщение, удалённое антиспам-ботом через две секунды, для счётчика тоже отправлено.