
Источник публикует новость с временной фотографией, а позже меняет её на график. Текст в вашем канале обновился, но первая картинка осталась. По типу сообщения всё выглядит одинаково: и раньше, и теперь это фотография.
В октябре KMVSG исправил такую ошибку в работающем боте публикаций. Приёмка включила новую публикацию и отдельный аудит старой ленты: одинаковая ошибка могла сохраниться задолго до исправления кода.
Синхронизация публикаций
Тип файла не определяет его содержимое
- 01Источник
- 02Изменение
- 03Замена
- 04Проверка
- У фотографии проверяется идентификатор медиа.
- Для старых сообщений выбирается доступный способ исправления.
- Итог сверяется чтением опубликованной ленты.
Сравнивайте само медиа, а не только тип сообщения
Причина ошибки оказалась в обработке изменений источника. Удаление фотографии уже учитывалось, а замена одной фотографии другой при сохранении типа photo обновляла только подпись и текстовый хвост. Поэтому в целевой ленте оставалось первое изображение.
В обработчик добавлено сохранение идентификатора фотографии или документа из MTProto и его сравнение при редактировании. Изменение идентификатора запускает загрузку текущего медиа. Проверка одного лишь времени правки или типа вложения такую замену не описывает достаточно точно.
Сохраните связь между частями публикации
Новость может состоять из изображения с подписью и отдельного продолжения текста. Исправлять нужно всю связку: актуальное медиа, подпись и связанный хвост. Журнал исходной публикации должен знать все целевые сообщения.
Для свежих замен исправленный обработчик публикует новую связку и затем удаляет прежнюю. При ошибке удаления предусмотрен откат новых сообщений, чтобы не оставлять дубликаты. Приёмка проверила конкретную замену в работающей ленте и доступность новой фотографии на публичной странице Telegram.
Старую ленту проверяйте отдельным проходом
Новый обработчик не означает, что ранее скопированные изображения уже исправлены. Ретроспективная проверка выделила 4 088 публикаций с фотографиями и отсутствующей сохранённой сигнатурой медиа. Среди 465 квадратных изображений нашлось 13 визуальных совпадений с известным прежним баннером; совпадения проверили вручную.
Поиск по форме изображения использовался для сокращения выборки, а не как команда на массовую замену всех квадратных фотографий. Решение о ремонте опиралось на сравнение с подтверждённым изображением и чтение текущего источника.
Учитывайте возможности редактирования старого поста
Telegram Bot API предоставляет editMessageMedia для изменения медиа и отдельно ограничивает удаление сообщений. Поэтому возможность исправить старую публикацию нужно проверять для конкретного сообщения и прав используемого аккаунта.
В одном из 13 случаев в источнике сохранилась актуальная фотография, и её вернули в существующий пост. В остальных 12 источник уже удалил медиа; старые баннеры заменили нейтральным изображением канала. Идентификаторы сообщений, положение в ленте, текст и связанное продолжение сохранились. Это удалило неверное оформление, но не восстановило отсутствующие исходные фотографии.
Проверяйте опубликованный результат
Полный набор из 138 тестов прошёл, оба сервиса бота продолжили работу. Итоговая повторная проверка охватила 13 старых публикаций и свежий исправленный пост: прежних баннеров в этих 14 сообщениях не осталось.
Для следующего выпуска полезно проверять три сценария отдельно: изменение подписи, замену файла и удаление медиа в источнике. При неполном результате журнал должен сохранять состояние ремонта, чтобы следующая попытка не создала лишнюю публикацию.
Короткий чек-лист
- Хранить идентификатор исходного медиа
- Различать замену и удаление вложения
- Учитывать связанные части длинного текста
- Проверять доступность правки старого сообщения
- Не подменять отсутствующий источник выдуманным изображением
- Повторно прочитать исправленные публикации
Ссылки и исходный код
В материале раскрыты запросы: Telegram бот, Замена фотографии, Редактирование публикаций, Синхронизация медиа.