Юзербот — это обычный аккаунт 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