← Назад к блогу

Как редактировать сообщения в боте для мессенджера MAX: полное руководство

Как редактировать сообщения в боте для мессенджера MAX: полное руководство

Введение: Зачем боту уметь редактировать сообщения?

Представьте: ваш бот отправил пользователю ссылку на оплату, а через минуту платёжная система изменила URL. Или бот показал курсы валют, а они обновились. Что делать? Правильно — редактировать сообщение, не создавая спам из новых уведомлений.

В мессенджере MAX (ранее известный как VK MAX / OneMe) такая возможность есть. Более того, она проще, чем кажется.

В этой статье я разберу:

  • Как работает API редактирования в MAX.

  • Готовые примеры кода на Python и JavaScript.

  • Сравнение всех доступных библиотек.

  • Подводные камни и ограничения, о которых молчит документация.

🚀 Главный вывод сразу: редактировать сообщения в MAX можно, но есть жёсткое ограничение — только в течение 24 часов после отправки.

Часть 1. Официальный способ: HTTP API MAX

MAX предоставляет классический REST API. Если вы не хотите тянуть тяжёлые библиотеки — используйте прямой HTTP-запрос.

Метод PUT /messages

Эндпоинт:

PUT https://platform-api.max.ru/messages?message_id={ID_СООБЩЕНИЯ}

Пример запроса через cURL:

curl -X PUT "https://platform-api.max.ru/messages?message_id=123456789" \
  -H "Authorization: токен_бота" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Отредактированное сообщение с **жирным** текстом",
    "format": "markdown"
  }'

Параметры тела запроса:

 
 
ПолеЗначение
textНовый текст сообщения
format"markdown" или "html"
notifytrue/false — уведомлять ли участников чата
attachmentsnull (оставить как есть) или [] (удалить все вложения)

⚠️ Важное ограничение

Редактировать вложения (фото, видео, файлы) нельзя. Вы можете только полностью удалить их, передав "attachments": [].

Часть 2. Реализация на Python (3 подхода)

Python — самый популярный язык для ботов. Посмотрим на три актуальные библиотеки.

2.1. umaxbot — рекомендуемый для production

Асинхронный фреймворк с синтаксисом, знакомым по aiogram.

from maxbot.bot import Bot
from maxbot.dispatcher import Dispatcher

bot = Bot("YourToken")
dp = Dispatcher(bot)

@dp.message()
async def on_message(message):
    # Отправляем
    sent = await bot.send_message(
        chat_id=message.sender.id,
        text="Первоначальный текст"
    )
    
    # Редактируем
    await bot.update_message(
        chat_id=message.sender.id,
        message_id=sent.message_id,
        text="Новый текст ✨"
    )

Почему выбираем: асинхронность, удобная типизация, стабильность.

2.2. MaxLib — для userbot'ов (личных аккаунтов)

from max import MaxClient

client = MaxClient("token")

@client.on_message()
def handler(message):
    msg = client.send_message(message.chat.id, "Старый текст")
    msg.edit("Новый текст")  # просто и элегантно

Минус: библиотека временно не поддерживается из-за блокировки тестовых аккаунтов.

2.3. python-max-client — максимальный контроль

from python_max_client.client import MaxClient
from python_max_client.functions.messages import edit_message

await edit_message(client, chat_id, message_id, "Новый текст")

Подходит для сложных сценариев, где нужен прямой доступ к WebSocket.

Часть 3. Реализация на JavaScript/Node.js

Для JS-разработчиков есть библиотека webmaxsocket.

Установка

npm install webmaxsocket

Пример: бот, который редактирует своё сообщение через 3 секунды

const { WebMaxClient } = require('webmaxsocket');

const client = new WebMaxClient({ name: 'my_bot' });

client.onMessage(async (message) => {
    if (message.senderId === client.me.id) return;
    
    const sent = await message.reply({
        text: 'Привет! Сейчас я изменю это сообщение...'
    });
    
    setTimeout(async () => {
        await sent.edit({
            text: '✅ Сообщение было отредактировано!'
        });
    }, 3000);
});

await client.start();

Работает через WebSocket — идеально для реального времени.

