ChatGPT Business Hub - feed de productos - CSV - automatización - comercio electrónico
7 min lectura

Cómo preparar un feed CSV de productos para ChatGPT: nueve campos y validador

Plantilla CSV y validador Python probado para detectar campos faltantes, IDs duplicados, precio, stock y URL antes de conectar productos en ChatGPT Business Hub.

Cómo preparar un feed CSV de productos para ChatGPT: nueve campos y validador

Una tienda reclama su perfil en ChatGPT y conecta un catálogo. En la hoja original, el precio dice $18, la imagen apunta a una página HTML y dos variantes comparten el mismo ID. El archivo puede parecer correcto a simple vista, pero esos detalles hacen que el producto sea ambiguo o que una fila sea rechazada. La solución no es pedirle a una IA que «arregle el CSV» sin revisarlo: es construir un feed pequeño, validar sus campos y comprobar el resultado en la plataforma.

Esta guía es la parte operativa de nuestro artículo sobre Business Hub. OpenAI permite conectar un feed CSV después de la reclamación y verificación de identidad necesarias. También admite un URL alojado y, según la configuración, un feed de Shopify. Conectar productos no publica un Business Agent ni garantiza que ChatGPT los recomiende. Antes de empezar, confirma que tu negocio puede usar esa función en Business Hub.

Flujo de tres pasos: exportar una fila por variante, validar nueve campos y conectar el CSV para revisar errores en OpenAI

Los nueve campos que no pueden faltar

La especificación estable de productos de OpenAI exige item_id, title, description, url, brand, seller_name, image_url, availability y price para un feed de descubrimiento útil. Cada fila representa un artículo comprable o una variante concreta. El ID debe ser único y estable: si cambias precio o stock, mantén el ID; si la talla cambia, usa otro ID y los campos opcionales de agrupación cuando correspondan.

url debe llevar a la página pública del producto, idealmente con la variante seleccionada. image_url debe ser un enlace directo a la imagen pública de esa variante, no a la ficha ni a una ruta privada. availability acepta in_stock, out_of_stock, pre_order, backorder o unknown. Es mejor declarar unknown cuando realmente no sabes el stock que inventar «en existencia». El precio lleva cantidad y moneda, por ejemplo 18.00 USD; no uses $18, separadores de miles ni una cifra distinta a la que cobra tu tienda.

Un CSV mínimo que puedes adaptar

Guarda este ejemplo como productos.csv en UTF-8. example.com y la marca son datos de muestra: reemplázalos por tu tienda real, comprueba que la página y la imagen sean públicas y que el precio coincida con el checkout. Si el nombre contiene una coma, déjalo entre comillas, como hace la primera fila.

item_id,title,description,url,brand,seller_name,image_url,availability,price
MUG-350-BLUE,"Blue ceramic mug, 350 mL",Dishwasher-safe ceramic mug with a handle,https://example.com/products/mug-blue,Northline,Northline Home,https://example.com/images/mug-blue.jpg,in_stock,18.00 USD

Este ejemplo no representa el catálogo de SoyJB ni acredita que example.com tenga un producto real. Es una plantilla para probar la estructura. Si vendes tallas o colores, crea una fila por combinación comprable. Añade group_id, listing_has_variations y variant_dict según la sección de variantes de la especificación; no reutilices el mismo item_id para todas.

Valida antes de subir

El siguiente programa usa solo la biblioteca estándar de Python. Comprueba columnas y celdas obligatorias, IDs repetidos, estados de stock, formato básico de precio y que las dos URL sean absolutas. Pégalo en validar_feed.py y ejecuta python3 validar_feed.py productos.csv. Lo probé localmente con el ejemplo anterior y una muestra defectuosa: la primera devuelve «Chequeo local básico: OK»; la segunda señala stock inválido, precio cero, URL no absoluta e ID duplicado. No realiza solicitudes de red ni verifica que las imágenes carguen.

"""Chequeo local mínimo para un feed CSV de descubrimiento de productos.

No sustituye la validación, políticas ni aprobación de OpenAI.
Uso: python3 validar_feed.py productos.csv
"""

import csv
import re
import sys
from urllib.parse import urlparse

