Оглавление

MAX Autopost это мой WordPress плагин, который отправляет опубликованные записи в MAX через platform-api.max.ru так, как это выглядит нормально в ленте. Картинка прикрепляется именно как изображение с подписью, текст не улетает отдельным сообщением, а ссылка на пост оформляется кнопкой «Читать».

Код открыт, репозиторий на GitHub: github.com/A-Krivoshen/max-autopost

MAX Autopost: автопостинг из WordPress в MAX одним сообщением (картинка + текст + кнопка)

Зачем это вообще нужно

Если вы пытались «наивно» отправлять картинку в 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 в репозитории.

MAX Autopost на GitHub

Планы развития

Сейчас фокус на стабильности. Надёжный upload, предсказуемая очередь, нормальные логи и диагностика. Дальше буду добавлять удобство аккуратно: шаблоны текста, более тонкие правила отправки, улучшение UX настроек. Без превращения в комбайн, который сам себя пугается.