Ir al contenido principal

Feed de productos y categorías XML

WoowUp permite importar y mantener actualizado el catálogo de productos a partir de un feed XML público. El formato soportado es el estándar Google Shopping Feed / Meta Feed (RSS 2.0 con namespace g: de Google Base).

El feed XML puede usarse como fuente de categorías y atributos de productos. En integraciones como Magento 2, la plataforma sigue siendo la fuente principal de productos, stock, precio lista y precio oferta; el feed XML complementa con categorías normalizadas y actúa como fallback de los campos que la API no provee.

Razón de uso en Magento: las categorías de Magento pueden estar desordenadas o no ser óptimas para marketing. El feed XML (Meta) se usa como fuente alternativa para normalizarlas.

Prerequisitos

Antes de configurar la integración, verificar que se cumplan los siguientes requisitos:

El feed XML es accesible vía URL pública (HTTP GET sin autenticación)

La URL devuelve Content-Type text/xml o application/xml

Cada <item> tiene al menos un campo de SKU, nombre y una categoría asignada (productos sin alguno de estos dos campos son descartados)

El campo de SKU es único por producto y coincide con el ID en la plataforma fuente

El namespace g: está declarado si se usan campos Google Shopping: xmlns:g="http://base.google.com/ns/1.0"

El feed se actualiza automáticamente en la plataforma de origen

Si el feed incluye campos custom para árbol de categorías, el orden de concatenación está acordado con el equipo de WoowUp

⚠ Si el feed requiere autenticación o proviene de un servidor con IP restringida, coordinar con el equipo de integraciones antes de avanzar.


Estructura del XML esperada

El feed debe seguir el formato estándar de Meta en RSS 2.0 con el namespace g: de Google Base. Cada producto debe estar contenido en un nodo <item>:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<item>
<g:id><![CDATA[SKU-001]]></g:id>
<title><![CDATA[Nombre del Producto]]></title>
<g:product_type><![CDATA[Categoria > Subcategoria]]></g:product_type>
</item>
</channel>
</rss>

Campos del feed

Campo

Tipo

Descripción

<g:id>

Requerido

SKU o ID único del producto. Debe coincidir con el ID en la plataforma fuente.

<title>

Requerido

Nombre del producto.

<g:product_type>

Requerido

Categoría del producto. Campo principal que usa WoowUp para normalizar categorías.

Resto de campos

Opcional

WoowUp los toma de la plataforma fuente (ej: Magento). Solo se usan del feed como fallback si la plataforma no los tiene.

Mapeo de campos XML → WoowUp

La siguiente tabla detalla cómo se traduce cada tag XML al modelo de datos de WoowUp:

Campo WoowUp

Tag XML

Observaciones

sku

<g:id>

Identificador único del producto. Debe coincidir exactamente con el SKU/ID en la plataforma fuente.

name

<title>

Nombre del producto.

category_id

<g:product_type>

Ruta de categoría. Campo principal para normalizar el árbol. Puede enriquecerse con tags custom.

Lógica de transformación por campo

SKU (g:id → sku)

El valor de <g:id> se usa sin modificaciones. Es el identificador único del producto en WoowUp y el campo de matching con la plataforma fuente.

⚠ El campo g:id debe coincidir exactamente con el SKU del producto en la plataforma fuente para que WoowUp pueda hacer el match correctamente. Diferencias de mayúsculas, espacios o prefijos rompen el vínculo.


Categoría (g:product_type → category_id)

El tag <g:product_type> es el campo principal para construir la jerarquía de categorías en WoowUp. El separador puede ser '>' o ' > ' (con o sin espacios). El prefijo 'Root Catalog' se ignora si está presente.

Valor <g:product_type>

category_id en WoowUp

Root Catalog > Philco > Audio > Audio para Autos > Parlantes

Philco/Audio/Audio para Autos/Parlantes

Root Catalog > ElectroOfertas > Electrodomésticos > Termotanques

ElectroOfertas/Electrodomésticos/Termotanques

Calzado>zapatilla

Calzado/zapatilla


Árbol enriquecido con campos custom

Para construir una jerarquía más precisa, se pueden sumar campos custom al feed que WoowUp concatena con g:product_type para armar el árbol completo. Los campos y el orden de concatenación se definen junto al equipo de WoowUp durante el Onboarding según la estructura de cada cliente:


