Дубли в базе перед инвайтингом
Разберём, где повторы убираются автоматически, а где остаются на вас. И главное — почему история статусов цели защищает от дублей лучше, чем любая ручная чистка перед загрузкой.
Чем мешают дубли
Дубль в базе — это не просто лишняя строка. Каждый повтор тратит слот дневного лимита аккаунта, добавляет одно действие в сторону MAX и портит статистику: в отчёте по одному человеку окажется два разных исхода.
Отдельно неприятны повторы между запусками. Человека уже пригласили вчера, а сегодня та же строка снова уходит в очередь — для платформы это выглядит как навязчивое повторное обращение, а для вас превращается в мусорные ошибки в отчёте.
- 1
Съеденный лимит
Дневной лимит по умолчанию 300 на аккаунт и считается по номеру и дате. Повтор занимает тот же слот, что и живой контакт: база из 5000 строк с 20% дублей это тысяча потраченных впустую попыток.
- 2
Кривая статистика
«Выполнено» не равно «приглашено»: в выполненные входят privacy, уже состоящие и ошибки. Если один человек прошёл дважды, вы уже не понимаете, каким был реальный охват базы.
- 3
Риск повторного действия
Опаснее всего повтор поверх неоднозначного ответа, когда запрос до MAX дошёл, а подтверждение потерялось. Именно поэтому такие ID помечаются отдельно и не повторяются сразу.
По чему считать повтор
Отдельной кнопки «удалить дубли» в боте нет — и не должно быть. Дедупликация встроена в те места, где данные попадают в систему: при загрузке источников, при загрузке очереди и при переносе результата между модулями. Понимать стоит одно: по какому ключу считается повтор.
MAX user ID
Единственный надёжный ключ. Числовой идентификатор человека внутри MAX, он не меняется от того, как записан номер. Вся очередь инвайтинга работает именно по нему.
Нормализованный телефон
Годится до проверки номеров. Один и тот же человек в базе легко лежит как +7 900…, 8 900… и 7900…: пока строки не приведены к единому виду, это три разные записи.
Текст строки источника
Самый слабый ключ. При загрузке чатов в Парсинг убираются только точные текстовые совпадения, поэтому разные формы записи одной цели остаются разными источниками.
Внутри одного запуска парсинга повторы убираются и внутри каждого источника, и между источниками. Так что склеивать выгрузки по нескольким чатам вручную не нужно — общий файл уже уникальный.
Как привести список в порядок
- Приведите файл к одной строке на записьПоддерживается обычный TXT в UTF-8: один ID или номер на строку, без запятых, лишних колонок и подписей. Всё, что не разобралось, просто не попадёт в очередь.
- Уберите пустые строки и мусорПустые строки, комментарии, обрывки ссылок и текст «имя — телефон» в одной строке чистятся быстрее всего в обычном текстовом редакторе или таблице, ещё до бота.
- Нормализуйте телефоныПри загрузке номеров в проверку из строки удаляются нецифровые символы, начальная
8меняется на7для одиннадцатизначных номеров, а строки короче десяти цифр отбрасываются. Страна и максимальная длина не проверяются — за реальность номеров отвечаете вы. - Сначала проверьте номера, потом инвайтитеИнвайтинг работает по MAX ID. Прогон через «Проверку номеров» превращает телефонную базу в набор подтверждённых ID: несуществующие и не зарегистрированные в MAX строки отсеиваются, а не съедают лимиты.
- Загрузите базу в ИнвайтингКнопка
Загрузить ID / номеранормализует список и удаляет дубли на входе. Если по этой цели уже есть история, бот отдельно спросит, как учитывать старые статусы.
В проверке номеров новый список добавляется к сохранённому, а не заменяет его. Повторная загрузка уже известного номера не сбрасывает его статус — существующая запись остаётся как есть.
Почему статусы важнее чистки
MaxRunner хранит очередь по каждой цели отдельно и помнит, чем закончилась каждая строка. Именно это, а не ручная чистка файла, защищает от повторной обработки одного человека при следующем запуске.
Ключевое правило внутри: окончательный статус не откатывается обратно в pending. Если запись уже получила финальный исход, старый снимок базы не имеет права вернуть её в работу.
Ещё можно пытаться пригласить. Это единственная группа, которая реально уходит в работу при следующем запуске по этой цели.
MAX подтвердил приглашение. Повторять не нужно и не следует: человек уже получил обращение.
Человек уже в цели. Для групп такие записи можно снимать заранее — опция «Проверка участников» собирает участников до старта и убирает совпадения из очереди.
Адресат закрыл приглашения настройками MAX. Это окончательный отказ платформы, а не сбой процесса, и повторные попытки его не меняют.
Запрос мог дойти до MAX, но ответ потерялся. Такие ID специально не повторяются сразу — иначе один человек получит приглашение дважды.
Не чистите очередь ради «свежего старта». Кнопка «Скачать ID» отдаёт всю базу со статусами — сохраните этот снимок до любой очистки, иначе история цели и остаток pending теряются.
Проверка перед загрузкой
Четыре проверки, которые занимают минуту
Пробегитесь по ним до того, как нажмёте «Загрузить ID / номера» — потом разбирать отчёт будет дороже.
Число строк
Запомните, сколько строк было в файле. После загрузки сверьте с блоком «Список ID в базе»: сильное расхождение означает, что часть строк не разобралась.
Уникальность
Отсортируйте и удалите повторы в исходнике. Бот сделает это и сам, но так вы заранее увидите реальный размер базы, а не думаете, что у вас 10 000 контактов.
Один тип данных
Не смешивайте в одном файле ID и телефоны без понимания, что будет дальше. Телефоны сначала идут в проверку номеров, ID — сразу в очередь.
Резервная копия
Скачайте текущую базу со статусами перед любой загрузкой поверх и перед очисткой. Это единственный способ вернуться к прежнему состоянию очереди.
Отдельно убедитесь, что у вас есть основание работать с этой базой: собранная своими руками аудитория и купленный где-то список — очень разные истории.
Где в боте кнопка «удалить дубли»?
Такой отдельной кнопки нет. Повторы убираются на входе: при загрузке источников парсинга, при загрузке очереди в инвайтинг и при переносе результата из проверки номеров.
Что происходит при переносе результата в очередь?
И «Добавить в Invite» из парсинга, и «Загрузить OK в инвайт» из проверки номеров дополняют существующую очередь, а не заменяют её. Полные дубли пропускаются.
Как не приглашать тех, кто уже в чате?
Включите «Проверку участников» — для групп бот заранее соберёт состав цели и пометит совпадения как already. Для каналов этот переключатель не работает.
База из двух парсингов в разные дни — как склеить?
Дедупликация внутри запуска работает только для источников одного прогона. Два файла разных дней сведите на своей стороне или просто загрузите оба в очередь: на входе дубли всё равно отсеются.
Чистая база не отменяет темпа: очередь всё равно проходит по дневным ориентирам. Считайте заранее, на сколько дней растянется список.
- 38приглашений в суткис одного аккаунтаВыше — растёт риск поймать спамблок.
- 200приглашений в суткив один чат со всех аккаунтовВыше — риск блокировки заметно выше.
Это рекомендации MaxRunner по безопасному темпу, а не опубликованные лимиты MAX. Бот не запрещает поставить больше — он делает то, что вы задали в настройках.
Частые ошибки новичка
- Чистит очередь ради «свежего старта»
Вместе с записями уходит история статусов цели, и следующий запуск снова идёт по тем, кого уже пригласили вчера.
Сначала «Скачать ID» — снимок базы со статусами, — и очищайте очередь только если действительно начинаете другую работу.
- Складывает в один файл и телефоны, и MAX ID
Телефоны нужны проверке номеров, ID — очереди инвайтинга; часть строк не разберётся, и расхождение вы заметите уже по отчёту.
Держите один тип данных в файле: номера ведите через проверку, ID грузите в очередь напрямую.
- Считает, что дублей в базе нет, раз строки разные
+7 900…, 8 900… и 7900… до нормализации это три записи одного человека: база выглядит больше, чем есть, и лимит тратится трижды.
Приведите номера к единому виду до загрузки, а сверку делайте по MAX ID — он не зависит от формы записи.
- Ведёт телефонную базу сразу в инвайтинг
Строки без профиля в MAX занимают слоты дневного лимита и превращаются в мусорные ошибки в отчёте.
Прогоните список через «Проверку номеров» и берите в очередь только подтверждённые ID.
Коротко
- Отдельной кнопки «удалить дубли» нет: повторы снимаются на входе — в парсинге, в очереди и при переносе между модулями.
- Надёжный ключ один — MAX ID. Телефон работает только после нормализации, текст строки не работает почти никогда.
- От повторов между запусками защищает история статусов цели, а не ручная чистка файла.
- В работу уходит только pending: success, already, privacy и ambiguous обратно не откатываются.
Слова, которые встретились7
- База
- Ваш список MAX ID или номеров, с которым вы вправе работать. Загружается файлом или списком.
- Очередь
- Записи, которые ещё не получили окончательный результат. Сохраняется между запусками и не теряется при паузе.
- Ожидает (pending)
- Запись сохранена, но результат по ней ещё не получен — её можно обработать позже.
- Неоднозначно (ambiguous)
- Связь оборвалась после отправки: MAX мог принять запрос, а мог и нет. Повторять сразу нельзя — получится дубль.
- Приватность
- Настройка получателя, запрещающая приглашать его в чаты. Это окончательный ответ, а не ошибка запуска.
- Дневной лимит
- Потолок действий на один аккаунт за календарный день. Сбрасывается со сменой даты по Москве.
- Цель
- Чат или канал, куда идёт работа. Задаётся ссылкой MAX или числовым chat ID.
Проверьте свою базу на реальном запуске
Загрузите небольшой кусок списка и посмотрите, сколько строк дошло до очереди. Обычно это самая честная оценка качества базы.