Skip to main content
Respondido

Alguém sabe um jeito de enviar pdf's em quantidade variável?

  • November 28, 2022
  • 4 comentários
  • 103 Visualizações

Recebo vetor de links de pdf’s por meio de uma api e gostaria de descobrir qual a melhor maneira de enviar todos eles, já que o carrossel só suporta imagens, existe algum tipo conteúdo dinâmico que englobe isso? ou o único jeito é só mandando a url dos links por texto mesmo?

Melhor resposta por Adriano_tsi

Olá @Pedro_Gabriel_Cruz_L, você está utilizando o builder na construção do contato? Se Sim, o que você pode fazer é adicionar um contador em um fluxo de Loop, um bloco faz a contagem de envios restante e o próximo faz o envio do arquivo em si.

Por exemplo:

Digamos que o vetor de links que receba seja algo parecido com isso:

["https://www.exemplo.com/Lorem-Ipsum.pdf", "https://www.exemplo.com/Lorem-Ipsum.pdf", "https://www.exemplo.com/Lorem-Ipsum.pdf", "https://www.exemplo.com/Lorem-Ipsum.pdf"]

Atribui isso a um novo script para me retornar os links e a quantidade de documentos que existem:

function run(documents){
  try {
    documents = JSON.parse(documents)

    let res = documents.map((link, index) => {
      return {
        documents: documents.length,
        link: link
      }
    });

    const documentsToDictionary = arrayToDictionary(res);
    return JSON.stringify(documentsToDictionary);

  } catch (e) {
    return "erro ao obter documentos"    
  }
}

function arrayToDictionary(array) {
  const dictionary = {};
  array.forEach((value, index) => {
      dictionary[index] = value;
  });
  return dictionary;
}

Então no próximo bloco eu adiciono uma variável de contagem com o script:

function run(resourceDocuments, countSends) {
  try{
      resourceDocuments = JSON.parse(resourceDocuments)[0]
      if(!countSends){
          return resourceDocuments.documents - 1
      }

      return parseInt(countSends) - 1
  }catch(e){
      return "Erro no processo"
  }
}

Com a condição no bloco, enquanto o contador não for “zerado” ele irá repetir o processo:

No bloco que realiza o envio do arquivo eu apenas monto o body do conteúdo dinâmico com o script:

function run(resourcedocuments, countSends) {
    resourcedocuments = JSON.parse(resourcedocuments)
    return {
        "title": "Nome do documento.pdf",
        "uri": resourcedocuments[countSends].link,
        "type": "application/pdf"
    }
}

Adiciono o conteúdo dinâmico

Talvez isso tenha ficado muito complexo e exista alguma forma mais simples de fazer isso, mas espero ter lhe dado alguma luz 😅

Veja isso funcionando aqui

Aqui está o fluxo caso queira dar uma olhada:
showmethepdfs.json (13,7,KB)

Este tópico foi fechado para respostas.

4 comentários

Adriano_tsi
Forum|alt.badge.img+1
  • Solver
  • Resposta
  • November 29, 2022

Olá @Pedro_Gabriel_Cruz_L, você está utilizando o builder na construção do contato? Se Sim, o que você pode fazer é adicionar um contador em um fluxo de Loop, um bloco faz a contagem de envios restante e o próximo faz o envio do arquivo em si.

Por exemplo:

Digamos que o vetor de links que receba seja algo parecido com isso:

["https://www.exemplo.com/Lorem-Ipsum.pdf", "https://www.exemplo.com/Lorem-Ipsum.pdf", "https://www.exemplo.com/Lorem-Ipsum.pdf", "https://www.exemplo.com/Lorem-Ipsum.pdf"]

Atribui isso a um novo script para me retornar os links e a quantidade de documentos que existem:

function run(documents){
  try {
    documents = JSON.parse(documents)

    let res = documents.map((link, index) => {
      return {
        documents: documents.length,
        link: link
      }
    });

    const documentsToDictionary = arrayToDictionary(res);
    return JSON.stringify(documentsToDictionary);

  } catch (e) {
    return "erro ao obter documentos"    
  }
}

function arrayToDictionary(array) {
  const dictionary = {};
  array.forEach((value, index) => {
      dictionary[index] = value;
  });
  return dictionary;
}

Então no próximo bloco eu adiciono uma variável de contagem com o script:

function run(resourceDocuments, countSends) {
  try{
      resourceDocuments = JSON.parse(resourceDocuments)[0]
      if(!countSends){
          return resourceDocuments.documents - 1
      }

      return parseInt(countSends) - 1
  }catch(e){
      return "Erro no processo"
  }
}

Com a condição no bloco, enquanto o contador não for “zerado” ele irá repetir o processo:

No bloco que realiza o envio do arquivo eu apenas monto o body do conteúdo dinâmico com o script:

function run(resourcedocuments, countSends) {
    resourcedocuments = JSON.parse(resourcedocuments)
    return {
        "title": "Nome do documento.pdf",
        "uri": resourcedocuments[countSends].link,
        "type": "application/pdf"
    }
}

Adiciono o conteúdo dinâmico

Talvez isso tenha ficado muito complexo e exista alguma forma mais simples de fazer isso, mas espero ter lhe dado alguma luz 😅

Veja isso funcionando aqui

Aqui está o fluxo caso queira dar uma olhada:
showmethepdfs.json (13,7,KB)


olá eu tentei essa solução mas por algum motivo ela só funciona no blip, e não no whatsapp, você já chegou a testar ela fora do builder?


Adriano_tsi
Forum|alt.badge.img+1
  • Solver
  • December 13, 2022

Olá @Pedro_Gabriel_Cruz_L, estranho… o que acontece ao rodar o fluxo no WhatsApp? Já usei um fluxo semelhante no WhatsApp sim.


já resolvi aqui, aparentemente pareseInt() causa problemas no whatsapp.