Array - Carrinho de compra

Olá comunidade,
Recentemente procurei alguns tópicos e notei que o meu problema também acontece com outras pessoas, alguns casos resolvidos mas nenhum deles explicado exatamente como foram resolvidos.

O meu problema é na criação de um carrinho de compra pelo Builder, toda vez que o item selecionado pelo usuário e ele ainda queira continuar incluindo itens no carrinho de compra o item anterior é subscrito.

  • Estou tentando utilizar um array que inicia vazia e com a função “.push” incluo a variável do item selecionada pelo usuário, para incluir dentro do array.
  • Enquanto ele não finalizar o processo de compra, ele retorna para o menu, onde contém os itens para selecionar e todo o processo de inclusão no array se repete.

Talvez essa dúvida vai surgir com maior frequência em outros usuários da comunidade Blip, alguem pode guiar na construção de um modelo parecido com carrinho de compra, por favor?

Olá Kaio, como vai?

Criei um exemplo simples e vou postar aqui. Qualquer dúvida é só dizer, ok?

  1. Criei um fluxo onde o usuário fica voltando para o menu de itens até que digite sair

  2. No bloco Início criei uma estrutura JSON com a data atual ( {{calendar.date}} ) e o identificador do usuário ( {{contact.identity}} ) em um script e coloquei o retorno salvo em uma variável chamada car.

              function run(identity, data) {
                 var car = {
                      "id": identity,
                      "data": data,
                      "items": []
                 };
                return car; 
              } 
 ![image|334x500, 50%](upload://zg8TVD46l2wI5LnygMab4cnHm7g.png) 
  1. No bloco Menu Compra, criei um Carrossel com 3 opções: Macarrão, arroz e feijão (apenas para fins de exemplo).

    image

  2. Defini um payload do tipo texto no botão do carrossel, contendo o nome do item em questão (poderia ser uma estrutura JSON pra também conter o preço).

    image

  3. Defini condições de saída, de modo que enquanto o usuário não digitar sair, ele não será direcionado para o bloco Final. Ao invés disso, ele é direcionado para o bloco intermediário, chamado Adiciona ao carrinho, que é encarregado de tratar a resposta do usuário e adicionar na estrutura de car.

  4. Para fins de exemplo, esse bloco também exibe o que está sendo adicionado ao carrinho, mas repare que ele não espera a resposta do usuário e já o retorna direto para Menu compra:

    image

  5. Na Ação de Entrada deste bloco (Adiciona ao carrinho), há um script que recebe a variável car e input.content(resposta do usuário do bloco anterior) como variáveis de entrada e salva o retorno em uma variável chamada carN, aqui usada como uma variável auxiliar, que irá receber o valor atualizado de car por um momento.

  6. O script irá adicionar o item ao carrinho:

    function run(car, input) {
          var carN = JSON.parse(car);
          carN.items.push(input);
        return carN;
    }
    
  7. Na Ação de Saída deste bloco, há uma ação de Definir Variável, onde passo os valores de carN para car.

    image

  8. Os passos se repetem até que o usuário digite sair, onde irá receber o valor final de car e seguir com o fluxo normalmente.

Ok @Bcamarda, muito obrigado por clarear na minha mente o caminho para criar o carrinho de compras no Builder.

Observação:
O item 4 ( payload) está invertido, o correto é (text/plain).

1 Curtida

Opa, ninguém viu :sweat_smile: :rofl:

1 Curtida

Outro detalhe que estou tentando é retirar de dentro do array os itens e transformar em textos. Fiz alguns testes para tentar passar os itens em uma variável e não tive sucesso.

Nos tutoriais de Javascript isso pode ser realizado da seguinte forma:

var items = [‘macarrao’, ‘milho’, ‘azeitona’];
for (var i = 0; i < items.length; i++) {
console.log(items[i]);
}

Por algum motivo, o blip não mostra meu resultado quando faço algo similar.

Você está querendo transformar em texto para exibir para o cliente ou apenas para você verificar?

@Bcamarda, nesse tópico você me ensinou a incluir dentro de um array elementos, sem sobrescrever a variavel.

O usuário do meu chatbot está montando seu lanche 1 para N (1 Lanche para muitos Adicionais). todos os elementos desse lanche estará dentro de um objeto {} e os adicionais (N) haverá um array[] contendo os adicionais na sua propriedade items do objeto.

meu objeto com o resultado me tras o seguinte:

var desc = {“lanche”:[“X salada”],“items”:[“Bacon”,“Milho”]}

Quero criar uma função para mostrar ao usuário algumas propriedades do objeto detalhado, nesse exemplo em especifico os adicionais items:

function run(desc) {

            var itemDetalhado = JSON.parse(desc);    
            var lanches = itemDetalhado.lanche;
            var adds = itemDetalhado.items;   
            
            for (var i = 0; i < adds.length; i++) {
                var itemsAdds = adds[i];
                
                return itemsAdds;  /* Retorna todos os adicionais da array */
            }
        }

Meu erro encontra-se aqui, no retorno dessa lógica. Minha variável itemsAdds retorna somente o primeiro item do array items e o que desejo é o retorno de todos os elementos que contém dentro do array.

Entendi @Kaio_Luis_Fabiano

Neste caso, o que você pode fazer é:

  1. Ao invés de criar um array e ir adicionando os elementos, crie uma String e vá concatenando os objetos como texto.
  2. Crie um objeto de algum tipo de conteúdo que seja interessante para você e utilize ele para gerar um objeto dinâmico.