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)
ns = '{http://base.google.com/ns/1.0}'
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.
