Неделя на картинки во ВКонтакте: чего мы не знали про токены сообществ
Посты уходили в паблик, а картинки к ним - нет. Ни ошибки, ни предупреждения. История про то, как сообщение об отказе в доступе можно неделю читать не так.
Симптом
Посты публиковались, картинки не прикладывались. Приложение не падало, в логах было чисто, площадка отвечала, что запись создана. Просто в ленте она появлялась без фотографии. Хуже явной ошибки: чинить нечего, потому что формально всё работает.
Что оказалось
Токен сообщества не может приложить фотографию к записи на стене. Это не нехватка разрешений - способ загрузки фотографии для такого типа доступа недоступен в принципе, и площадка отвечает отказом в доступе.
Мы проверили это на версиях API с 5.81 по 5.199, на сервисном токене и на токене с полным набором разрешений. Результат везде одинаковый.
Что перепробовали до этого
Сначала решили, что дело в разрешениях, и перевыпускали токен. Потом - что в версии API, и перебирали их по порядку.
Потом попробовали приложить картинку документом: она прикладывается, но открывается отдельным окном и выглядит не как обычная фотография в посте. От этого варианта отказались - портить вид поста ради работающего механизма не стоит.
Чем кончилось
Публикацией через браузер с рабочего компьютера.
Сервер готовит текст и картинки и кладёт их в очередь, а на компьютере по расписанию поднимается браузер с сохранённым профилем, открывает нужный паблик и публикует запись так же, как это сделал бы человек.
Главным при этом остаётся сервер: он решает, что и когда выходит, компьютер только нажимает кнопки.
Что из этого стоит запомнить
Отказ в доступе не всегда означает нехватку прав. Иногда он означает, что такого способа для вашего типа ключа нет вообще, и перевыпускать токен можно бесконечно. Мы потеряли на этом неделю, потому что читали ответ площадки как «добавь разрешение», а не как «этим ключом сюда нельзя».


