Ressourcen · CSV und Feeds

Sincronización por CSV: especificación completa

Especificación del CSV de artículos: campos, límites, atributos de coche y moto, y envío por SFTP o por URL.

Para la sincronización entre los clientes y Portal Hero utilizamos un sistema de ficheros CSV. El principal fichero CSV es el de artículos (o feed de artículos), donde se listan todos los artículos que se publican en los distintos portales. En este fichero se encuentran los artículos con sus características.

Funcionamiento de la sincronización

La manera de identificar cada artículo será mediante el campo id en el que nos basaremos como identificador único para decidir si un artículo se actualiza o deja de existir. Cuando un artículo aparezca por primera vez en el feed de artículos, éste se subirá a todos los portales seleccionados por el cliente. Cuando un artículo deje de estar presente en el feed se marcará como vendido y cuando se cambie cualquier dato del artículo también será actualizado en los portales. Para tener más detalles de la sincronización en sí puedes consultarlos aquí.

El formato general de estos archivos CSV es el siguiente:

  • Campos separados por comas
  • La cabecera tiene que estar presente para poder identificar los campos
  • Campos delimitados por doble comilla (si es necesario o siempre)
  • Codificación del archivo UTF-8

Compartición de archivos

Tenemos dos opciones para hacernos llegar el archivo:

  • SFTP
    Disponemos de un SFTP para compartir los archivos y facilitar el intercambio de información de manera segura. Se facilitarán los datos de acceso al SFTP (usuario y contraseña) durante el proceso de onboarding.
    El resto de datos comunes de conexión son los siguientes:
    • Host: sftp.portalhero.pro
    • Port: 2222

    Además el SFTP está securizado y restringido a nivel de red y necesitaremos una o varias IPs para añadirlas a nuestra lista de IPs de acceso permitidas.
    Dentro del SFTP hay creada una carpeta llamada upload donde se escribirán los archivos: Para el de artículos el nombre del archivo será: item_feed.csv
  • url
    El feed de artículos puede ser enviado también vía una URL pública desde donde el proceso de Portal Hero lo descargará en cada ejecución diaria del proceso.
    La URL deberá ser informada por parte del cliente durante el proceso de onboarding. En caso de requerir más medidas de seguridad, puedes facilitarnos cualquier header(s) que añadiremos a la petición.

Formato de los archivos CSV

Relación de los campos, tipología de detalles y ejemplos del archivo CSV de artículos:

