MAX Autopost это мой WordPress плагин, который отправляет опубликованные записи в MAX через platform-api.max.ru так, как это выглядит нормально в ленте. Картинка прикрепляется именно как изображение с подписью, текст не улетает отдельным сообщением, а ссылка на пост оформляется кнопкой «Читать».
Код открыт, репозиторий на GitHub: github.com/A-Krivoshen/max-autopost
Зачем это вообще нужно
Если вы пытались «наивно» отправлять картинку в MAX, вы могли увидеть классическую картину. Вместо картинки прилетает файл. Иногда картинка «пропадает», а в сообщении остаётся один текст. Иногда всё срабатывает, но через раз, и начинается танец с логами и проклятиями в сторону API.
Причина простая. MAX довольно строго относится к payload и порядку вложений. Плагин закрывает эту боль и делает поведение предсказуемым. Пост опубликован, значит пост ушёл в MAX ровно в том виде, который ожидается.
Ключевой момент MAX, из-за которого у многих «не работает»
MAX может проигнорировать image attachment, если нарушить любое из условий. Это тот самый случай, когда «вроде всё правильно», но на стороне сервиса просто ничего не прикрепилось.
- Нельзя передавать только token. В
image.payloadдолжен уйти полный JSON, который вернул upload. С вложенными структурами, если MAX их возвращает. - Image attachment обязан быть первым в
attachments. - Кнопка
inline_keyboardдолжна идти вторым attachment, если она включена.
MAX Autopost делает upload в два шага и в сообщение передаёт полный JSON ответа после upload step2. Именно поэтому картинка прикрепляется как изображение, а не как файл.
Что умеет плагин
Логика простая и продовая. Без комбайна, но со всем, что нужно в реальном сайте.
- Отправка в MAX одним сообщением: IMAGE (если включено) потом TEXT (заголовок плюс excerpt или override) потом BUTTON «Читать» (если включено).
- Очередь через WP Cron: обработка раз в минуту, за один проход до 5 записей.
- Ретраи с backoff, чтобы временные проблемы MAX не превращались в ручную боль.
- Логи в админке: последние события с шагом, HTTP кодом и сообщением.
- Настройка кнопки: галка «Включить кнопку» плюс текст кнопки.
- Метабокс в редакторе записи: «Не отправлять в MAX», override текста, кнопка «Отправить сейчас».
- Fallback изображений: миниатюра записи затем первая локальная картинка из контента затем Site Icon.
- Опция хранить токен вне базы через wp-config.php.
Установка
Самый простой вариант поставить релизный архив из GitHub Releases и активировать как обычный плагин WordPress.
Дальше по шагам. MAX Autopost → Настройки → Token и Chat ID → Сохранить → Отправить тест.
Настройка Token и Chat ID
В MAX у вас должен быть бот. Бота нужно добавить в нужный канал или чат и выдать ему права на публикацию. Если прав нет, будут ошибки, либо отправка будет «тихо» не проходить.
- Token это токен бота MAX, который уходит в заголовке Authorization.
- Chat ID это id канала или чата, куда нужно постить.
Если не хотите хранить токен в базе WordPress, можно вынести его в wp-config.php:
define('KRV_MAX_TOKEN', 'ВАШ_BOT_TOKEN');
Как выглядит сообщение в MAX
Плагин собирает сообщение именно так, как MAX «любит».
- Текст идёт в поле
text, это подпись к посту. - Картинка идёт первым attachment
type=image. - Кнопка «Читать» идёт вторым attachment
type=inline_keyboardи ведёт на permalink записи.
Очередь и статусы
При публикации пост помечается как queued и попадает в очередь. Дальше WP Cron раз в минуту отправляет пачку сообщений. Если MAX временно недоступен, срабатывают повторные попытки. Если проблема постоянная, например неправильный токен или нет прав, пост уйдёт в error, а причина будет видна в логах.
Частые вопросы и быстрые ответы
Тестовое сообщение улетает, а посты нет
Проверьте, что пост действительно в статусе publish, не стоит ли галка «Не отправлять в MAX», и есть ли у записи картинка, если включена отправка изображений. Затем загляните во вкладки «Очередь» и «Логи». Там обычно сразу видно, на каком шаге всё остановилось.
Картинка не прикрепляется или приходит файлом
Почти всегда это проблема upload payload и порядка attachments. Плагин отправляет image первым и передаёт полный JSON ответа upload step2. Если в логах видно upload_step2 и валидный JSON, но в MAX картинка не появляется, смотрим ответ messages send и права бота в канале.
Нет кнопки «Читать»
Проверьте, включена ли галка «Включить кнопку», и задан ли текст кнопки. Кнопка формируется как inline_keyboard и уходит вторым attachment.
Очередь не отправляет
На низкотрафиковых сайтах WP Cron может запускаться редко. Тогда помогает либо ручной запуск очереди из вкладки «Очередь», либо системный cron на вызов wp-cron.php.
Лицензия и вклад в проект
Проект открыт и развивается публично. Если нашли баг или хотите улучшение, проще всего создать issue или pull request в репозитории.
Планы развития
Сейчас фокус на стабильности. Надёжный upload, предсказуемая очередь, нормальные логи и диагностика. Дальше буду добавлять удобство аккуратно: шаблоны текста, более тонкие правила отправки, улучшение UX настроек. Без превращения в комбайн, который сам себя пугается.