REQUIRED = (
    "item_id", "title", "description", "url", "brand", "seller_name",
    "image_url", "availability", "price",
)
STOCK = {"in_stock", "out_of_stock", "pre_order", "backorder", "unknown"}
PRICE = re.compile(r"^(?!0+(?:\.0{1,2})? )[0-9]+(?:\.[0-9]{1,2})? [A-Z]{3}$")


def public_url(value):
    parsed = urlparse(value)
    return parsed.scheme in {"http", "https"} and bool(parsed.netloc)


def validate(path):
    errors = []
    seen = set()
    with open(path, newline="", encoding="utf-8-sig") as file:
        reader = csv.DictReader(file)
        missing = [name for name in REQUIRED if name not in (reader.fieldnames or [])]
        if missing:
            return [f"Faltan columnas: {', '.join(missing)}"]
        for line, row in enumerate(reader, start=2):
            if None in row:
                errors.append(f"Línea {line}: hay más celdas que columnas")
            for name in REQUIRED:
                if not (row.get(name) or "").strip():
                    errors.append(f"Línea {line}: {name} vacío")
            item_id = (row.get("item_id") or "").strip()
            if item_id in seen:
                errors.append(f"Línea {line}: item_id repetido: {item_id}")
            seen.add(item_id)
            if row.get("availability") not in STOCK:
                errors.append(f"Línea {line}: availability inválido")
            if row.get("price") and not PRICE.fullmatch(row["price"]):
                errors.append(f"Línea {line}: precio inválido; usa 18.00 USD")
            for name in ("url", "image_url"):
                if row.get(name) and not public_url(row[name]):
                    errors.append(f"Línea {line}: {name} debe ser URL absoluta HTTP(S)")
    return errors


if __name__ == "__main__":
    if len(sys.argv) != 2:
        raise SystemExit("Uso: python3 validar_feed.py productos.csv")
    issues = validate(sys.argv[1])
    print("\n".join(issues) if issues else "Chequeo local básico: OK")
    raise SystemExit(bool(issues))

El chequeo es deliberadamente básico. La expresión de precio detecta formatos comunes con hasta dos decimales, pero no implementa todas las reglas de cada moneda ISO 4217 ni todos los campos opcionales o condicionales de OpenAI. Para un feed real, valida también accesibilidad de URL, variantes, políticas comerciales, moneda acordada, precisión de stock y coincidencia con la ficha pública. No llames «feed aprobado» a un archivo que solo pasó este script.

Conecta, observa y corrige

  1. Tras la aprobación de la reclamación y de Persona, abre el perfil en Business Hub y busca la opción de conectar un feed de productos. Si no aparece, confirma elegibilidad y estado de verificación antes de automatizar nada.
  2. Sube el CSV o proporciona una URL estable del archivo según la opción disponible. Si tu catálogo cambia con frecuencia, una URL alojada puede evitar cargas manuales, pero debes mantenerla accesible y actualizada.
  3. Revisa los errores de procesamiento que muestre OpenAI. Corrige la fila de origen, regenera el feed y vuelve a comprobarla. Un archivo sin errores locales todavía puede fallar por políticas o reglas de integración.
  4. Después de conectar, revisa en tu sitio si las fichas, imágenes, precios y existencias siguen coincidiendo. Cambiar el precio en la web sin actualizar el feed puede dar información contradictoria al comprador.

La decisión útil para un negocio pequeño es empezar con cinco productos que ya tienen página e imagen públicas, probar la importación y establecer una rutina de actualización. No publiques cien filas con enlaces rotos para «aparecer más». OpenAI señala que la elegibilidad de búsqueda y la conexión del feed no garantizan exhibición ni recomendación; tampoco equivalen a anuncios o checkout integrado.

Fuentes y alcance

OpenAI Help, configuración de Business Hub; OpenAI Developers, especificación estable de productos. Consultadas el 11 de noviembre de 2026. El ejemplo y el validador son material educativo probado localmente; no se cargó un feed real en una cuenta de SoyJB.

Recibe lo nuevo en tu correo

Workshops gratis, herramientas y novedades de IA aplicadas a negocio, sin humo.

🎓 Workshops en vivo🛠️ Herramientas nuevas⚡ Novedades de IA

Sin spam. Te das de baja cuando quieras.

Comentarios

Aún no hay comentarios. Sé el primero.

Deja un comentario