Saltar al contenido principal
La Product Recommendation API es el método preferido para importaciones de catálogos que superen los 50.000 productos. Utilice este endpoint en lugar de reimportar todo el catálogo a diario. Este tutorial describe los pasos y los problemas habituales para importar un catálogo de productos a Kameleoon usando la Product Recommendation API. La Product Recommendation API sigue principios RESTful. El proceso de importación implica estos pasos consecutivos:
  • Import Categories: Envíe una solicitud POST para asegurarse de que todas las categorías estén actualizadas antes de subir los productos.
  • Import and Update Products: Envíe una solicitud PUT para importar el catálogo de productos en la cuenta de Kameleoon.
  • Update available products: Solicitud PATCH para actualizar la disponibilidad de los productos.
La API también ofrece un endpoint dedicado a cambiar la disponibilidad de productos existentes en Kameleoon, que es un enfoque más ligero.

Datos

  • Shop ID eehj3eu84299kg5ghw5a6743r8 y Shop Secret pmd5362597thrgq8k256ep01t0
    • Localícelos en Recommendations > Settings > Store settings en la aplicación Kameleoon. Contacte con el Customer Success Manager para obtener la clave si es necesario.
  • Webhooks http://www.webhook.com/importCategoriesApiResponses/ y http://www.webhook.com/importProductsApiResponses/
    • Los webhooks garantizan la finalización del paso Import Categories antes de la importación del catálogo y verifican la finalización de la solicitud Import Products.
  • Catálogo de productos actual en Kameleoon:
[
{
    "id": "PD1", // String (max 64). Required
    "group_id": "Shoe", // String (max 64). Optional
    "name": "Sneaker", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["shoeID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
},
{
    "id": "PD2", // String (max 64). Required
    "group_id": "Glass", // String (max 64). Optional
    "name": "Sunglasses", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["glassID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
}
]
  • Categorías actuales en Kameleoon:
[ {{
            "id": "glassID",
            "name": "Glass"
        },
        {
            "id": "shoesID",
            "name": "shoes",
        },
}]
  • Productos a importar en Kameleoon:
    • El precio de PD2 (Glass) ha cambiado a tres y hay un nuevo producto con una nueva categoría ("id": "BootID", "name": "Boot")
{
    "id": "PD3", // String (max 64). Required
    "group_id": "Boot", // String (max 64). Optional
    "name": "Standard Boot", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["bootID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
}

Importar categorías

Utilice el endpoint Import categories para este paso. Los datos se envían como una cadena JSON dentro del cuerpo de la solicitud. Envíe todas las categorías en una única solicitud POST. El siguiente ejemplo envía todas las categorías —tanto existentes como nuevas— para permitir la importación de los nuevos productos:
curl -X POST -L 'https://api.products.kameleoon.com/import/categories' \
             -H 'Content-Type: application/json' \
             -d '{
   "shop_id":"eehj3eu84299kg5ghw5a6743r8",
   "shop_secret":"pmd5362597thrgq8k256ep01t0",
   "items":[
      {
         "id":"slassID",
         "name":"Glass"
      },
      {
         "id":"shoesID",
         "name":"shoes"
      },
      {
         "id":"bootID",
         "name":"boots"
      }
   ],
   "webhook":"http://www.webhook.com/importCategoriesApiResponses/"
}'
El webhook notifica al desarrollador al completarse la solicitud. Cuando todas las categorías especificadas se hayan importado y estén disponibles, se envía una solicitud POST al webhook designado.Utilice el webhook para importaciones grandes de categorías, ya que el procesamiento puede llevar varios minutos.Si importa productos utilizando el endpoint import product, el webhook garantiza que todas las categorías se procesen antes de iniciar la importación de productos. Los productos sin una categoría conocida se ignoran durante la importación.Ejemplo de una solicitud exitosa:
{ "status": "success"}
Ejemplo de una solicitud fallida:
{ "status": "error",  "message": "MESSAGE"}

Importar y actualizar productos

Utilice el endpoint Import Products para este paso. El límite de la API es de 40 solicitudes por minuto, con un máximo de una solicitud cada 1,5 segundos. El límite de peso de la solicitud es de 35 megabytes. El siguiente ejemplo envía el producto actualizado PD2, con los campos price y oldprice modificados, y el nuevo producto PD3. Se omite el producto PD1 porque permanece sin cambios.
# !!! IMPORTANT: Wait for a successful POST request to the webhook endpoint
# (http://www.webhook.com/importCategoriesApiResponses)
# from the Import Categories step before making this call.

#Check that all required fields are filled for each product

curl -X PUT -L 'https://api.products.kameleoon.com/import/products' \
             -H 'Content-Type: application/json' \
             -d '{
   "shop_id":"eehj3eu84299kg5ghw5a6743r8",
   "shop_secret":"pmd5362597thrgq8k256ep01t0",
   "items":[
{
    "id": "PD3", // String (max 64). Required
    "group_id": "Boot", // String (max 64). Optional
    "name": "StandardBoot", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["bootID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
},
{
    "id": "PD2", // String (max 64). Required
    "group_id": "Glass", // String (max 64). Optional
    "name": "Sunglasses", // String (max 255). Required
    "price": "3", // Float (positive). Required
    "oldprice": "1", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["glassID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
}
   ],
   "webhook":"http://www.webhook.com/importProductsApiResponses/"
}'

# check for the result of the request, which will be sent 
# to the provided webhook http://www.webhook.com/importProductsApiResponses/

Actualizar productos disponibles

Utilice el endpoint Update available products para gestionar el estado del stock. Este endpoint actualiza la lista de productos disponibles usando sus IDs. En este escenario, el producto PD1 se marca como no disponible al proporcionar los IDs de PD2 y PD3 y omitir el ID de PD1.
curl -X PATCH -L 'https://api.products.kameleoon.com/import/products' \
             -H 'Content-Type: application/json' \
             -d '{
   "shop_id":"eehj3eu84299kg5ghw5a6743r8",
   "shop_secret":"pmd5362597thrgq8k256ep01t0",
   "items":["PD2","PD3"],
}'

Recomendaciones clave

  1. Orden del flujo de trabajo Importe siempre las categorías antes que los productos
  2. Integridad de los datos Las importaciones de productos requieren todos los campos obligatorios
  3. Estrategia con webhooks Esencial para supervisar importaciones grandes
  4. Consejos de rendimiento
    • Lotes de productos ≤35 MB
    • Límite de velocidad: 40 solicitudes/minuto
    • Utilice únicamente el endpoint Update available products para cambiar la disponibilidad de un producto.
  5. Gestión de errores
    • Verifique los IDs de categoría
    • Compruebe los formatos de los campos
    • Supervise las respuestas de los webhooks