Юзербот — это обычный аккаунт 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
ссылка на оригинал статьи https://habr.com/ru/articles/1022316/