Conectores
E-commerce

Flexy

14min
objetivo/resumo a flexy é uma plataforma de e commerce que atua com soluções inteligentes de venda online este conector permite a comunicação da plataforma de e commerce com sistemas que realizam a gestão do seu negócio online sendo eles softwares de controle de estoque (erp), de relacionamento com o cliente (crm), e mail marketing, assim como os necessários à operação e gestão de sua loja criando um fluxo utilizando o conector flexy para criar um fluxo utilizando o conector flexy é preciso criar uma conexão e em seguida configurar o fluxo criando conexão flexy obs criar conexão docid 1pcvn0mjbfkujhmhj86k e acesse nosso passo a passo para saber como criar uma conexão estes são os seguintes parâmetros de configuração da conexão flexy que serão requisitados na criação nome parâmetro padrão em qualquer criação de uma conexão, te ajudará a identificar melhor sua conexão (campo obrigatório); descrição parâmetro padrão e opcional em qualquer criação de uma conexão, aqui você pode relatar detalhadamente para que fins servirá sua conexão; identidade identificação na url \<suaidentidade> plataforma flexy com br (campo obrigatório); tipo de acesso referencia ao acesso que a conexão terá, sendo eles, acesso a loja ou ao shopping; loja para acessar a loja preencha os seguintes campos; token token de acesso da loja; código da loja codigo de referência da loja; shopping para acessar o shopping preencha o seguinte campo; token token de acesso do shopping; configurando fluxo flexy crie um fluxo e arraste o conector flexy para o canvas obs criar fluxo docid\ ocjtbfhi9rerkr2d6owip e acesse nosso passo a passo para saber como criar um fluxo selecione o conector e na aba de parametrização preencha os seguintes parâmetros de configuração recurso entidade para qual será realizada a ação no momento o conector dispões três recursos sendo eles, pedidos, produtos e notas; operação ação que será realizada para o recurso selecionado operações disponiveis para recurso pedidos listar pedidos usado para buscar os pedidos da base, podendo informar o número do pedido caso queira buscar somente um, ou deixar o campo vazio para retornar todos os pedidos da base; alteração de status de um pedido usado para alterar o status de um pedido, requer o corpo da requisição que pode ser enviado utilizando template docid\ treajh8tvdyh6ukyeaqzp ou de/para docid\ voqdaukjjknbswvrhbzqw ; operações disponiveis para recurso produtos alteração de estoque por centro de distribuição / sku usado para alteração de estoques de um sku para um centro de distribuição, requer o código do produto e o corpo da requisição que pode ser enviado utilizando template docid\ treajh8tvdyh6ukyeaqzp ou de/para docid\ voqdaukjjknbswvrhbzqw ; listar produtos usado para buscar os produtos da base, podendo informar o número do produto caso queira buscar somente um, ou deixar o campo vazio para retornar todos os produtos da base; cadastro/alteração de produtos usado para criar ou atualizar um produto, requer o corpo da requisição que pode ser enviado utilizando template docid\ treajh8tvdyh6ukyeaqzp ou de/para docid\ voqdaukjjknbswvrhbzqw ; alteração de preço e/ou estoque de sku usado para alteração de preços e estoques de um sku, requer o código do produto e o corpo da requisição que pode ser enviado utilizando template docid\ treajh8tvdyh6ukyeaqzp ou de/para docid\ voqdaukjjknbswvrhbzqw ; operações disponiveis para recurso notas cadastro de nota fiscal usado para cadastro ou atualização de uma nota fiscal em um pedido, requer o corpo da requisição que pode ser enviado utilizando template docid\ treajh8tvdyh6ukyeaqzp ou de/para docid\ voqdaukjjknbswvrhbzqw ; na aba propriedades selecione a conexão desejada, dê um nome ao passo e se necessário detalhe uma descrição na prática neste tópico criaremos um exemplo de um fluxo utilizando o conector da flexy o fluxo terá 3 passos porém será executado somente dois pois criaremos uma rule para identificar se o produto ja foi cadastrado ou não o fluxo simulará uma integração com bling, então teremos um payload de entrada referente a saída de uma busca da bling passo 'busca produto' este passo fará uma busca nos produtos da flexy utilizando o código do produto que é enviado no payload de entrada ( lembrando que esse payload de entrada simula o payload de saída de uma busca de produtos na bling, bling docid\ rla13f jty 896sv2kzrk para mais informações sobre nosso conector bling ) por fim informaremos o código do produto utilizando uma função de parâmetros dinâmicos da fluid ( para mais detalhes clique em fluid expression language docid 0vqvpw6saqz2z1jgp8fwc ) assim ficará a parametrização do busca produto na aba propriedades informamos o nome do passo e a conexão criada com as credenciais da loja passo 'atualiza produto' este passo terá uma rule mandatória que irá validar o retorno do passo 'busca produto', se o retorno for vazio, o passo não será executado e pulará para o próximo pois não haverá produto para atualizar ( para mais detalhes sobre rules clique em rules docid\ lgqsmyrxokym9hgjtotkl ) assim ficará a parametrização do atualiza produto para tratar os dados recebidos do passo anterior usamos o de/para e por fim utilizamos o template para montar o corpo da requisição que a operação espera receber assim ficou nosso de/para { &#x9;"json obj" { &#x9; "product name" "rule descricao", &#x9; "product referencecode" "rule codigo", &#x9; "product ncm" "produto class fiscal", &#x9; "product categories" "rule categoriaprodutos", &#x9; "json list&\&product images&\&produto imagem" "link", &#x9; "json obj&\&product descriptiongroup&\&json obj" { &#x9; "product descriptiongroup descriptionone" "produto descricaocurta", &#x9; "product descriptiongroup descriptiontwo" "produto descricaocomplementar", &#x9; "product descriptiongroup descriptionthree" "produto observacoes" &#x9; }, &#x9; "json list&\&product properties&\&json obj" { &#x9; "referencecode" "default cor", &#x9; "value" "rule marca" &#x9; }, &#x9; "properties2" "produto condicao", &#x9; "json list&\&product videos&\&json obj" { &#x9; "code" "urlvideo" &#x9; }, &#x9; "json obj&\&product metatags" { &#x9; "product metatags title" "rule descricao", &#x9; "product metatags description" "produto descricaocomplementar", &#x9; "product metatags keyword" "produto observacoes" &#x9; }, &#x9; "product availablefor" "default sale", &#x9; "product stockcontrol" "default 1", &#x9; "json list&\&product variants&\&json obj" { &#x9; "price" "produto preco", &#x9; "presentation" "rule descricao", &#x9; "referencecode" "rule codigo", &#x9; "master" "default 1", &#x9; "eancode" "produto gtin", &#x9; "json obj" { &#x9; "stock quantity" "rule estoqueatual", &#x9; "json obj" { &#x9; "distributioncenter referencecode" "default 96581798000262" &#x9; } &#x9; }, &#x9; "json obj&\&dimensiongroup" { &#x9; "dimensiongroup weight" "produto pesobruto", &#x9; "dimensiongroup width" "produto larguraproduto", &#x9; "dimensiongroup height" "produto alturaproduto", &#x9; "dimensiongroup depth" "produto profundidadeproduto" &#x9; } &#x9; } &#x9;} } para mais informações sobre como tratamos de/paras clique em de/para docid\ voqdaukjjknbswvrhbzqw se observar, alguns valores do nosso de/para estão sendo referenciado algumas rules, essas são rules internas, para mais informações acesse nossa documentação sobre rules docid\ lgqsmyrxokym9hgjtotkl para nós o que será relevante é a rule mandatória que definirá o percurso do nosso fluxo, assim ficou nossa rule \[ { &#x9; "idrule" "flexy atualiza produto", &#x9; "rule" "{\\"if\\" \[ {\\"!=\\" \[{\\"var\\" \\"busca produto\\"}, \\"\[]\\"] }, true, false]}", &#x9; "type" "mandatory", &#x9; "description" "verifica se existe o produto cadastrado se existir só executa a atualização se não existir, só executa o cadastro " &#x9;} &#x9; ] e por fim, o template no formato esperado pela flexy { &#x9;"product" { &#x9; "availablefor" "{{ mapping product availablefor }}", &#x9; "categories" {{ mapping product categories }}, &#x9; "descriptiongroup" { &#x9; "descriptionone" "{{ removeaspasquebraehtml mapping product descriptiongroup descriptionone }}", &#x9; "descriptiontwo" "{{ removeaspasquebraehtml mapping product descriptiongroup descriptiontwo }}", &#x9; "descriptionthree" "{{ removeaspasquebraehtml mapping product descriptiongroup descriptionthree }}" &#x9; }, &#x9; "images" \[ &#x9; {{ range $index1, $value1 = mapping product images }}{{ if $index1}},{{end }}"{{ $value1 }}"{{ end }} &#x9; ], &#x9;"metatags" { &#x9; "description" "{{ removeaspasquebraehtml mapping product metatags description }}", &#x9; "keyword" "{{ removeaspasquebraehtml mapping product metatags keyword }}", &#x9; "title" "{{ removeaspasquebraehtml mapping product metatags title }}" &#x9;}, &#x9;"name" "{{ mapping product name }}", &#x9;"referencecode" "{{ mapping product referencecode | replace " " " "}}", &#x9;"ncm" "{{ mapping product ncm }}", &#x9;"stockcontrol" "{{ mapping product stockcontrol }}", &#x9; "variants" \[ &#x9; {{ $variant = (index mapping product variants 0) }} &#x9; { &#x9; "dimensiongroup" &#x9; { &#x9; "depth" "{{ $variant dimensiongroup depth }}", &#x9; "height" "{{ $variant dimensiongroup height }}", &#x9; "weight" "{{ $variant dimensiongroup weight }}", &#x9; "width" "{{ $variant dimensiongroup width }}" &#x9; }, &#x9; "eancode" "{{ $variant eancode }}", &#x9; "master" "{{ $variant master }}", &#x9; "presentation" "{{ $variant presentation }}", &#x9; "price" "{{ $variant price }}", &#x9; "referencecode" "{{ $variant referencecode | replace " " " "}}", &#x9; "stock" { &#x9; "quantity" {{ $variant stock quantity}} &#x9; } &#x9; } &#x9; ] &#x9;} } na aba propriedades informamos o nome do passo e a conexão criada com as credenciais da loja passo 'cadastra produto' este passo também terá uma rule mandatória que irá validar o retorno do passo 'busca produto', porém se o retorno for vazio, o passo será executado e cadastrará o produto na flexy ( para mais detalhes sobre rules clique em rules docid\ lgqsmyrxokym9hgjtotkl ) assim ficará a parametrização do cadastra produto para tratar os dados recebidos do passo anterior usamos o de/para e por fim utilizamos o template para montar o corpo da requisição que a operação espera receber assim ficou nosso de/para { "json obj" { "product name" "rule descricao", "product referencecode" "rule codigo", "product ncm" "produto class fiscal", "product categories" "rule categoriaprodutos", "json list&\&product images&\&produto imagem" "link", "json obj&\&product descriptiongroup&\&json obj" { "product descriptiongroup descriptionone" "produto descricaocurta", "product descriptiongroup descriptiontwo" "rule descricaocomplementar", "product descriptiongroup descriptionthree" "rule observacoes" }, "json list&\&product properties&\&json obj" { "referencecode" "default marca", "value" "rule marca" }, "properties2" "produto condicao", "json list&\&product videos&\&json obj" { "code" "urlvideo" }, "json obj&\&product metatags" { "product metatags title" "rule descricao", "product metatags description" "rule descricaocomplementar", "product metatags keyword" "rule observacoes" }, "product availablefor" "default sale", "product stockcontrol" "default 1", "json list&\&product variants&\&json obj" { "price" "produto preco", "presentation" "rule descricao", "referencecode" "rule codigo", "master" "default 1", "eancode" "produto gtin", "json obj" { "stock quantity" "rule estoqueatual", "json obj" { "distributioncenter referencecode" "default bike no vale" } }, "json obj&\&dimensiongroup" { "dimensiongroup weight" "produto pesobruto", "dimensiongroup width" "produto larguraproduto", "dimensiongroup height" "produto alturaproduto", "dimensiongroup depth" "produto profundidadeproduto" } } } } para mais informações sobre como tratamos de/paras clique em de/para docid\ voqdaukjjknbswvrhbzqw se observar, alguns valores do nosso de/para também estão sendo referenciado algumas rules, essas são rules internas, para mais informações acesse nossa documentação sobre rules docid\ lgqsmyrxokym9hgjtotkl para nós o que será relevante é a rule mandatória que definirá o percurso do nosso fluxo, assim ficou nossa rule \[ { &#x9; "idrule" "flexy cadastra produto", &#x9; "rule" "{\\"if\\" \[ {\\"!=\\" \[{\\"var\\" \\"busca produto\\"}, \\"\[]\\"] }, false, true]}", &#x9; "type" "mandatory", &#x9; "description" "verifica se existe o produto cadastrado se existir só executa a atualização se não existir, só executa o cadastro " &#x9;} &#x9; ] e por fim, o template no formato esperado pela flexy { &#x9;"product" { &#x9; "availablefor" "{{ mapping product availablefor }}", &#x9; "categories" {{ mapping product categories }}, &#x9; "descriptiongroup" { &#x9; "descriptionone" "{{removeaspasquebraehtml mapping product descriptiongroup descriptionone }}", &#x9; "descriptiontwo" "{{ removeaspasquebraehtml mapping product descriptiongroup descriptiontwo }}", &#x9; "descriptionthree" "{{ removeaspasquebraehtml mapping product descriptiongroup descriptionthree }}" &#x9; }, &#x9; "images" \[ &#x9; {{ range $index1, $value1 = mapping product images }}{{ if $index1}},{{end }}"{{ $value1 }}"{{ end }} &#x9; ], &#x9;"metatags" { &#x9; "description" "{{removeaspasquebraehtml mapping product metatags description }}", &#x9; "keyword" "{{ removeaspasquebraehtml mapping product metatags keyword }}", &#x9; "title" "{{ removeaspasquebraehtml mapping product metatags title }}" &#x9;}, &#x9;"name" "{{ mapping product name }}", &#x9;"referencecode" "{{ mapping product referencecode | replace " " " "}}", &#x9;"ncm" "{{ mapping product ncm }}", &#x9;"stockcontrol" "{{ mapping product stockcontrol }}", &#x9; "variants" \[ &#x9; {{ $variant = (index mapping product variants 0) }} &#x9; { &#x9; "dimensiongroup" &#x9; { &#x9; "depth" "{{ $variant dimensiongroup depth }}", &#x9; "height" "{{ $variant dimensiongroup height }}", &#x9; "weight" "{{ $variant dimensiongroup weight }}", &#x9; "width" "{{ $variant dimensiongroup width }}" &#x9; }, &#x9; "eancode" "{{ $variant eancode }}", &#x9; "master" "{{ $variant master }}", &#x9; "presentation" "{{ $variant presentation }}", &#x9; "price" "{{ $variant price }}", &#x9; "referencecode" "{{ $variant referencecode | replace " " " "}}", &#x9; "stock" { &#x9; "quantity" {{ $variant stock quantity}} &#x9; } &#x9; } &#x9; ] &#x9;} } na aba propriedades informamos o nome do passo e a conexão criada com as credenciais da loja conclusão com todos os passos configurados basta disparar o fluxo informando o payload de entrada simulando o retorno da busca de produtos na bling, que seria algo pareciso com isso { "produto" { "id" "15880597775", "codigo" "fld citrino", "descricao" "tênis saucony endorphin", "tipo" "p", "situacao" "ativo", "unidade" "", "preco" "2000000 0000000000", "precocusto" null, "descricaocurta" "", "descricaocomplementar" "", "datainclusao" "2022 06 07", "dataalteracao" "2022 11 22", "imagethumbnail" null, "urlvideo" "", "nomefornecedor" "", "codigofabricante" "", "marca" "", "class fiscal" "", "cest" "", "origem" "0", "idgrupoproduto" "0", "linkexterno" "", "observacoes" "", "grupoproduto" null, "garantia" null, "descricaofornecedor" null, "idfabricante" "", "categoria" { "id" "4098280", "descricao" "categoria padr\u00e3o" }, "pesoliq" "0 00000", "pesobruto" "0 00000", "estoqueminimo" "0 00", "estoquemaximo" "0 00", "gtin" "", "gtinembalagem" "", "larguraproduto" "0", "alturaproduto" "0", "profundidadeproduto" "0", "unidademedida" "cent\u00edmetros", "itensporcaixa" 0, "volumes" 0, "localizacao" "", "crossdocking" "0", "condicao" "n\u00e3o especificado", "fretegratis" "n", "producao" "p", "datavalidade" "0000 00 00", "spedtipoitem" "", "imagem" \[ { "link" "https //yt3 ggpht com/ytc/amlnzu9a574fn2lsumblvfnntqqsvgxi w3kkf8ux6lwsa=s900 c k c0x00ffffff no rj", "validade" "s\\/ validade", "tipoarmazenamento" "externo" } ], "estoqueatual" 200, "depositos" \[ { "deposito" { "id" "14886475711", "nome" "geral", "saldo" 200, "desconsiderar" "n", "saldovirtual" 200 } } ] } } após o disparo, caso o produto já exista na flexy caso o produto não exista na flexy