MAX Autopost 1.11.9: почему в MAX уходил только текст без картинки и кнопки

27 сентября 2026 я выложил MAX Autopost 1.11.9. Это не правка кнопки «Читать» и не история про сертификат Минцифры. После публикации в группу или канал MAX приходил только текст. Картинки не было. Кнопки тоже не было.

Плагин: MAX Autopost (Free). Предыдущий разбор: 1.11.8 и sticky в очереди.

Что было видно в логах

Плагин картинку и кнопки собирал. MAX отклонял само тело запроса:

send_attachments  attachments_count=2; has_image=1; button_count=2
send              HTTP 400: {"code":"proto.payload","message":"Can't deserialize body"}

Если в сообщении был HTML (жирный заголовок), срабатывал запасной путь и уходил голый текст. Если HTML не было, отправка падала целиком: «Не удалось отправить ни в один target (0/1)».

Красная плашка на вкладке «Техпомощь» рядом с текстом про сертификат Минцифры к этому не относится. Это мёртвый GET /chats: MAX снял метод в июне 2026. На отправку постов он не влияет.

Что на самом деле ломалось

С 19 июля 2026 плагин ходит на platform-api2.max.ru.

Загрузка картинки по-прежнему двухшаговая. CDN после upload отвечает так:

{"photos":{"photoIds":{"token":"mediafile_token"}}}

В POST /messages API2 ждёт только:

{"type":"image","payload":{"token":"mediafile_token"}}

Плагин с версии 1.2.1 клал в image.payload весь JSON ответа загрузки. На старом platform-api.max.ru так работало. На API2 схема строже и отвечает proto.payload / Can't deserialize body.

Кнопки «Читать» и «Подписаться» тут ни при чём: без картинки текстовая отправка проходила с кодом 200.

Что я поправил в 1.11.9

1. Token из ответа загрузки

Из photos.*.token забирается только токен. В API уходит {"token":"..."}. Если токена нет, но есть https-URL, уходит {"url":"..."}. Сырой JSON step2 больше не отправляется.

2. Fallback не выкидывает вложения

Если HTML-вариант не проходит, первый повтор идёт с теми же картинкой и кнопками, но без format. Голый текст без вложений это только второй запасной путь. Тот же повтор включается и для plain-отправки с вложениями: иначе 400 на картинке оставлял пост в ошибке без второй попытки.

3. Жирный заголовок через <b>

Официальные примеры MAX используют <b>, не <strong>. Заголовок по-прежнему жирный.

4. Список чатов

GET /chats больше не вызывается. На вкладке «Техпомощь» нет красной ошибки, которую можно принять за проблему с сертификатом. Chat ID по-прежнему копируется из клиента MAX. У каналов ID часто с минусом.

Что сделать вам

  1. Обновите плагин до 1.11.9. С включённым GitHub updater релиз подтянется сам. Либо скачайте ZIP с GitHub Releases.
  2. Нажмите «Отправить тест». В логе send должен быть HTTP 200. В группе картинка, текст и кнопка.
  3. Если пост уже висит в ошибке, отправьте его ещё раз кнопкой «Отправить сейчас» или поставьте в очередь заново.

Сертификаты Минцифры на хостинге ради этой ошибки ставить не нужно. TLS и так живой, если текстовые сообщения доходили.

SHA-256 архива релиза: eb8e61567c8a65bf673c5159eadd6b6bb9c4387ea68f41ae42fab646ac75437e.

Для тех, кто копает глубже

Симптом легко спутать с «сертификатом Минцифры» или с мёртвым GET /chats. Смотреть нужно в тело POST /messages: в image.payload уходил сырой JSON загрузки, а API2 ждёт только {"token":"..."}.

  • Endpoint: POST https://platform-api2.max.ru/messages?chat_id=…
  • Ошибка: proto.payload / Can’t deserialize body
  • Триггер: image.payload = сырой JSON {"photos":{...}}
  • Фикс: payload: {"token":"..."} из photos.*.token
  • Docs MAX: отправка медиа
  • Changelog: CHANGELOG.md

Полный список правок: CHANGELOG.md. Страница проекта: MAX Autopost на krivoshein.site.

Поддержка: aleksey@krivoshein.site · Issues на GitHub.

MAX Autopost (Free): автопостинг записей WordPress в мессенджер MAX. MIT.


Комментарии загружаются…