Escolhendo um valor específico no bloco dinâmico

Boa tarde, pessoal. Queria compartilhar com vocês uma solução que implementamos aqui, espero que ajude!

Nossa situação era a seguinte: precisávamos selecionar um periodo específico para gerar o boleto do cliente onde o conteúdo, ou seja, as informações dos boletos em aberto, vem do retorno da nossa API onde as informações são geradas e apresentadas para o cliente através de um bloco dinâmico. Porém estávamos limitados ao cliente digitar o período, o que causava certa confusão. Por exemplo, se o cliente possuísse 5 boletos nos períodos:
1 - 202101
2 - 202102

5 - 202105

Ele não poderia digitar, por exemplo, 1 para escolher o periodo 202101. Ou ele digitaria o período ou clicava sobre a opção desejada (sendo que no WhatsApp não tem esta opção).

Para gerar o bloco dinâmico, usamos o seguinte código:

function run(response, responseStatus) {
            let boletosObj = {};
             if(responseStatus == 400){
                return boletosObj["options"] = 0;
            }
            var json_data = JSON.parse(response);
            
            let parc = {};
            if(!json_data.PARCELA){
                return 'Por favor verifique os dados informados!';
            }
            let parcelas = json_data.PARCELA;
        
            boletosObj["text"] = "Digite o período desejado. Por exemplo: 202101 "
            let parcelasObj = [];
             let k = 1;
            let j = 0;
            for(let i = 0; i < parcelas.length; i++) {
                let parcela = {};
                parcela['text'] = k + ' - Período: ' + parcelas[i];
                parcela['type'] = 'application/json';
                parcela['value'] = {};
                parcela['value'][k] = parcelas[i];
                
                
                parcelasObj.push(parcela);
                k++;
                j++;
            }

            boletosObj["options"] = parcelasObj;
            return boletosObj;
        }

Colocamos o retorno dentro de um bloco dinâmico/conteúdo dinâmico.

Após isto, é gerado para nós, dentro do bloco, a quantidade de parcelas que o cliente tiver em aberto (passando algumas informações já solicitadas anteriormente para ele e após consultar na API utilizando estas informações).

Depois que o cliente tem o resultado das parcelas, ele pode tanto digitar o valor do periodo (no exemplo acima, 202101), digitar o valor 1 e também clicar (caso seja possível) para selecionar o período desejado.

Para tratar estas informações, criamos um script que contém o seguinte código:

function run(escolherParc, boletosObj) {
          boletosObj = JSON.parse(boletosObj);
          for(let i = 0; i < boletosObj['options'].length; i++){
              if(boletosObj['options'][i]['value'][escolherParc]){
                  var parsed = parseInt(boletosObj['options'][i]['value'][escolherParc]);
                  return parsed;
              }
          }
          var containCharacter = escolherParc.includes('{');
          if(containCharacter){
            const parcEscolhida = escolherParc.split(/[:{},"]/);
          
            var filtered = parcEscolhida.filter(function (el) {
              return el != "";
            });

            if(filtered[1] != "t"){
              var parsed = parseInt(filtered[1]);
              return parsed;
            }else{
              return String(filtered[1]);  
            }
          }else{
            var parsed = parseInt(escolherParc);
            return parsed;
          }
        }

Onde: escolherParc é a parcela/período escolhido pelo cliente e boletosObj é a mesma variável retornada no código de geração do conteúdo dinâmico.

Com este código conseguimos tratar o valor de entrada do cliente para as 3 situações acima citadas.

Caso queiram algo mais detalhado, é só comentar ai que estamos dispostos a ajudar! :rocket: :grin:

7 Curtidas

Gente, que perfeição! Logo na primeira publicação aqui o @Gabriel_Aquino já manda uma dessas! :scream: Tenho certeza que vai ajudar muita gente. :smiling_face_with_three_hearts:

Super feliz por você ter vindo compartilhar com a Comunidade, Gabriel. E seja muito bem-vindo!

2 Curtidas

Com certeza tem muita gente precisando dessa solução! Valeu demais, @Gabriel_Aquino :clap:

2 Curtidas

Pensamos um pouco em como desenvolver isso e deu certo!!! A animação aqui foi grande! kkkkkk

Nosso próximo desafio é tentar colocar para o cliente conseguir obter todas de uma vez escolhendo uma opção. Por exemplo, dentro do bloco dinâmico, colocar a opção de “Todas” e já disponibilizar todos os boletos em aberto.

2 Curtidas

Sim! Esperamos conseguir ajudar o máximo possível a comunidade Blip! :rocket: :clap:

2 Curtidas

ALA GENTE EU QUE CHAMEI ESSA FERA PRO FÓRUM IRRAAA que bom que deu certo, sucesso uhuull

3 Curtidas

Valeu, Pedro! :rocket: :rocket: :clap: :clap: :partying_face:

2 Curtidas

Wow! Muito bom o post, vai ajudar demais

2 Curtidas

Vocês arrasaram! :tada:

Boooa! Vou marcar o @Bruno porque ele pode te ajudar nisso.

3 Curtidas

Gabriel, primeiramente valeu por compartilhar com a gente! :100:

Sobre seu próximo passo: Enviar vários arquivos de uma vez só pode ser um problema, pois se não me engano, o WhatsApp não está aceitando Collection* como deveria. Temos algumas soluções:

  1. Enviar várias mensagens, via API, cada uma contendo um arquivo.
  2. Encontrar uma maneira de agrupar esses arquivos em um único arquivo, talvez até mesmo na sua própria API ou usando uma API de Merge de PDF
  3. Criar um looping no seu bot para ir enviando os arquivos (isso pode não ser aceito pelo Blip, dependendo de como for feito, por causa do risco de looping infinito)

* Collection é um tipo de conteúdo que permite enviar um grupo de mensagens em lote.

2 Curtidas

Opa, Bruno! Muito obrigado pelas dicas! Assim que iniciarmos a implementação dessa parte eu tentarei aplicar elas. Valeu!!!

2 Curtidas