Разработка · No-code автоматизация

Автоматизация каталога без написания кода

В двух словах

При запуске без кода отправляется пачка фотографий товаров через одну HTTP-ноду, выдерживается пауза в 3 секунды, опрашивается статус пакета, и процесс повторяется до завершения, после чего URL-адреса записываются обратно в таблицу.

  • Кредиты: 4 credits при 2K · 5 credits при 4K
  • Типичное время: 1.5–4 min per image
  • Обработка: async, polling

Все показатели на этой странице взяты из документации API Photta · проверено

HTTP-нода, нода ожидания и условие. n8n, Make или любой инструмент с поддержкой HTTP может прогнать весь каталог через batch endpoint.

RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin/batch \
  -H "Authorization: Bearer $PHOTTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_images": [
    {
      "image": "https://cdn.yourstore.com/products/jacket-front.jpg",
      "back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
      "image_side": "front"
    },
    {
      "image": "https://cdn.yourstore.com/products/shirt-front.jpg",
      "image_side": "front"
    },
    {
      "image": "https://cdn.yourstore.com/products/trousers-front.jpg",
      "image_side": "front"
    }
  ],
  "style": "3d",
  "background_color": "white",
  "resolution": "2K",
  "aspect_ratio": "3:4",
  "user_instruction": "closed front, buttoned up",
  "brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')

Как это работает

Таблица на входе, папка с изображениями на выходе

Экспортируйте каталог, настройте одну HTTP-ноду, зациклите с паузами, запишите URL-адреса обратно.

  1. Шаг 1

    Экспорт каталога

    Одна строка на предмет одежды с публичным URL изображения. Эта колонка — единственные входные данные, которые требуются для batch endpoint.

  2. Шаг 2

    Получение API-ключа Photta

    Сохраните его в хранилище учетных данных вашего инструмента автоматизации, а не в теле ноды, чтобы экспортированные воркфлоу не содержали секретов.

  3. Шаг 3

    Настройка HTTP-ноды

    POST, заголовок Bearer и тело JSON, показанное здесь. Каждый элемент в массиве — один предмет одежды; поля стилизации применяются ко всем элементам сразу.

  4. Шаг 4

    Цикл с паузами

    Подождите 3 секунды, запросите статус пакета, проверьте, завершен ли он, и повторите при необходимости. Этот интервал рекомендован в документации.

  5. Шаг 5

    Соблюдайте лимиты

    Ограничение на размер пакета и лимит параллельных пакетов зависят от вашего тарифного плана. Отправьте один пакет, дождитесь завершения, затем отправляйте следующий.

  6. Шаг 6

    Запись URL-адресов обратно

    Когда пакет завершен, каждый элемент содержит свой собственный output URL. Запишите их в таблицу и скачайте файлы в рамках того же прогона.

Ноды и их содержимое

Тело запроса берется прямо из примеров в документации API; цикл использует документированный интервал polling.

{
  "product_images": [
    {
      "image": "https://cdn.yourstore.com/products/jacket-front.jpg",
      "back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
      "image_side": "front"
    },
    {
      "image": "https://cdn.yourstore.com/products/shirt-front.jpg",
      "image_side": "front"
    },
    {
      "image": "https://cdn.yourstore.com/products/trousers-front.jpg",
      "image_side": "front"
    }
  ],
  "style": "3d",
  "background_color": "white",
  "resolution": "2K",
  "aspect_ratio": "3:4",
  "user_instruction": "closed front, buttoned up",
  "brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}
RESPONSE=$(curl -s -X POST https://api.photta.app/api/v1/ghost-mannequin/batch \
  -H "Authorization: Bearer $PHOTTA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "product_images": [
    {
      "image": "https://cdn.yourstore.com/products/jacket-front.jpg",
      "back_image": "https://cdn.yourstore.com/products/jacket-back.jpg",
      "image_side": "front"
    },
    {
      "image": "https://cdn.yourstore.com/products/shirt-front.jpg",
      "image_side": "front"
    },
    {
      "image": "https://cdn.yourstore.com/products/trousers-front.jpg",
      "image_side": "front"
    }
  ],
  "style": "3d",
  "background_color": "white",
  "resolution": "2K",
  "aspect_ratio": "3:4",
  "user_instruction": "closed front, buttoned up",
  "brand_label_id": "7cc9f988-068b-44cd-8004-22f486b10e67"
}')
ID=$(echo "$RESPONSE" | jq -r '.data.id')
{
  "nodes": [
    {
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "parameters": {
        "amount": 3,
        "unit": "seconds"
      }
    },
    {
      "name": "Read batch",
      "type": "n8n-nodes-base.httpRequest",
      "parameters": {
        "method": "GET",
        "url": "https://api.photta.app/api/v1/ghost-mannequin/batch/{{ $json.data.batch_id }}"
      }
    },
    {
      "name": "Done?",
      "type": "n8n-nodes-base.if",
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.data.status }}",
              "value2": "completed"
            }
          ]
        }
      }
    }
  ]
}
# 600 requests per minute per key, fixed window.
# One batch submission plus one poll every 3 seconds is ~21 requests per minute
# per batch in flight, so the concurrency cap binds long before the rate limit.
# On a 429, wait the Retry-After seconds (30 by default) before the next node runs.

Частые вопросы разработчиков

Вопросы о сценариях без кода

Нужно ли писать код?

Нет. Здесь всё представляет собой HTTP-запрос с телом JSON, который умеет отправлять любой инструмент автоматизации. Единственный текст, который вы вводите, — это тело запроса, приведенное на этой странице.

Сколько изображений помещается в один прогон?

Лимит API на пакет составляет 5 изображений на тарифах Free и Hobby, 10 на Seller, 25 на Brand и 50 на Studio. Каталоги большего объема запускаются несколькими пакетами один за другим.

Что произойдет, если обработка одного изображения завершится ошибкой?

Остальная часть пакета продолжит выполняться. В теле ответа пакета указано, сколько задач завершилось со статусом completed, а сколько — со статусом failed, при этом credits за неудачные элементы возвращаются.

Можно ли запускать это по расписанию?

Да. Запускайте воркфлоу каждую ночь и обрабатывайте строки, в которых еще нет изображений. Цикл polling работает одинаково вне зависимости от того, запускает ли его человек или планировщик.

Работает ли это в Make или Zapier?

В любом сервисе, где можно отправить HTTP-запрос с заголовком и телом JSON, а также настроить ожидание между шагами. Названия нод могут отличаться, но сами три шага остаются прежними.

Каталог без участия разработчика

Одна HTTP-нода и ожидание. Тело запроса на этой странице взято прямо из документации.