Passo a passo para cadastrar Variação de Cor e/ou Tamanho na API

Olá Pessoal !

Estou precisando migrar o método StockKeepingUnitEspecificationInsert do Webservice para a API /catalog/pvt/specification/ , mas todos os GETs da API só tem como parâmetro ID e não Name, dificultando a consulta para saber o ID do grupo de variação, grupo de cores etc, alguém teria um passo a passo de como montar uma variação de Cor e/ou Tamanho via API ? Lembrando que a criação do grupo categoria, eu consegui fazer, pois tem o GET que lista todos os criados e aí tem como pegar o id , mas depois fica complicado pelo fato de não ter como consultar um grupo por exemplo chamado “cores” , somente pelo ID, e não temos como guardar IDs de cada criação de grupo ou categorias.
Vou explicar melhor o nosso problema. Até a questão da criação do Grupo ( /catalog_system/pvt/specification/group ), ok, criei um grupo de categoria chamado “Variações”, onde depois consigo fazer um GET /catalog_system/pvt/specification/groupbycategory/1 da lista e retornar todos os grupos criados e pegar o ID deste grupo que a API gerou, depois criamos o Grupo Cores vinculado a esta categoria que peguei pelo GET

Depois tenho que criar o grupo de cores, onde chamei de “cores” vinculado a este grupo Variações que criar, usando o /catalog/pvt/specification, até criar pelo POST, ok, ele cria e me retorna o ID, mas depois na próxima vez, não tenho como saber se foi criado ou não, pois não tenho como pegar o ID deste grupo de Cores pelo nome “cores” que criei no atributo ‘Name’, pois o GET é apenas por ID e não temos como ficar gravando o ID do grupo que foi criado, até porque tem clientes que vem para nós com a loja VTEX já criada e pronta ?

Como eu pego o ID deste grupo “cores” que criei ? Pois precisamos deste ID para ir ao próximo método que é vincular a Cor a este grupo ‘cores’ , certo ? Depois também ter maneira de fazer um GET do nome da Cor, exemplo Preto, Branco e outros mais e não apenas pelo ID , onde no manual somente tem a opção pelo ID…

Desde já agradeço se alguém puder me ajudar !

Eduardo

1 Like

Oi @eduardo.fonseca, seja bem-vindo a nova comunidade :wink:

Tenho funcionando em prod uma integração completa e não lembro de nenhum problema nessa parte não.

Mas até onde entendi, na verdade não é o ID do Grupo Cores que você precisa e sim o ID da Especificação Cores que você consegue pegar listando as especificações de qualquer categoria que tenha essa especificação ou puxando a árvore de especificações da categoria.

Category Specification

https://{accountName}.{environment}.com.br/api/catalog_system/pub/specification/field/listByCategoryId/categoryId

https://{accountName}.{environment}.com.br/api/catalog_system/pub/specification/field/listTreeByCategoryId/categoryId

Acredito que por ambos você consegue retornar todas as especificações da categoria, entre elas a Cor:

			array (
				1 =>
					array (
						'Name' => 'Cor',
						'CategoryId' => NULL,
						'FieldId' => 19,
						'IsActive' => true,
						'IsStockKeepingUnit' => false,
					)
			);

Veja se ajuda :slight_smile: Abraços!

1 Like

Olá Andre !

Primeiramente obrigado pelo retorno.

Mas estes métodos ( end point ) que está mencionando não tem no manual Specification

Qual link você usa ?

1 Like

Legal André !!!, achei o grupo que falou, pois como o nome estava como “Category Specification”, nem atentei que era das categorias do grupo de variações, pensei que era das Categorias de Produtos, tipo Vestuário → Roupas e assim por diante, mas legal, agora consegui criar o Grupo de Categoria chamado “Variações”, vincular a este grupo “Variações” o grupo Cor e também o grupo Tamanho que criei no POST para criar as especificações, e com este GET do Category Specification , consigo pegar o ID que foi criado para o Cor e Tamanho… passo 1 e passo 2 resolvido !

Agora vamos para o passo 3, que é criar as Cores ( preto, branco etc ) e Tamanhos ( p, m, g, 58, 56, etc ) vinculados ao Grupo Cor e ao Grupo Tamanho respectivamente. Qual método deveria usar agora ? Poderia me ajudar nisto ?

Oi @eduardo.fonseca, que bom que conseguiu avançar, agora, considerando que os campos das especificações já foram criados, quem insere os valores seria o endpoint:

https://{accountName}.{environment}.com.br/api/catalog_system/pvt/specification/fieldValue

Seguindo a documentação abaixo:

https://developers.vtex.com/vtex-rest-api/reference/catalog-api-specification-field-value#catalog-api-post-specification-field-value

PS: e dá :heart: pras postagens ai mister, não economize no amor hahaha

com o grupo que criei, consegui fazer o POST para criar a tamanho “3G-2XL” pelo método /catalog/pvt/specificationvalue , beleza, mas agora como faço um GET para pegar pelo Name “3G-2XL” e não pelo ID que ele gerou ? Neste print mostra o método e o resultado, mas pelo ID e não pelo Name. Pode ser uma lista ( array ) também, onde depois eu procuro pelo nome…

Pelo método GET /api/catalog_system/pvt/specification/fieldValue/fieldValueId , mesmo no manual informando que é String e é valor, não aceita colocar o valor, apenas o ID. Olhe o print em anexo

Tudo joia @eduardo.fonseca, nesse caso, sem o ID, só criando uma função que faça um “de :arrow_right: para” e converta o valor da especificação desejada no caso “3G-2XL” no ID correspondente desse valor lá na VTEX para então poder passar o ID desse valor para o endpoint acima e recuperar as informações sobre esse valor.

Mas fiquei curioso para entender o que você está fazendo ou porquê precisa passar o value da especificação e não o ID…

Então, consegui fazer todo o processo de validação da variação depois de muitas tentativas e erros para entender a lógica da API, são muitos acessos ( consumo ) a vários métodos ( end point ) para montar uma variação, sendo muito complicado, onde pelo Webservice, utilizávamos apenas um método, passando nome do grupo cor, o nome da cor e o id do Sku. Segue abaixo o que tive que fazer na API:

Passo 1 => fazer GET /catalog_system/pvt/specification/groupbycategory/0 , passando valor zero para trazer todos os grupos “global”

Passo 2 => Se no Passo 1 encontrar o grupo que desejo, exemplo, grupo “Variação” , “Característica” ou qualquer outro desejado, pego o ID dele, caso contrário, faço um POST /catalog_system/pvt/specification/group para criar este grupo “Variação” e pegar o ID para seguir para o passo 3

Passo 3 => fazer GET /catalog_system/pub/specification/field/listByCategoryId/0, passando zero para pegar os grupos criados, como Cor, Tamanho e outros mais vinculados ao Grupo “Variação” que foi criado no passo 2, se não encontrar o grupo que desejo que retornou desde GET, terei que criar um novo pelo método POST /catalog/pvt/specification, criando por exemplo o grupo Cor vinculado ao grupo Variação e pego o ID deste grupo Cor criado.

Passo 4 => Fazer GET /catalog_system/pub/specification/fieldvalue/ passando o ID deste grupo do passo 3 criado para saber se existe a cor Preto, ou tamanho 3G-2XL ou outra qualquer por exemplo dentro deste grupo de Cores ou grupo Tamanhos, se não existir a Cor Preto ou Tamanho 3G-2XL por exemplo, tenho que fazer um POST /catalog/pvt/specificationvalue , passando a cor e o ID do grupo da Cor.

Passo 5 => Faço um POST /catalog/pvt/specificationvalue/{ID-SKU}/specification , onde no JSON terá o ID do valor da cor e o id do grupo da cor ( FieldId e FieldValueId ) para que assim o Sku mostra a cor desejada.

Tudo isto terei que fazer novamente se o produto tiver Tamanho por exemplo… ou seja, são muitos métodos ( end point ) para utilizar só para vincular uma cor e/ou tamanho, onde se tivéssemos um método que passasse o nome do grupo cor, o nome da cor e o id do sku, igual ao Webservice, internamente a API poderia fazer todas estas validações automaticamente, facilitando todos nós desenvolvedores na criação destas variações, né !!!

1 Like