MaxMedia API позволяет автоматически обрабатывать фотографии товаров из вашей ERP системы 1С. Вы можете отправлять до 100 фотографий за один запрос и получать обработанные изображения.
https://maxmedia.uz/api/v1Создайте общий модуль MaxMediaAPI с функциями для работы с API:
// Общий модуль: MaxMediaAPI
// Константы (вынесите в настройки)
Перем BaseURL;
Перем APIKey;
Процедура ПриНачалеРаботыСистемы()
BaseURL = "https://maxmedia.uz/api/v1";
APIKey = "mm_ВАШ_API_КЛЮЧ_ЗДЕСЬ";
КонецПроцедуры
// Функция создания HTTP-соединения
Функция СоздатьHTTPСоединение() Экспорт
SSL = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение(
"maxmedia.uz", // Хост
443, // Порт HTTPS
, // Логин
, // Пароль
, // Прокси
60, // Таймаут
SSL // SSL
);
Возврат HTTPСоединение;
КонецФункции
// Функция отправки POST запроса
Функция ОтправитьPOSTЗапрос(Путь, ТелоJSON) Экспорт
HTTPСоединение = СоздатьHTTPСоединение();
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("X-API-Key", APIKey);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоJSON, КодировкаТекста.UTF8);
Попытка
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Возврат HTTPОтвет;
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
// Функция отправки GET запроса
Функция ОтправитьGETЗапрос(Путь) Экспорт
HTTPСоединение = СоздатьHTTPСоединение();
Заголовки = Новый Соответствие;
Заголовки.Вставить("X-API-Key", APIKey);
HTTPЗапрос = Новый HTTPЗапрос(Путь, Заголовки);
Попытка
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Возврат HTTPОтвет;
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
// Функция отправки фото на обработку
Функция ОтправитьФотоНаОбработку(МассивURLФото, ИдПромпта = Неопределено, ТекстПромпта = "") Экспорт
// Формируем тело запроса
Данные = Новый Структура;
Данные.Вставить("images", МассивURLФото);
Если ИдПромпта <> Неопределено Тогда
Данные.Вставить("prompt_id", ИдПромпта);
ИначеЕсли ТекстПромпта <> "" Тогда
Данные.Вставить("custom_prompt", ТекстПромпта);
КонецЕсли;
Данные.Вставить("output_format", "png");
Данные.Вставить("image_size", "auto");
// Конвертируем в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
JSONСтрока = ЗаписьJSON.Закрыть();
// Отправляем запрос
HTTPОтвет = ОтправитьPOSTЗапрос("/api/v1/process", JSONСтрока);
Если HTTPОтвет = Неопределено Тогда
Возврат Новый Структура("Успех, Ошибка", Ложь, "Ошибка соединения");
КонецЕсли;
// Парсим ответ
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Если HTTPОтвет.КодСостояния = 200 Тогда
Возврат Новый Структура("Успех, TaskId, Сообщение", Истина, Результат.task_id, Результат.message);
Иначе
Возврат Новый Структура("Успех, Ошибка", Ложь, Результат.detail);
КонецЕсли;
КонецФункции
// Пример использования:
//
// МассивФото = Новый Массив;
// МассивФото.Добавить("https://example.com/photo1.jpg");
// МассивФото.Добавить("https://example.com/photo2.jpg");
//
// Результат = MaxMediaAPI.ОтправитьФотоНаОбработку(МассивФото, 1);
// Если Результат.Успех Тогда
// Сообщить("Задача создана: " + Результат.TaskId);
// Иначе
// Сообщить("Ошибка: " + Результат.Ошибка);
// КонецЕсли;
// Функция проверки статуса задачи
Функция ПроверитьСтатусЗадачи(TaskId) Экспорт
HTTPОтвет = ОтправитьGETЗапрос("/api/v1/status/" + TaskId);
Если HTTPОтвет = Неопределено Тогда
Возврат Новый Структура("Успех, Ошибка", Ложь, "Ошибка соединения");
КонецЕсли;
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Если HTTPОтвет.КодСостояния = 200 Тогда
Возврат Новый Структура(
"Успех, Статус, ВсегоФото, Обработано, Ошибок",
Истина,
Результат.status,
Результат.total_images,
Результат.processed_images,
Результат.failed_images
);
Иначе
Возврат Новый Структура("Успех, Ошибка", Ложь, Результат.detail);
КонецЕсли;
КонецФункции
// Статусы задачи:
// - "pending" - в очереди
// - "processing" - обрабатывается
// - "completed" - завершено
// - "partial" - частично завершено (есть ошибки)
// - "failed" - ошибка
// Функция получения результатов обработки
Функция ПолучитьРезультатЗадачи(TaskId) Экспорт
HTTPОтвет = ОтправитьGETЗапрос("/api/v1/result/" + TaskId);
Если HTTPОтвет = Неопределено Тогда
Возврат Новый Структура("Успех, Ошибка", Ложь, "Ошибка соединения");
КонецЕсли;
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Если HTTPОтвет.КодСостояния = 200 Тогда
// Формируем массив с изображениями
Изображения = Новый Массив;
Для Каждого Фото Из Результат.images Цикл
СтруктураФото = Новый Структура;
СтруктураФото.Вставить("ОригинальныйURL", Фото.original_url);
СтруктураФото.Вставить("РезультатURL", Фото.result_url);
СтруктураФото.Вставить("Статус", Фото.status);
СтруктураФото.Вставить("Ошибка", Фото.error);
Изображения.Добавить(СтруктураФото);
КонецЦикла;
Возврат Новый Структура(
"Успех, Статус, Изображения, СрокХранения",
Истина,
Результат.status,
Изображения,
Результат.expires_at
);
Иначе
Возврат Новый Структура("Успех, Ошибка", Ложь, Результат.detail);
КонецЕсли;
КонецФункции
// Функция скачивания изображения
Функция СкачатьИзображение(URLИзображения, ПутьСохранения) Экспорт
// URL будет в формате: https://maxmedia.uz/static/uploads/taskid/image.png
// Нужно скачать и сохранить
HTTPСоединение = СоздатьHTTPСоединение();
// Извлекаем путь из URL
URLЧасти = СтрРазделить(URLИзображения, "maxmedia.uz");
Путь = URLЧасти[1];
HTTPЗапрос = Новый HTTPЗапрос(Путь);
Попытка
HTTPСоединение.Получить(HTTPЗапрос, ПутьСохранения);
Возврат Истина;
Исключение
Возврат Ложь;
КонецПопытки;
КонецФункции
// Процедура обработки фотографий номенклатуры
Процедура ОбработатьФотографииНоменклатуры(СсылкаНоменклатура) Экспорт
// 1. Собираем URL фотографий номенклатуры
МассивФото = Новый Массив;
// Получаем фото из вашей базы (адаптируйте под свою структуру)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Фото.URL КАК URLФото
|ИЗ РегистрСведений.ФотоНоменклатуры КАК Фото
|ГДЕ Фото.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", СсылкаНоменклатура);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
МассивФото.Добавить(Выборка.URLФото);
КонецЦикла;
Если МассивФото.Количество() = 0 Тогда
Сообщить("Нет фотографий для обработки");
Возврат;
КонецЕсли;
// 2. Отправляем на обработку
// prompt_id = 1 - используем готовый шаблон промпта из админки
Результат = MaxMediaAPI.ОтправитьФотоНаОбработку(МассивФото, 1);
Если НЕ Результат.Успех Тогда
Сообщить("Ошибка отправки: " + Результат.Ошибка);
Возврат;
КонецЕсли;
TaskId = Результат.TaskId;
Сообщить("Задача создана: " + TaskId);
// 3. Ждём завершения (опрашиваем каждые 5 секунд)
МаксПопыток = 120; // 10 минут максимум
Для Попытка = 1 По МаксПопыток Цикл
// Пауза 5 секунд
НачВремя = ТекущаяУниверсальнаяДатаВМиллисекундах();
Пока (ТекущаяУниверсальнаяДатаВМиллисекундах() - НачВремя) < 5000 Цикл
// Ждём
КонецЦикла;
Статус = MaxMediaAPI.ПроверитьСтатусЗадачи(TaskId);
Если НЕ Статус.Успех Тогда
Сообщить("Ошибка проверки статуса: " + Статус.Ошибка);
Продолжить;
КонецЕсли;
Сообщить("Статус: " + Статус.Статус + " (" + Статус.Обработано + "/" + Статус.ВсегоФото + ")");
Если Статус.Статус = "completed" ИЛИ Статус.Статус = "partial" ИЛИ Статус.Статус = "failed" Тогда
Прервать;
КонецЕсли;
КонецЦикла;
// 4. Получаем результаты
РезультатЗадачи = MaxMediaAPI.ПолучитьРезультатЗадачи(TaskId);
Если НЕ РезультатЗадачи.Успех Тогда
Сообщить("Ошибка получения результата: " + РезультатЗадачи.Ошибка);
Возврат;
КонецЕсли;
// 5. Скачиваем и сохраняем обработанные фото
Для Каждого Фото Из РезультатЗадачи.Изображения Цикл
Если Фото.Статус = "completed" И Фото.РезультатURL <> Неопределено Тогда
// Формируем путь для сохранения
ПутьСохранения = КаталогВременныхФайлов() + "обработанное_" + Строка(Новый УникальныйИдентификатор) + ".png";
Если MaxMediaAPI.СкачатьИзображение("https://maxmedia.uz" + Фото.РезультатURL, ПутьСохранения) Тогда
Сообщить("Сохранено: " + ПутьСохранения);
// Здесь можно загрузить в базу 1С
// ...
Иначе
Сообщить("Ошибка скачивания: " + Фото.РезультатURL);
КонецЕсли;
ИначеЕсли Фото.Статус = "failed" Тогда
Сообщить("Ошибка обработки: " + Фото.Ошибка);
КонецЕсли;
КонецЦикла;
Сообщить("Обработка завершена!");
КонецПроцедуры
/api/v1/me| Код | Описание | Решение |
|---|---|---|
401 |
Неверный API ключ | Проверьте заголовок X-API-Key |
404 |
Задача не найдена | Проверьте task_id |
429 |
Превышен лимит | Подождите или увеличьте лимит |
400 |
Неверные параметры | Проверьте JSON запроса |
500 |
Ошибка сервера | Свяжитесь с поддержкой |
Возникли вопросы по интеграции? Свяжитесь с нами: