Sincronizzazione via CSV: specifica completa
Specifica del CSV degli articoli: campi, limiti, attributi di auto e moto, e invio via SFTP o via URL.
Per la sincronizzazione tra i clienti e Portal Hero utilizziamo un sistema di file CSV. Il file CSV principale è quello degli articoli (o feed degli articoli), dove sono elencati tutti gli articoli che vengono pubblicati sui diversi portali. In questo file si trovano gli articoli con le loro caratteristiche.
Funzionamento della sincronizzazione
Il modo di identificare ogni articolo sarà tramite il campo id sul quale ci baseremo come identificatore univoco per decidere se un articolo viene aggiornato o cessa di esistere. Quando un articolo appare per la prima volta nel feed degli articoli, questo viene caricato su tutti i portali selezionati dal cliente. Quando un articolo non è più presente nel feed viene contrassegnato come venduto e quando si modifica un qualsiasi dato dell'articolo viene anche aggiornato sui portali. Per avere maggiori dettagli sulla sincronizzazione in sé puoi consultarli qui.
Il formato generale di questi file CSV è il seguente:
- Campi separati da virgole
- L'intestazione deve essere presente per poter identificare i campi
- Campi delimitati da doppie virgolette (se necessario o sempre)
- Codifica del file UTF-8
Condivisione dei file
Abbiamo due opzioni per farci arrivare il file:
- SFTP
Disponiamo di un SFTP per condividere i file e facilitare lo scambio di informazioni in modo sicuro. I dati di accesso all'SFTP (utente e password) verranno forniti durante il processo di onboarding.
Gli altri dati comuni di connessione sono i seguenti:- Host:
sftp.portalhero.pro - Port:
2222
Inoltre l'SFTP è protetto e limitato a livello di rete e avremo bisogno di uno o più IP da aggiungere alla nostra lista di IP di accesso consentiti.
All'interno dell'SFTP è stata creata una cartella chiamata upload dove verranno scritti i file: Per quello degli articoli il nome del file sarà: item_feed.csv - Host:
- url
Il feed degli articoli può essere inviato anche tramite un URL pubblico da cui il processo di Portal Hero lo scaricherà a ogni esecuzione giornaliera del processo.
L'URL dovrà essere comunicato dal cliente durante il processo di onboarding. Nel caso in cui siano necessarie ulteriori misure di sicurezza, puoi fornirci qualsiasi header che aggiungeremo alla richiesta.
Formato dei file CSV
Elenco dei campi, tipologia di dettagli ed esempi del file CSV degli articoli:
| Nome | Tipo | Obbligatorio | Descrizione | Esempio |
|---|---|---|---|---|
| id | string | Sì | Identificatore univoco dell'articolo. Deve essere univoco per tutti gli articoli ed è quello che useremo per fare riferimento agli articoli nelle nostre comunicazioni. (Lunghezza massima: 150 caratteri) | wer432r |
| price | double | Sì | Prezzo in € con una precisione di 2 decimali (non obbligatori) dell'articolo. | 344.95 |
| external_category | string | Sì | Identificatore della categoria dove caricare l'articolo. Deve essere un testo con la categoria, non un identificatore numerico. Può essere direttamente la categoria presente nel tuo sistema. | Camisetas manga corta |
| status | string | Sì | Condizione dell'articolo. I valori sono limitati a un'enumerazione che viene fornita anche più avanti. | good |
| title | string | Sì | Titolo dell'articolo. Massimo 60 caratteri. | Camiseta verde |
| description | string | Sì | Descrizione dell'articolo. Massimo 600 caratteri. | Camiseta verde talla M… |
| images | list string | Sì | Campo composto creato con la concatenazione tramite "|" (pipe) dei diversi url delle immagini dell'articolo. Queste devono essere pubblicamente accessibili e in formato jpg. Massimo 10 immagini. | https://image-cdn.com/image1.jpg|https://image-cdn.com/image2.jpg|https://image-cdn.com/image3.jpg |
| store | list string | No | Identificatore dell'account sul portale dove pubblicare questo articolo. È necessario solo nel caso in cui si disponga di più di un account dove pubblicare articoli. Nel caso di avere più di un account o più di un portale associato al prodotto, deve essere una lista di interi separati da "|" (pipe). | 2|F5 |
| portal_status | string | No | Stato di pubblicazione dell'articolo. Stati possibili: “active”, “reserved” | active |
| shipping | bool | No | Booleano per indicare se si accettano spedizioni all'interno del portale per l'articolo. | true |
| shipping_weight_kg | int | No | Campo associato al campo "shipping", è necessario se il campo shipping è true. Indica il peso in kg (arrotondato per eccesso senza decimali) dell'articolo. | 3 |
| free_shipping | bool | No | Booleano per indicare se è il venditore ad assumersi i costi di spedizione e quindi sono gratuiti per l'acquirente. | true |
| hashtags | string | No | Campo composto creato con la concatenazione tramite "|" (pipe) dei diversi hashtag. Ognuno di essi è una singola parola senza spazi e senza il cancelletto (#) precedente. | bluetooth|bajoconsumo|geek |
| brand | String | No | Marca dell'articolo | Apple |
| model | String | No | Modello dell'articolo | iPhone 15 pro |
| stock | int | No | Numero di articoli | 3 |
| attributes | str | No | Campo per attributi aggiuntivi dell'articolo. A seconda della categoria, alcuni di questi attributi possono essere obbligatori. * | additional attributes |
* Per gli articoli di auto, si devono fornire i seguenti attributi nel campo 'attributes' come una stringa JSON serializzata:
Riguardo al campo status che fa riferimento allo stato degli articoli, le opzioni sono le seguenti:
["new", "as_good_as_new", "good", "fair", "has_given_it_all"]
Attributi dell'auto
Gli attributi dell'auto sono un insieme di caratteristiche che descrivono un'auto. Si utilizzano nel feed e per pubblicarla sui marketplace.
| Nome | Tipo | Obbligatorio | Descrizione | Esempio |
|---|---|---|---|---|
| version | String | Sì | Versione del motore o livello di allestimento dell'auto. | 1.6 TDI |
| year | Int | Sì | Anno di fabbricazione. | 2018 |
| km | Int | Sì | Chilometraggio in chilometri. | 60000 |
| horse_power | Int | Sì | Potenza del motore in CV (DIN). | 105 |
| doors | Int | No | Numero di porte. | 5 |
| body_type | String | No | Tipo di carrozzeria o stile. Valori possibili:'small_car', 'coupe_cabrio', 'sedan', 'family_car', 'mini_van', 'four_x_four', 'van', 'others' | sedan |
| engine | String | Sì | Tipo di carburante. Valori possibili:'gasoil', 'gasolina', 'electric_hybrid', 'others' | gasoil |
| gear_box | String | Sì | Tipo di cambio. Valori possibili:'manual', 'automatic' | manual |
Esempio (python):
car_attrs = {
"version": "1.6 TDI Toyota",
"year": "2018",
"horse_power": 100,
"mileage": 12000,
"engine": "gasoil",
"gearbox": "manual"
}
attributes = json.dumps(car_attrs)
Attributi della moto
Per integrare le moto, l'articolo deve includere le informazioni specifiche del veicolo. I dati tecnici si inviano serializzati come JSON nel campo 'attributes', mentre la marca e il modello viaggiano nei campi 'brand' e 'model' del CSV.
Il campo 'external_category' deve assumere uno dei valori '2', 'Motos', 'Motorbikes' affinché l'articolo venga elaborato come moto. Questa integrazione richiede di avere attivo il servizio di ERP di moto sul tuo account.
I valori di 'brand' e 'model' devono coincidere esattamente con quelli della nostra tassonomia di moto. Per consultare i valori validi disponiamo di due endpoint pubblici (richiedono autenticazione e il servizio ERP di moto attivo):
GET /motorbike_brands— restituisce l'elenco completo delle marche disponibili, con il loro 'uid' e 'value'.GET /motorbike_models?brand_id={uid}— restituisce i modelli associati alla marca indicata tramite 'brand_id'.
Tieni presente che il titolo dell'articolo viene generato automaticamente a partire dalla marca, dal modello, dalla versione (se indicata) e dall'anno, per cui il valore del campo 'title' verrà sovrascritto nelle moto.
| Nome | Tipo | Obbligatorio | Descrizione | Esempio |
|---|---|---|---|---|
| year | Int | Sì | Anno di immatricolazione. Valore tra 1950 e l'anno successivo a quello attuale. | 2020 |
| version | String | No | Nome commerciale o versione del modello. Si aggiunge al titolo generato automaticamente. | modelo actual |
| km | Int | Sì | Chilometraggio in chilometri. Non può essere negativo. | 5420 |
| horse_power | Int | No | Potenza del motore in CV. Deve essere un valore positivo. | 47 |
| engine_capacity_cc | Int | No | Cilindrata del motore in centimetri cubici. Deve essere un valore positivo. | 400 |
| fuel_type | String | No | Tipo di carburante. Valori possibili: 'gasoline', 'electric'. Se non indicato, per impostazione predefinita è 'gasoline'. | gasoline |
| license_plate | String | No | Targa del veicolo. | 1234 ABC |
Esempio (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)