<!-- Ejemplo: tres niveles con campos custom -->

<g:product_type><![CDATA[Calzado]]></g:product_type>

<tipo_producto>Zapatillas</tipo_producto>

<subtipo>Urbano</subtipo>

<!-- WoowUp arma: Calzado > Zapatillas > Urbano -->

📌 Los nombres de los tags custom y el orden de concatenación varían por cliente. Siempre definir y documentar en el Onboarding.


Funcionamiento del feed

  • El cliente comparte un link único al feed XML.

  • Ese link se mantiene actualizado por el cliente desde su plataforma.

  • WoowUp consume la información automáticamente desde la integración.

  • No es necesario forzar actualizaciones manuales.

Si el cliente usa Magento con Mageplaza Product Feed, la URL del feed suele tener la forma: https://tienda.com/media/mageplaza/feed/feed_[nombre].xm

Configuración en WoowUp

Los pasos exactos de configuración del feed dependen de la integración principal del cliente y se coordinan con el equipo técnico de WoowUp durante el Onboarding. En términos generales:

  • El cliente provee la URL pública del feed XML.

  • El equipo de WoowUp configura el feed como fuente de categorías (y fallback de otros campos si aplica).

  • Se define en Onboarding si se usan campos custom para el árbol de categorías y el orden de concatenación.

  • WoowUp consume el feed automáticamente. No se requieren actualizaciones manuales del lado del cliente.

  • El switch de activación de la integración lo enciende el equipo de WoowUp una vez validada toda la configuración.

Validación y troubleshooting

Validación rápida del feed

Antes de configurar la integración, se puede validar el XML manualmente:

# Contar items en el feed

curl -s 'https://tienda.com/feed.xml' | grep -c '<item>'

# Ver IDs y nombres de los primeros 3 productos

curl -s 'https://tienda.com/feed.xml' | python3 -c "

import sys, xml.etree.ElementTree as ET

tree = ET.parse(sys.stdin)

for item in list(tree.findall('./channel/item'))[:3]:

print(item.find(f'{ns}id').text, '-', item.find('title').text[:60])"


Problemas frecuentes

Problema

Solución / Acción

Producto no se actualiza

Verificar que <g:id> no haya cambiado entre sincronizaciones. Si cambió, se crea un nuevo registro en lugar de actualizar el existente.

SKU no hace match con la plataforma

El valor de <g:id> debe ser idéntico al SKU/ID en la plataforma fuente. Revisar espacios, mayúsculas y prefijos.

Precio llega como 0 o nulo

Verificar si el precio tiene texto extra (ej: '469.90 PEN'). Confirmar con el cliente el tag correcto.

Categoría no se construye

Verificar separador: debe ser '>' con o sin espacios. Revisar que no haya caracteres especiales en la ruta.

Árbol de categorías incompleto

Si se usan campos custom, validar que estén definidos y en el orden correcto. Coordinar con el equipo de integraciones.

Stock siempre 0

El feed puede usar <g:Salable_Stock> u otro tag. Revisar el XML del cliente y actualizar el mapeo.

Error 404 / 502 al acceder al feed

El feed no está disponible públicamente. Verificar la URL con el cliente y que no requiera autenticación.

Caracteres especiales rotos

Verificar que el feed declare encoding UTF-8 en la primera línea XML.

Notas adicionales

  • El conector XML es de solo lectura: WoowUp nunca escribe en el feed del cliente.

  • Los productos eliminados del feed no se borran automáticamente de WoowUp; se marcan como inactivos.

  • Si un mismo <g:id> aparece en múltiples <item>, se procesa el último encontrado.

  • La imagen principal se toma de <g:image_link>. Las imágenes adicionales (<g:additional_image_link>) pueden no procesarse según versión del conector.

  • Los valores dentro de <![CDATA[...]]> se procesan correctamente; no requieren tratamiento especial.

  • Espacios o saltos de línea dentro de <![CDATA[...]]> se normalizan (trim).

📌 Para feeds muy grandes (> 50.000 productos), coordinar con el equipo técnico para evaluar compresión gzip o paginación del feed.

¿Ha quedado contestada tu pregunta?