Юзербот — это обычный аккаунт MAX с подтвержденным номером телефона, которым управляет скрипт. В отличие от официальных чат-ботов, юзербот сидит под капотом обычного клиентского профиля. Официального API для этого нет, платформа такие вольности не любит. Но если нужно обойти ограничения и автоматизировать рутину — приходится использовать сторонние библиотеки.
Что нужно знать перед запуском:
Скрипт работает 24/7 с обычного аккаунта.
Доступны любые действия, которые может выполнить живой человек.
Нужно жестко контролировать частоту запросов. Ошибка в лимитах — улетаете в бан.
На чем писать юзербота:
Green-API - Есть техподдержка, SLA, стабильные коннекты.
PyMax - open-source, Настраиваете сами, падают без предупреждения.
Разбираем Green-API
Green-API дает готовый интерфейс для управления аккаунтом MAX. Смотрим, что умеет этот шлюз.
1. Работа с сообщениями
Отправка:
SendMessage — текст до 4000 символов, поддерживает эмодзи.
SendFileByUrl — отправляет медиа по внешней ссылке.
SendFileByUpload — грузит локальный файл через multipart/form-data.
SendLocation — кидает геопозицию (широта, долгота, название).
SendContact — отправляет карточку vCard.
Скачивание файлов:
Для личных и групповых чатов используется метод DownloadFile. Тянет картинки, документы, аудио и видео.
2. Парсинг истории:
Чтобы выгрузить переписку из группы или диалога используется метод GetChatHistory, при этом максимальная глубина выгрузки чатов - до 5000 сообщений за 3 месяца, которые можно отфильтровать по дате.
HTTP-запрос:
HTTP
POST {{apiUrl}}/waInstance{{idInstance}}/getChatHistory/{{apiTokenInstance}}
Параметры:
Отправляем
url = "https://3100.api.green-api.com/waInstance{id}/getChatHistory/{token}" payload = { "chatId": "-730*******5943", "count": 500 } headers = { 'Content-Type': 'application/json' }
Ответ приходит в таком виде:
[ { "type": "outgoing", "idMessage": "1763115112345", "timestamp": 1754999812, "typeMessage": "extendedTextMessage", "chatId": "10000000", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "extendedTextMessage": { "text": "Я использую GREEN-API для отправки этого сообщения!", "description": "", "title": "", "jpegThumbnail": "", "forwardingScore": 0, "isForwarded": false }, "statusMessage": "", "sendByApi": true, }, { "type": "outgoing", "idMessage": "1763115112345", "timestamp": 1754987080, "typeMessage": "extendedTextMessage", "chatId": "-69876543210123", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "extendedTextMessage": { "text": "Я использую GREEN-API для отправки этого сообщения!", "description": "", "title": "", "jpegThumbnail": "", "forwardingScore": 0, "isForwarded": false }, "statusMessage": "", "sendByApi": true, }, { "type": "incoming", "idMessage": "1763115112345", "timestamp": 1754986980, "typeMessage": "textMessage", "chatId": "10000000", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "senderId": "10000000", "senderName": "Ходабрыш Пробешёлов", "senderContactName": "Ходабрыш Пробешёлов" }, { "type": "incoming", "idMessage": "1763115112345", "timestamp": 1754986980, "typeMessage": "textMessage", "chatId": "-69876543210123", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "senderId": "10000000", "senderName": "Ходабрыш Пробешёлов", "senderContactName": "Ходабрыш Пробешёлов" } ]
Для точечных задач есть методы GetMessage (получить конкретное сообщение по ID), а также LastIncomingMessages и LastOutgoingMessages (последние диалоги).
3 Ограничения:
отправка сообщений, файлов, локаций, контактов - не более 50 в секунду
загрузка файлов, получение истории чата, создание и обновление настроек группы, удаление участников, установка админа, получение своих контактов - не более 1 в секунду
редактирование сообщений - не более 50 в секунду.
В целом, для рутинных задач лимитов более, чем достаточно.
3. Администрирование групп
Автоматизируем управление чатами (работа с каналами GreenApi Пока не реализовано).
Создание и настройка:
Используем CreateGroup для создания чата. Сразу закидываем туда участников через AddGroupParticipant и установить аватарку через SetGroupPicture.
Позже можно поменять название (UpdateGroupName) и настройки (UpdateGroupSettings), добавить или наоборот, отобрать права админа.
Разрешения, которые можно установить в группе через GreenApi:
JSON
{ "chatId": "-10000000000000", "allowParticipantsAddMembers": true, "allowParticipantsEditGroupSettings": false, "allowParticipantsPinMessages": true }
allowParticipantsAddMembers — разрешение на добавление участников.
allowParticipantsEditGroupSettings — разрешение на редактирование профиля группы.
allowParticipantsPinMessages — закреп сообщений.
Получение информации о группе через GetGroupData:
id чата
владелец
наименование
описание
дата создания обычно хранится в формате Unix timestamp (целое число - количество секунд или миллисекунд с 1 января 1970 года)
если открыто владельцем - инвайт ссылка на группу
разрешение добавлять участников
разрешение изменять настройки группы участниками
разрешение менять аватарку группы участниками
количество участников
список участников (сейчас возвращается только в случае, если участников >=100, если больше- только админов)
Пример ответа:
JSON
{ "chatId": "-10000000000000", "owner": "79001234567", "subject": "Название группы", "description": "Описание группы", "creation": 1764637936, "groupInviteLink": "https://invite.link/abc123", "allowParticipantsAddMembers": true, "allowParticipantsEditGroupSettings": false, "allowParticipantsPinMessages": true, "size": 150, "participants": [ { "chatId": "79001234567", "isAdmin": true, "isSuperAdmin": true } ] }
Нюанс: если в группе больше 100 человек, API вернет роль только вашего бота. Спарсить всех участников не выйдет.
Работа с участниками:
Добавление — AddGroupParticipant.
Удаление — RemoveGroupParticipant.
Даем админку — SetGroupAdmin.
Забираем админку — RemoveAdmin.
4. Сервисные функции
GetChats — собираем список всех диалогов пользователя. Групповые чаты ID всегда со знаком минус.
Пример:
JSON
[ { "chatId": "-10000000000000", "phoneNumber": 0 }, { "chatId": "79001234567", "phoneNumber": 79001234567 } ]
У групп phoneNumber всегда равен 0.
У личных чатов номер виден только если юзер не скрыл его настройками приватности.
CheckAccount — проверяем регистрацию (зарегистрирован ли номер в MAX):
Пример ответа:
JSON
{ "exist": true, "chatId": "79001234567" }
!Внимание: У GreenApi жёсткие лимиты на этот запрос (ограничение самого макса). Пользоваться точечно и в крайней необходимости. За чек базы контактов можно получить блокировку на 2 недели.
GetContacts — вытягиваем записную книжку юзера (контакты, сохраненные в телефонной книге юзера, если аккаунт подтянул ее с телефона, на котором зарегистрирован)
Пример ответа:
JSON
[ { "chatId": "79001234567", "name": "Иван Петров", "contactName": "Иван", "type": "user", "phoneNumber": 79001234567 } ]
Примеры из практики
1. Модератор группы
Бот парсит историю сообщений чата. Видит спам (чекает по списку стоп слов) — сносит пост и отвечает автору заготовленным постом. Можно также удалить пользователя из этого и/или других чатов, где бот является админом.
Python
def moderate_group_messages(): notifications = client.receive_notification() for notification in notifications: if notification['type'] == 'incomingMessageReceived': message = notification['messageData']['textMessage'] chat_id = notification['senderData']['chatId'] if is_spam(message): client.delete_message(chat_id, message_id) client.send_message( chat_id, "⚠️ Нарушение правил чата" )
2. Автоинвайтер сотрудников
Скрипт раскидывает новичков по рабочим чатам в зависимости от отдела.
Python
def add_employee_to_groups(phone, department): groups = get_groups_by_department(department) for group in groups: client.add_group_participant( chat_id=group['chatId'], participant_chat_id=phone )
3. Генератор отчетов
Сам собирает данные из CRM и пушит сводку в рабочий чат.
Python
def send_daily_report(): stats = get_daily_statistics() report = f"📊 Отчет за {date.today()}:\n" report += f"Новые заказы: {stats['orders']}\n" report += f"Выручка: {stats['revenue']} руб.\n" client.send_message(
Чтобы выгрузить переписку из группы или диалога используется метод GetChatHistory, при этом максимальная глубина выгрузки чатов - до 5000 сообщений за 3 месяца, которые можно отфильтровать по дате.
HTTP-запрос:
HTTP
POST {{apiUrl}}/waInstance{{idInstance}}/getChatHistory/{{apiTokenInstance}}
Параметры:
Отправляем
url = "https://3100.api.green-api.com/waInstance{id}/getChatHistory/{token}" payload = { "chatId": "-730*******5943", "count": 500 } headers = { 'Content-Type': 'application/json' }
Ответ приходит в таком виде:
[ { "type": "outgoing", "idMessage": "1763115112345", "timestamp": 1754999812, "typeMessage": "extendedTextMessage", "chatId": "10000000", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "extendedTextMessage": { "text": "Я использую GREEN-API для отправки этого сообщения!", "description": "", "title": "", "jpegThumbnail": "", "forwardingScore": 0, "isForwarded": false }, "statusMessage": "", "sendByApi": true, }, { "type": "outgoing", "idMessage": "1763115112345", "timestamp": 1754987080, "typeMessage": "extendedTextMessage", "chatId": "-69876543210123", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "extendedTextMessage": { "text": "Я использую GREEN-API для отправки этого сообщения!", "description": "", "title": "", "jpegThumbnail": "", "forwardingScore": 0, "isForwarded": false }, "statusMessage": "", "sendByApi": true, }, { "type": "incoming", "idMessage": "1763115112345", "timestamp": 1754986980, "typeMessage": "textMessage", "chatId": "10000000", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "senderId": "10000000", "senderName": "Ходабрыш Пробешёлов", "senderContactName": "Ходабрыш Пробешёлов" }, { "type": "incoming", "idMessage": "1763115112345", "timestamp": 1754986980, "typeMessage": "textMessage", "chatId": "-69876543210123", "textMessage": "Я использую GREEN-API для отправки этого сообщения!", "senderId": "10000000", "senderName": "Ходабрыш Пробешёлов", "senderContactName": "Ходабрыш Пробешёлов" } ]
Для точечных задач есть методы GetMessage (получить конкретное сообщение по ID), а также LastIncomingMessages и LastOutgoingMessages (последние диалоги).
3 Ограничения:
отправка сообщений, файлов, локаций, контактов - не более 50 в секунду
загрузка файлов, получение истории чата, создание и обновление настроек группы, удаление участников, установка админа, получение своих контактов - не более 1 в секунду
редактирование сообщений - не более 50 в секунду.
В целом, для рутинных задач лимитов более, чем достаточно.
3. Администрирование групп
Автоматизируем управление чатами (работа с каналами GreenApi Пока не реализовано).
Создание и настройка:
Используем CreateGroup для создания чата. Сразу закидываем туда участников через AddGroupParticipant и установить аватарку через SetGroupPicture.
Позже можно поменять название (UpdateGroupName) и настройки (UpdateGroupSettings), добавить или наоборот, отобрать права админа.
Разрешения, которые можно установить в группе через GreenApi:
JSON
{ "chatId": "-10000000000000", "allowParticipantsAddMembers": true, "allowParticipantsEditGroupSettings": false, "allowParticipantsPinMessages": true }
allowParticipantsAddMembers — разрешение на добавление участников.
allowParticipantsEditGroupSettings — разрешение на редактирование профиля группы.
allowParticipantsPinMessages — закреп сообщений.
Получение информации о группе через GetGroupData:
id чата
владелец
наименование
описание
дата создания обычно хранится в формате Unix timestamp (целое число - количество секунд или миллисекунд с 1 января 1970 года)
если открыто владельцем - инвайт ссылка на группу
разрешение добавлять участников
разрешение изменять настройки группы участниками
разрешение менять аватарку группы участниками
количество участников
список участников (сейчас возвращается только в случае, если участников >=100, если больше- только админов)
Пример ответа:
JSON
{ "chatId": "-10000000000000", "owner": "79001234567", "subject": "Название группы", "description": "Описание группы", "creation": 1764637936, "groupInviteLink": "https://invite.link/abc123", "allowParticipantsAddMembers": true, "allowParticipantsEditGroupSettings": false, "allowParticipantsPinMessages": true, "size": 150, "participants": [ { "chatId": "79001234567", "isAdmin": true, "isSuperAdmin": true } ] }
Нюанс: если в группе больше 100 человек, API вернет роль только вашего бота. Спарсить всех участников не выйдет.
Работа с участниками:
Добавление — AddGroupParticipant.
Удаление — RemoveGroupParticipant.
Даем админку — SetGroupAdmin.
Забираем админку — RemoveAdmin.
4. Сервисные функции
GetChats — собираем список всех диалогов пользователя. Групповые чаты ID всегда со знаком минус.
Пример:
JSON
[ { "chatId": "-10000000000000", "phoneNumber": 0 }, { "chatId": "79001234567", "phoneNumber": 79001234567 } ]
У групп phoneNumber всегда равен 0.
У личных чатов номер виден только если юзер не скрыл его настройками приватности.
CheckAccount — проверяем регистрацию (зарегистрирован ли номер в MAX):
Пример ответа:
JSON
{ "exist": true, "chatId": "79001234567" }
!Внимание: У GreenApi жёсткие лимиты на этот запрос (ограничение самого макса). Пользоваться точечно и в крайней необходимости. За чек базы контактов можно получить блокировку на 2 недели.
GetContacts — вытягиваем записную книжку юзера (контакты, сохраненные в телефонной книге юзера, если аккаунт подтянул ее с телефона, на котором зарегистрирован)
Пример ответа:
JSON
[ { "chatId": "79001234567", "name": "Иван Петров", "contactName": "Иван", "type": "user", "phoneNumber": 79001234567 } ]
Примеры из практики
1. Модератор группы
Бот парсит историю сообщений чата. Видит спам (чекает по списку стоп слов) — сносит пост и отвечает автору заготовленным постом. Можно также удалить пользователя из этого и/или других чатов, где бот является админом.
Python
def moderate_group_messages(): notifications = client.receive_notification() for notification in notifications: if notification['type'] == 'incomingMessageReceived': message = notification['messageData']['textMessage'] chat_id = notification['senderData']['chatId'] if is_spam(message): client.delete_message(chat_id, message_id) client.send_message( chat_id, "⚠️ Нарушение правил чата" )
2. Автоинвайтер сотрудников
Скрипт раскидывает новичков по рабочим чатам в зависимости от отдела.
Python
def add_employee_to_groups(phone, department): groups = get_groups_by_department(department) for group in groups: client.add_group_participant( chat_id=group['chatId'], participant_chat_id=phone )
3. Генератор отчетов
Сам собирает данные из CRM и пушит сводку в рабочий чат.
Python
def send_daily_report(): stats = get_daily_statistics() report = f"📊 Отчет за {date.today()}:\n" report += f"Новые заказы: {stats['orders']}\n" report += f"Выручка: {stats['revenue']} руб.\n" client.send_message( chat_id="-10000000000000", message=report )
Юзерботы закрывают задачи, с которыми официальный API бота не справляется или не пускает из-за бюрократии. Платные шлюзы экономят время на поддержку инфраструктуры. Бесплатные библиотеки требуют прямых рук и готовности править код после каждого апдейта мессенджера.
Выбор зависит от ваших бюджетов и терпимости к рискам.
Техническая инфа актуальна на апрель 2026 года. Если копаете тему автоматизации и хотите обсудить кодинг по Max API — залетайте в топ 1 комьюнити разработчков: Max API Devs - 6max.ru/maxapidevs. В закрепе висит реализация кнопки, которую используют только разработчики Max в своём боте и никто больше не знает об этом методе. Статья написана участником этого Dev сообщества - 6max.ru/biser. Наш гитхаб - github.com/MaxApiDevs
