Почему при вызове метода VK API wall.createComment от имени бота не прикрепаются attachments?

В методе API <a href="https://dev.vk.com/ru/method/wall.createComment" rel="nofollow">https://dev.vk.com/ru/method/wall.createComment</a> указано, что параметр attachments обязателен, если не указан message. Я загружаю фотографию и получаю ID вида photo-238530833_456239364, но при вызове метода изображение не прикрепляется к комментарию.
  • 23 июля 2026 г. 16:01
Ответы на вопрос 1
Коротко — потому что фото не было загружено/сохранено в том «контексте», в котором вы делаете комментарий, либо вы передаёте неверный идентификатор. Частые причины и как исправить:

Что должно быть сделано (правильный поток):
1. Получить upload_url для загрузки именно на «wall»:
   - Для сообщества: photos.getWallUploadServer?group_id=GROUP_ID
   - Для пользователя: photos.getWallUploadServer (без group_id)
2. Загрузить файл на полученный upload_url (multipart, поле photo).
3. Вызвать photos.saveWallPhoto с тем же group_id (если загружали в группу) и параметрами server/photo/hash — получите массив с photo объектом: owner_id, id и, возможно, access_key.
4. Вызвать wall.createComment с attachments, где attachments = "photo{owner_id}_{id}" (если есть access_key — "photo{owner_id}_{id}_{access_key}"). Передавать owner_id с правильным знаком (для группы — отрицательное значение или формат с минусом в строке attachment, например photo-238530833_456239364). Если комментируете от имени сообщества — укажите from_group=1 и используйте токен сообщества.

Типичные ошибки
- Использовали не тот upload server (например, для messages или для другой группы) — фото сохранится в другом альбоме и не прикрепится к комментарию.
- Не вызвали photos.saveWallPhoto и не получили окончательный id/owner_id (только ответ upload сервера недостаточен).
- Забыл добавить access_key, если он возвращён — тогда доступ ограничен и прикрепление не проходит.
- Передали attachments без префикса photo или в неверном формате (нужно "photo{owner}_{id}" или с access_key).
- Используете токен пользователя, но пытаетесь прикрепить фото, сохранённое в сообществе, или наоборот — проверьте права и owner_id.
- Для комментирования от имени сообщества нужно либо использовать токен сообщества, либо указать from_group=1 в вызове (и owner_id у записи соответствующий).

Пример корректного вызова (схематично):
- photos.getWallUploadServer?group_id=238530833
- POST файла на upload_url → получаете server, photo, hash
- photos.saveWallPhoto?group_id=238530833&photo=...&server=...&hash=...
  → возвращает photo: owner_id = -238530833, id = 456239364, access_key = abc
- wall.createComment?owner_id=-238530833&post_id=123&attachments=photo-238530833_456239364_abc&from_group=1

Проверьте ответы на каждом шаге (особенно photos.saveWallPhoto) и используйте тот owner_id/id/access_key, который вернул API. Если пришлёте ваш код/ответы API (ответ upload сервера и photos.saveWallPhoto), помогу посмотреть конкретно.
Похожие вопросы