Recursos · CSV e feeds

Sincronização por CSV: especificação completa

Especificação do CSV de artigos: campos, limites, atributos de carro e mota, e envio por SFTP ou por URL.

Para a sincronização entre os clientes e o Portal Hero utilizamos um sistema de ficheiros CSV. O principal ficheiro CSV é o de artigos (ou feed de artigos), onde se listam todos os artigos que se publicam nos diferentes portais. Neste ficheiro encontram-se os artigos com as suas características.

Funcionamento da sincronização

A forma de identificar cada artigo será através do campo id, no qual nos basearemos como identificador único para decidir se um artigo é atualizado ou deixa de existir. Quando um artigo aparecer pela primeira vez no feed de artigos, este será enviado para todos os portais selecionados pelo cliente. Quando um artigo deixar de estar presente no feed, será marcado como vendido, e quando se alterar qualquer dado do artigo também será atualizado nos portais. Para teres mais detalhes sobre a sincronização em si, podes consultá-los aqui.

O formato geral destes ficheiros CSV é o seguinte:

  • Campos separados por vírgulas
  • O cabeçalho tem de estar presente para poder identificar os campos
  • Campos delimitados por aspas duplas (se necessário ou sempre)
  • Codificação do ficheiro UTF-8

Partilha de ficheiros

Temos duas opções para nos fazeres chegar o ficheiro:

  • SFTP
    Dispomos de um SFTP para partilhar os ficheiros e facilitar a troca de informação de forma segura. Os dados de acesso ao SFTP (utilizador e palavra-passe) serão fornecidos durante o processo de onboarding.
    Os restantes dados comuns de ligação são os seguintes:
    • Host: sftp.portalhero.pro
    • Port: 2222

    Além disso, o SFTP está protegido e restringido ao nível de rede e precisaremos de um ou vários IPs para os adicionar à nossa lista de IPs de acesso permitidos.
    Dentro do SFTP há criada uma pasta chamada upload onde se escreverão os ficheiros: para o de artigos o nome do ficheiro será: item_feed.csv
  • url
    O feed de artigos também pode ser enviado através de um URL público, de onde o processo do Portal Hero o descarregará em cada execução diária do processo.
    O URL deverá ser informado pelo cliente durante o processo de onboarding. Caso sejam necessárias mais medidas de segurança, podes fornecer-nos qualquer header(s) que adicionaremos ao pedido.

Formato dos ficheiros CSV

Relação dos campos, tipologia de detalhes e exemplos do ficheiro CSV de artigos:

NomeTipoObrigatórioDescriçãoExemplo
idstringSimIdentificador único do artigo. Tem de ser único para todos os artigos e é o que usaremos para referir os artigos nas nossas comunicações. (Comprimento máximo: 150 caracteres)wer432r
pricedoubleSimPreço em € com uma precisão de 2 casas decimais (não obrigatórias) do artigo.344.95
external_categorystringSimIdentificador da categoria onde enviar o artigo. Deve ser um texto com a categoria, não um identificador numérico. Pode ser diretamente a categoria que exista no teu sistema.Camisetas manga corta
statusstringSimCondição do artigo. Os valores estão limitados a uma enumeração que também se fornece mais adiante.good
titlestringSimTítulo do artigo. Máximo 60 caracteres.Camiseta verde
descriptionstringSimDescrição do artigo. Máximo 600 caracteres.Camiseta verde talla M…
imageslist stringSimCampo composto criado com a concatenação através de "|" (pipe) dos diferentes urls das imagens do artigo. Estas têm de ser publicamente acessíveis e em formato jpg. Máximo 10 imagens.https://image-cdn.com/image1.jpg|https://image-cdn.com/image2.jpg|https://image-cdn.com/image3.jpg
storelist stringNãoIdentificador da conta no portal onde publicar este artigo. Só é necessário caso tenhas mais do que uma conta onde publicar artigos. No caso de teres mais do que uma conta ou mais do que um portal associado ao produto, tem de ser uma lista de inteiros separados por "|" (pipe).2|F5
portal_statusstringNãoEstado de publicação do artigo. Estados possíveis: “active”, “reserved”active
shippingboolNãoBooleano para indicar se se aceitam envios dentro do portal para o artigo.true
shipping_weight_kgintNãoCampo associado ao campo "shipping", é necessário se o campo shipping for true. Indica o peso em kg (arredondado para cima sem casas decimais) do artigo.3
free_shippingboolNãoBooleano para indicar se é o vendedor quem assume os custos do envio e, por conseguinte, são gratuitos para o comprador.true
hashtagsstringNãoCampo composto criado com a concatenação através de "|" (pipe) das diferentes hashtags. Cada uma delas é uma só palavra sem espaços e sem o cardinal (#) precedente.bluetooth|bajoconsumo|geek
brandStringNãoMarca do artigoApple
modelStringNãoModelo do artigoiPhone 15 pro
stockintNãoNúmero de artigos3
attributesstrNãoCampo para atributos adicionais do artigo. Dependendo da categoria, alguns destes atributos podem ser obrigatórios. *additional attributes

* Para os artigos de carros, devem fornecer-se os seguintes atributos no campo 'attributes' como uma string JSON serializada:

Quanto ao campo status, que faz referência ao estado dos artigos, as opções são as seguintes:

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

Atributos do Carro

Os atributos do carro são um conjunto de características que descrevem um carro. Utilizam-se no feed e para o publicar nos marketplaces.

NomeTipoObrigatórioDescriçãoExemplo
versionStringSimVersão do motor ou nível de acabamento do carro.1.6 TDI
yearIntSimAno de fabrico.2018
kmIntSimQuilometragem em quilómetros.60000
horse_powerIntSimPotência do motor em CV (DIN).105
doorsIntNãoNúmero de portas.5
body_typeStringNãoTipo de carroçaria ou estilo. Valores possíveis:'small_car', 'coupe_cabrio', 'sedan', 'family_car', 'mini_van', 'four_x_four', 'van', 'others'sedan
engineStringSimTipo de combustível. Valores possíveis:'gasoil', 'gasolina', 'electric_hybrid', 'others'gasoil
gear_boxStringSimTipo de caixa de velocidades. Valores possíveis são:'manual', 'automatic'manual

Exemplo (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 da mota

Para integrar motas, o artigo deve incluir a informação específica do veículo. Os dados técnicos são enviados serializados como JSON no campo 'attributes', enquanto a marca e o modelo viajam nos campos 'brand' e 'model' do CSV.

O campo 'external_category' deve tomar um dos valores '2', 'Motos', 'Motorbikes' para que o artigo seja processado como mota. Esta integração requer ter ativo o serviço de ERP de motas na tua conta.

Os valores de 'brand' e 'model' têm de coincidir exatamente com os da nossa taxonomia de motas. Para consultar os valores válidos dispomos de dois endpoints públicos (requerem autenticação e o serviço ERP de motas ativo):

  • GET /motorbike_brands — devolve a lista completa de marcas disponíveis, com o seu 'uid' e 'value'.
  • GET /motorbike_models?brand_id={uid} — devolve os modelos associados à marca indicada através de 'brand_id'.

Tem em conta que o título do artigo é gerado automaticamente a partir da marca, do modelo, da versão (se informada) e do ano, pelo que o valor do campo 'title' será sobrescrito nas motas.

NomeTipoObrigatórioDescriçãoExemplo
yearIntSimAno de matrícula. Valor entre 1950 e o ano seguinte ao atual.2020
versionStringNãoNome comercial ou versão do modelo. Adiciona-se ao título gerado automaticamente.modelo actual
kmIntSimQuilometragem em quilómetros. Não pode ser negativa.5420
horse_powerIntNãoPotência do motor em CV. Tem de ser um valor positivo.47
engine_capacity_ccIntNãoCilindrada do motor em centímetros cúbicos. Tem de ser um valor positivo.400
fuel_typeStringNãoTipo de combustível. Valores possíveis: 'gasoline', 'electric'. Se não for informado, por defeito é 'gasoline'.gasoline
license_plateStringNãoMatrícula do veículo.1234 ABC

Exemplo (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)