Введение: Зачем боту уметь редактировать сообщения?
Представьте: ваш бот отправил пользователю ссылку на оплату, а через минуту платёжная система изменила 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" |
notify | true/false — уведомлять ли участников чата |
attachments | null (оставить как есть) или [] (удалить все вложения) |
⚠️ Важное ограничение
Редактировать вложения (фото, видео, файлы) нельзя. Вы можете только полностью удалить их, передав "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 | любой | ❌ | ❌ | низкая | простые скрипты |
| umaxbot | Python | ✅ | ❌ | средняя | production-боты |
| MaxLib | Python | ❌ | ✅ | средняя | userbot'ы |
| webmaxsocket | JS | ✅ | ✅ | средняя | Node.js боты |
| n8n-узел | low-code | ❌ | ❌ | низкая | автоматизации без кода |
Часть 5. Форматирование текста: Markdown и HTML
MAX поддерживает оба популярных формата.
| Стиль | Markdown | HTML |
|---|---|---|
| жирный | **текст** или __текст__ | <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-бот на Python →
umaxbot.✅ Userbot (личный аккаунт) →
MaxLib.✅ Node.js проект →
webmaxsocket.✅ Low-code автоматизация → n8n с MAX-узлом.
Запомните главное:
24 часа на редактирование.
Вложения не изменить.
4000 символов максимум.
Полезные ссылки
