Описание
С конца сентября все отправки сообщений с фото падают в UploadService.upload_photo ещё до загрузки файла:
File ".../pymax/api/uploads/service.py", line 79, in upload_photo
photo_id = str(parse_qs(parsed_url.query)["photoIds"][0])
KeyError: 'photoIds'
The above exception was the direct cause of the following exception:
...
pymax.exceptions.UploadError: Photo upload URL does not contain photoIds
MAX перестал добавлять параметр photoIds в ссылку, которую возвращает PHOTO_UPLOAD. Ссылка теперь выглядит так: https://iu.oneme.ru/uploadImage?r=<token>. При этом photo_id в upload_photo нужен только как ключ, чтобы найти токен в ответе на POST.
Что видно в продакшене
- MAX переходил на новый формат постепенно: первые такие ошибки появились 25.09.2026, а с 02.10.2026 падают 100% отправок с фото.
- Сообщения без вложений уходят нормально.
- У нас ничего не менялось: образ и версия библиотеки те же, что работали до 25.09.
- 2.4.1 не помогает: там тот же поиск по
parse_qs(...)["photoIds"][0].
Окружение
- maxapi-python 2.3.1 (в 2.4.1 код
upload_photo тот же)
- Python 3.12
Исправление
PR #107 исправляет ровно этот случай. В нём токен берётся из единственной записи ответа загрузки, а если записей ноль или больше одной, поднимается ошибка. Мы поставили у себя такую же логику патчем: если photoIds в ссылке есть, токен ищется по нему, как раньше, а если нет, берётся единственная запись. Будет здорово, если PR #107 примут и выпустят релиз.
Описание
С конца сентября все отправки сообщений с фото падают в
UploadService.upload_photoещё до загрузки файла:MAX перестал добавлять параметр
photoIdsв ссылку, которую возвращаетPHOTO_UPLOAD. Ссылка теперь выглядит так:https://iu.oneme.ru/uploadImage?r=<token>. При этомphoto_idвupload_photoнужен только как ключ, чтобы найти токен в ответе на POST.Что видно в продакшене
parse_qs(...)["photoIds"][0].Окружение
upload_photoтот же)Исправление
PR #107 исправляет ровно этот случай. В нём токен берётся из единственной записи ответа загрузки, а если записей ноль или больше одной, поднимается ошибка. Мы поставили у себя такую же логику патчем: если
photoIdsв ссылке есть, токен ищется по нему, как раньше, а если нет, берётся единственная запись. Будет здорово, если PR #107 примут и выпустят релиз.