Первая версия автопостинга обычно собирается быстро. Текст есть, картинка есть, расписание есть, и пост в назначенное время уходит в Telegram. На демонстрации всё выглядит готовым. Трудности начинаются позже, когда сервис неделями работает без присмотра и публикует в несколько соцсетей сразу. Ниже то, на что мы сами натыкались, пока делали и сопровождали OMEMO, сервис, который готовит посты и публикует их по расписанию. Если вы заказываете автопостинг, по этому списку можно проверить подрядчика. Если делаете его сами, это список того, что лучше заложить сразу.
«Опубликовано», хотя поста нет
Самая неприятная ошибка выглядит так. В интерфейсе у поста стоит зелёная отметка, клиент спокоен, а в группе пусто. Обычно причина в том, что сервис посчитал успехом сам факт отправки запроса. Площадка ответила, но в ответе была ошибка: истёк доступ, картинка не прошла проверку, превышен лимит. Код не стал разбирать ответ и записал «готово».
Лечится это строгим правилом: пост считается опубликованным только тогда, когда площадка вернула ссылку на него или его номер. Нет ссылки — значит, ошибка, даже если запрос формально прошёл. Ссылка заодно полезна клиенту: из карточки поста можно сразу перейти к нему в соцсети и убедиться глазами.
Один пост, несколько площадок, разные исходы
Когда пост уходит в три соцсети, исходов больше двух. В Telegram вышел, во «ВКонтакте» нет, в третьей площадке висит на проверке. Если у поста один общий статус, приходится выбирать между «успешно» и «ошибка», и любой вариант врёт.
Поэтому в OMEMO у поста своя строка состояния для каждой площадки: отправлен, доставлен, ошибка, и для ошибки текст причины. Повтор тоже идёт по площадке. Если «ВКонтакте» не принял пост, сервис переотправляет его только туда, а не публикует второй раз в Telegram. Дубль в канале подписчики замечают быстрее, чем пропуск.
С частично опубликованными постами есть ещё одна тонкость. Их надо либо довести до конца, либо явно закрыть. Иначе в базе копятся посты в состоянии «вышел наполовину», время которых давно прошло, и через полгода уже никто не помнит, что с ними делать.
Доступ к соцсети однажды заканчивается
Сервис публикует от имени клиента, а значит, держит ключ доступа к его аккаунту или сообществу. Ключи истекают. Их отзывают, когда клиент меняет пароль или отключает приложение в настройках. Площадка меняет правила, и старый способ входа перестаёт работать.
Само по себе это не авария. Авария начинается, когда сервис тихо продолжает пытаться публиковать с мёртвым ключом, а клиент узнаёт об этом от подписчиков. Нормальное поведение: сервис распознаёт ошибку доступа отдельно от прочих, приостанавливает публикации в эту площадку и прямо говорит владельцу, что нужно переподключить аккаунт. Повторять запрос с истёкшим ключом бесполезно, а иногда и вредно: часть площадок за серию неудачных попыток ограничивает приложение.
Расписание: десять постов на десять утра
Пока постов немного, их расставляют руками. Когда контент-план составляет ИИ на месяц вперёд, легко получить пачку публикаций на одно и то же время. Причина обычно скучная: план собрался с общим временем по умолчанию, и все посты унаследовали его.
Для подписчиков это выглядит как спам, а для площадки как подозрительная активность. Расписание должно само держать промежутки между постами в одном канале и учитывать часовой пояс аудитории, а не сервера. Сервер может стоять в Германии, а читатели жить в Москве, и пост «на девять утра» выйдет в одиннадцать.
Сервис молчит, и это тоже сигнал
Отдельный класс поломок вообще не даёт ошибок. Очередь встала, задача планировщика не запустилась, и ничего не публикуется. Ни одного красного статуса, потому что ни одной попытки не было.
От этого спасает простой сторож со стороны: раз в час он смотрит, когда в каждый канал последний раз выходил пост, и если по плану публикации были, а за двое суток не вышло ничего, поднимает тревогу. У нас был случай, когда такой сторож исправно находил проблему, но не мог отправить уведомление: в окружении, где он запускался по расписанию, не было нужных настроек, и отправка падала. Поэтому теперь находка сначала пишется в файл и только потом отправляется. Заодно сторожа самого стоит проверять: однажды специально остановить публикации и убедиться, что тревога пришла.
«Неизвестно» не равно нулю
Многие сервисы автопостинга собирают тренды: смотрят популярные посты по теме клиента и подсказывают, о чём писать. Для этого они считают реакции: просмотры, лайки, комментарии. Площадки не всегда отдают все цифры. Где-то комментарии скрыты, где-то счётчик недоступен без особых прав.
Соблазн записать в таком случае ноль велик, и код так часто и делает. Но тогда пост с тысячей комментариев, которые площадка просто не показала, попадает в отчёт как неинтересный, и выводы о трендах строятся на выдуманных нулях. Правильно хранить «нет данных» отдельно и не учитывать такие посты при сравнении.
Внешние сервисы отвечают через раз
Автопостинг редко живёт сам по себе. Картинки генерирует одна модель, тексты другая, фоновую музыку к видео берут из бесплатного каталога. Каждый внешний сервис иногда отвечает пустотой или ошибкой, причём не по вашей вине.
Здесь два правила. Первое: короткий повтор при пустом ответе, потому что многие сбои случайны и проходят со второй попытки. Второе: для того, что нужно постоянно и всегда одинаково, лучше держать своё. Мы, например, после нескольких сбоев каталога музыки сложили набор фоновых треков на свой сервер. Прослушивание и сборка роликов больше не зависят от того, ответил ли чужой сайт.
ИИ-тексты в голосе клиента
Последний пункт не про сбои, а про то, почему клиенты отказываются от автопостинга через месяц. Лента начинает звучать как рекламный буклет: одинаковые вступления, восклицательные знаки, слова, которыми живые люди не пишут.
Помогает не длинная инструкция модели, а образцы. Несколько настоящих постов клиента показывают тон лучше любого описания. Плюс правило, которое сервис соблюдает сам: не придумывать цены, сроки и факты, которых нет в материалах клиента. Пост с неверной ценой обходится дороже пропущенного поста.
Что из этого входит в работу
Всё перечисленное мы закладываем в автопостинг на заказ с самого начала: статус по каждой площадке, проверку публикации по ссылке, отдельную обработку истёкшего доступа, промежутки в расписании, сторожа тишины и тексты в вашем стиле. Это не дополнительные опции, а то, без чего сервис работает только на демонстрации.
Если у вас уже есть автопостинг и он ведёт себя странно (посты пропадают, статусы не совпадают с лентой, публикации внезапно прекратились), напишите в Telegram @signmark. Посмотрим и скажем, в чём дело.
Craft Podium