NombreTipoObligatorioDescripciónEjemplo
idstringSiIdentificador único del artículo. Tiene que ser único para todos los artículos y es el que usaremos para hacer referencia a los artículos en nuestras comunicaciones. (Longitud máxima: 150 caracteres)wer432r
pricedoubleSiPrecio en € con una precisión de 2 decimales (no obligatorios) del artículo.344.95
external_categorystringSiIdentificador de la categoría donde subir el artículo. Debe ser un texto con la categoría, no un identificador numérico. Puede ser directamente la categoría que haya en tu sistema.Camisetas manga corta
statusstringSiCondición del artículo. Los valores están acotados a una enumeración que también se proporciona más adelante.good
titlestringSiTítulo del artículo. Máximo 60 caracteres.Camiseta verde
descriptionstringSiDescripción del artículo. Máximo 600 caracteres.Camiseta verde talla M…
imageslist stringSiCampo compuesto creado con la concatenación mediante "|" (pipe) de las diferentes urls de las imágenes del artículo. Estas tienen que ser públicamente accesibles y en formato jpg. Máximo 10 imágenes.https://image-cdn.com/image1.jpg|https://image-cdn.com/image2.jpg|https://image-cdn.com/image3.jpg
storelist stringNoIdentificador de la cuenta en el portal donde publicar este artículo. Solo es necesario en caso de contar con más de una cuenta donde publicar artículos. En el caso de tener más de una cuenta o más de un portal asociado al producto, tiene que ser una lista de enteros separados por "|" (pipe).2|F5
portal_statusstringNoEstado de publicación del artículo. Estados posibles: “active”, “reserved”active
shippingboolNoBooleano para indicar si se aceptan envíos dentro del portal para el artículo.true
shipping_weight_kgintNoCampo asociado al campo "shipping", es necesario si el campo shipping es true. Indica el peso en kg (redondeado hacia arriba sin decimales) del artículo.3
free_shippingboolNoBooleano para indicar si es el vendedor el que asume los costes del envío y por tanto son gratis para el comprador.true
hashtagsstringNoCampo compuesto creado con la concatenación mediante "|" (pipe) de los diferentes hashtags. Cada uno de ellos es una sola palabra sin espacios y sin la almohadilla (#) precedente.bluetooth|bajoconsumo|geek
brandStringNoMarca del artículoApple
modelStringNoModelo del artículoiPhone 15 pro
stockintNoNúmero de artículos3
attributesstrNoCampo para atributos adicionales del artículo. Dependiendo de la categoría, algunos de estos atributos pueden ser obligatorios. *additional attributes

* Para los artículos de coches, se deben proporcionar los siguientes atributos en el campo 'attributes' como una cadena JSON serializada:

Respecto al campo status que hace referencia al estado de los artículos, las opciones son las siguientes:

["new", "as_good_as_new", "good", "fair", "has_given_it_all"]

Atributos del Coche

Los atributos del coche son un conjunto de características que describen un coche. Se utilizan en el feed y para publicarlo en los marketplaces.

NombreTipoObligatorioDescripciónEjemplo
versionStringYesVersión del motor o nivel de acabado del coche.1.6 TDI
yearIntYesAño de fabricación.2018
kmIntYesKilometraje en kilómetros.60000
horse_powerIntYesPotencia del motor en CV (DIN).105
doorsIntNoNúmero de puertas.5
body_typeStringNoTipo de cuerpo o estilo. Valores posibles:'small_car', 'coupe_cabrio', 'sedan', 'family_car', 'mini_van', 'four_x_four', 'van', 'others'sedan
engineStringyesTipo de combustible. Valores posibles:'gasoil', 'gasolina', 'electric_hybrid', 'others'gasoil
gear_boxStringYesTipo de caja de cambios. Valores posibles are:'manual', 'automatic'manual

Ejemplo (python):

car_attrs = {
    "version": "1.6 TDI Toyota",
    "year": "2018",
    "horse_power": 100,
    "mileage": 12000,
    "engine": "gasoil",
    "gearbox": "manual"
}

attributes = json.dumps(car_attrs)

Atributos de la moto

Para integrar motos, el artículo debe incluir la información específica del vehículo. Los datos técnicos se envían serializados como JSON en el campo 'attributes', mientras que la marca y el modelo viajan en los campos 'brand' y 'model' del CSV.

El campo 'external_category' debe tomar uno de los valores '2', 'Motos', 'Motorbikes' para que el artículo se procese como moto. Esta integración requiere tener activo el servicio de ERP de motos en tu cuenta.

Los valores de 'brand' y 'model' tienen que coincidir exactamente con los de nuestra taxonomía de motos. Para consultar los valores válidos disponemos de dos endpoints públicos (requieren autenticación y el servicio ERP de motos activo):

  • GET /motorbike_brands — devuelve la lista completa de marcas disponibles, con su 'uid' y 'value'.
  • GET /motorbike_models?brand_id={uid} — devuelve los modelos asociados a la marca indicada mediante 'brand_id'.

Ten en cuenta que el título del artículo se genera automáticamente a partir de la marca, el modelo, la versión (si se informa) y el año, por lo que el valor del campo 'title' será sobrescrito en las motos.

NombreTipoObligatorioDescripciónEjemplo
yearIntSiAño de matriculación. Valor entre 1950 y el año siguiente al actual.2020
versionStringNoNombre comercial o versión del modelo. Se añade al título generado automáticamente.modelo actual
kmIntSiKilometraje en kilómetros. No puede ser negativo.5420
horse_powerIntNoPotencia del motor en CV. Tiene que ser un valor positivo.47
engine_capacity_ccIntNoCilindrada del motor en centímetros cúbicos. Tiene que ser un valor positivo.400
fuel_typeStringNoTipo de combustible. Valores posibles: 'gasoline', 'electric'. Si no se informa, por defecto es 'gasoline'.gasoline
license_plateStringNoMatrícula del vehículo.1234 ABC

Ejemplo (python):

motorbike_attrs = {
    "year": 2020,
    "version": "modelo actual",
    "km": 5420,
    "horse_power": 47,
    "engine_capacity_cc": 400,
    "fuel_type": "gasoline",
    "license_plate": "1234 ABC"
}

attributes = json.dumps(motorbike_attrs)