Часть 4. Сравнение всех подходов (таблица)

 
 
ПодходЯзыкАсинхронностьWebSocketСложностьКогда использовать
HTTP APIлюбойнизкаяпростые скрипты
umaxbotPythonсредняяproduction-боты
MaxLibPythonсредняяuserbot'ы
webmaxsocketJSсредняяNode.js боты
n8n-узелlow-codeнизкаяавтоматизации без кода

Часть 5. Форматирование текста: Markdown и HTML

MAX поддерживает оба популярных формата.

 
 
СтильMarkdownHTML
жирный**текст** или __текст__<b> / <strong>
курсив*текст* или _текст_<i> / <em>
~~зачёркнутый~~~~текст~~<del> / <s>
++подчёркнутый++++текст++<ins> / <u>
код`код`<code> / <pre>
ссылка[текст](url)<a href="url">

Пример:

{
  "text": "**Внимание!** Обновление вышло. [Скачать](https://example.com)",
  "format": "markdown"
}

Часть 6. Реальные кейсы из опенсорса

Кейс 1: Мост между Telegram и MAX

Проект max-telegram-bridge-bot синхронизирует сообщения между двумя мессенджерами.
При редактировании в MAX — обновляется текст в Telegram, и наоборот.

// Фрагмент на Go (упрощённо)
func (b *Bridge) handleMaxMessageEdited(update *max.MessageEdited) {
    tgMsgId := b.repository.GetTGMessage(update.Message.ID)
    if tgMsgId != 0 {
        b.tgClient.EditMessage(tgMsgId, update.Message.Text)
    }
}

Кейс 2: Репостер контента

Java-бот переопубликовывает посты из Telegram в MAX. Если исходный пост отредактирован — бот правит сообщение и в MAX.

Часть 7. Главные ограничения и как их обойти

 
 
ОграничениеЗначениеЧто делать?
⏳ Время на редактирование24 часаПроектируйте логику бота так, чтобы правки вносились сразу
📎 Вложениянельзя изменитьПриходится удалять и отправлять новое сообщение
📏 Длина текста4000 символовРазбивайте длинные сообщения на несколько
🚫 Блокировка аккаунтовтестовые аккаунты банятИспользуйте официальные бот-аккаунты

❗ Самый частый сценарий ошибки: попытка отредактировать сообщение, которому больше суток. API вернёт ошибку.

Часть 8. Готовый шаблон бота с умным редактированием

Вот полноценный бот на umaxbot, который запоминает последнее сообщение каждого пользователя и переиспользует его (вместо спама новыми).

import asyncio
from maxbot.bot import Bot
from maxbot.dispatcher import Dispatcher
from maxbot.types import Message

bot = Bot("YOUR_BOT_TOKEN")
dp = Dispatcher(bot)

# Словарь: user_id → message_id
last_message_ids = {}

@dp.message()
async def handle_message(message: Message):
    user_id = message.sender.id

    if user_id in last_message_ids:
        # Редактируем существующее сообщение
        await bot.update_message(
            chat_id=user_id,
            message_id=last_message_ids[user_id],
            text=f"🔄 Обновлено: {message.text}"
        )
    else:
        # Отправляем новое
        sent = await bot.send_message(
            chat_id=user_id,
            text=f"✉️ Вы написали: {message.text}"
        )
        last_message_ids[user_id] = sent.message_id

async def main():
    await dp.start_polling()

if __name__ == "__main__":
    asyncio.run(main())

Как это работает:
Пользователь пишет любое сообщение → бот либо создаёт новое сообщение, либо редактирует предыдущее. Чисто и без флуда.

Заключение и рекомендации

Редактировать сообщения в MAX-боте — можно, нужно и несложно.

Ваш выбор подхода зависит от задачи:

  • Простой скрипт → прямой HTTP-запрос.

  • Production-бот на Pythonumaxbot.

  • Userbot (личный аккаунт)MaxLib.

  • Node.js проектwebmaxsocket.

  • Low-code автоматизация → n8n с MAX-узлом.

Запомните главное:

  • 24 часа на редактирование.

  • Вложения не изменить.

  • 4000 символов максимум.

Полезные ссылки