Skip to main content

Dando continuidade no assunto sobre o módulo CONTEÚDOS > RECURSOS

Conteúdos > Recursos Poderia nos dar um exemplo de como usufruir ao máximo desse módulo? e claro, suas boas práticas 😉

Resposta do @BrunoC em: Blip AMA #7 | Dúvidas no Blip - YouTube


Bom, primeiramente obrigado pela resposta @BrunoC, já deu pra pensar em algumas aplicações e claro, preciso aprofundar um pouco mais a respeito.

Uma dúvida enorme que eu fiquei é, se eu não utilizar CONTEXTO DO ROUTER ATIVADO, eu precisaria utilizar a API “Get Resources” (Blip Docs | API Reference) nos meus subbots ? Ou teria outra forma? Ultimamente estou tendo péssimas experiências com o contexto ativado.

Aproveito para convocar o @costa e @Rafael_dos_Anjos , vocês utilizam o módulo RECURSOS?

fala @GabrielPetrone ótimo ponto.


ainda não uso este recurso, mas vou apreder com vcs e com certeza será útil. Li rapidamente a documentação e deu para entender um pouco. Bora aprender mais 🚀




Sim, @GabrielPetrone. Uma vez que o contexto está desabilitado, a única forma seria via API.


E como prometido, vou deixar aqui como fazer pra aproveitar os scripts como recursos







  1. Crie um Recurso do tipo texto e adicione todas as funções (incluindo a run):









  2. Na ação de executar script, passe esse recurso como parâmetro de entrada, neste caso usando {{resource.funcao}}







  3. Dentro do Script, você precisa pegar o texto do recurso e transformar ele em funções executáveis. Por isso, use a função eval().







   function run (resource) {

eval(resource);

return Hello(); //uma das funcoes definidas no recurso

}



Assim vocês conseguem ter Scripts escaláveis e de fácil manutenção para todos os seus blocos (ou todos os bots, se for em roteadores).


@GabrielPetrone não utilizo mas vou dar uma atenção especial e entender como funciona…


vlw


Já começou detonando! Perfeito @BrunoC , muito obrigado por essa dica!


Quero ver o que mais podemos fazer com isso, então fica o desafio pra mim, @Pedro_Lucas @Costa e @Rafael_dos_Anjos





E você @caiof dá uma dica pra nós de como usar esse módulo




Olá pessoal, tudo bom?



@GabrielPetrone, a ideia principal desse módulo e é o mais legal dele é a possibilidade de separar informações que normalmente estariam em seu fluxo, dessa forma, seu bot fica extremamente mais escalável, principalmente, porque não será mais necessário sempre mexer no fluxo para mudar algo.



Imagine, por exemplo, nos seguintes pontos:







  • Horário de atendimento: Você pode adicionar um JSON com seu horário de atendimento e criar uma verificação baseada nessa informação no fluxo, assim sendo, para mudar o horário de atendimento não seria necessário publicar o fluxo, além de você poder adicionar esse JSON via API direto do seu sistema.




  • Lista de palavras bloqueadas: Você pode cadastrar uma base de palavras bloqueadas que podem ser utilizar como verificação no seu fluxo, via regex ou script.




  • Conteúdo dinâmico: Pense em criar um conteúdo dinâmico que recebe esse recurso que é facilmente mutável para exibir uma promoção ou um alerta que varia de tempos em tempos no seu fluxo, tal como uma instabilidade.




  • Reaproveitamento de script: Esse aqui o @BrunoC já mostrou um exemplo haha




Dentro de cada bot tenho certeza que existe uma infinidade de utilização neste módulo, muito legal a movimentação dessa discussão 😀


Fala pessoal, até aqui muito obrigado pelas contribuições. Vamos encher com mais coisas hein!? 😉



Agora respondendo a minha pergunta :gabrielpetrone:





Sim e não, meu querido! Precisa usar a API mas não é essa que você colocou. A correta é: Blip Docs | API Reference



Certo, depois de criar o Recurso lá no seu Router, você pega a Key dele e chama essa API passando a chave (nome) do recurso criado. Salve o corpo de resposta da sua requisição HTTP em uma variável (básico do blip né).



Agora pra acessar o conteúdo é simples, basta usar a variável: {{variavel_de_resposta_do_corpo_da_sua_requisicao_HTTP@resource}}



Não é tão bom quanto quando se usa o contexto do roteador, mas num cenário com 2 subbots ++, elimina um ~puta~ trabalho pra atualizar tudo. O trabalho é só na primeira vez pra fazer o que citei acima.




@BrunoC neste seu exemplo, como eu usaria uma função que passa uma variável? Eu fiz um teste aqui e não funcionou passando “return Hello(variavel);” 😦



É possível? Deveria ter funcionado?


Fala @GabrielPetrone,


dentro do resource, deve passar um parâmetro para a função hello()



function Hello(nomeDaVariavel){

//sua função

}



após isso, dentro da function



function run(resource){

eval(resource);

return Hello(nomeDaVariavel);

}



isso deve funcionar.


Bom dia Costa!


Se não estou enganado, eu fiz isso mesmo!


Eu acho que o erro foi na minha variável e to comendo bola, vou ter que testar novamente mais tarde.



No caso, eu tenho que passar na entrada do script as duas variáveis né? {{resource.funcao}} e {{nomeDaVariavel}} ?



Portanto o correto seria:



function run(resource, nomeDaVariavel){

eval(resource);

return Hello(nomeDaVariavel);

}



Eu havia feito dessa forma, seria isso?


É isso mesmo que o @costa falou, @GabrielPetrone



Eu por exemplo fiz essa função aqui, oh:



function hello(string){

var aux = "Hello, ";

return ss.concat(string);

}



No Blip, eu fiz da seguinte forma, com uma variável xtring, com valor World:



function run(func, xtring) {

eval(func);

return hello(xtring);

}



E o resultado foi Hello, World".



Depois fala pra gente se funcionou! Pode ser que você esteja comendo alguma mosca por aí.


Meu exemplo de utilização:



Criei um recurso chamado “helpers” no Router.





No BOT que eu desejo utilizar o recuso, fiz uma chamada HTTP para o Recuso e salvei o seu retorno em na variável helpresData.





E utilizar ele assim:



/**

* @param helpersData

* @param contact.source

*

* @return {string}

*/

function run(helpersData, channel) {



const helpers = JSON.parse(helpersData);



eval(helpers.resource);



return textStrong(channel, "Texto aqui...");

}

Entendi certo? Com isso você trata o texto em negrito conforme o formato de cada canal, sem precisar criar dois blocos separados?



Ou seja, que o Bruno me prometeu e até hoje nada? 😍 Só coisa boa hoje…



Estou só te ensinando a pescar e não te dando o peixe 🤣





eu esqueci mesmo






@GrazianiMartins eu já tinha feito uma solução dessa, mas eu retornava só as tags e não adicionava os textos - vendo a sua, me pergunto o motivo de eu não ter pensado assim 😂



Aí eu fazia tipo assim:





{{tag1}} Texto {{tag2}}





Onde {{tag1}} era a tag de abertura (<b> ou 😉 e {{tag2}} era a de fechamento {</b> ou *)


A refatoração de código nunca acaba rsrsrs.



Logo alguém vem como uma abordagem melhor ou que faça mais sentimo no contexto dele(a).



Bora! Compartilhar!!!


Então…


Segue função para alterar determinados textos de uma frase em negrito:





replaceTextToStrong





/**

* @param contact.source

* @param text

*

* @return {string}

*/

function textStrong(channel, text) {

switch (channel) {

case '0mn.io':

return "<b>" + text + "</b>";

case 'WhatsApp':

return "*" + text + "*";

default:

return text;

}

}



/**

* @param contact.source

* @param phrase string

* @param words string Texts separated by |

*

* @return {string}

*/

function replaceTextToStrong(channel, phrase, words) {



const regExp = new RegExp(words, 'gi');



return phrase.replace(regExp, function(word) {

return textStrong(channel, word);

});

}



Utilização:



function run(helpersData, channel) {



const helpers = JSON.parse(helpersData);



eval(helpers.resource);



phrase = "Mr Blue has a blue house and a blue car";

words = 'blue|house|car';



return replaceTextToStrong(channel, phrase, words);

}

Obrigado galera, vocês são fera d+


é usar a criatividade e converter os recursos em libs com várias finalidades.



Show!


Pessoal, adorei os exemplos.


Alguem tem alguma aplicação para o Tipo JSON ou Menu.


O meu objetivo é enviar o recurso via API para o usuário, a requisição é simples:


{



“id”: “0002”,



“to”: “{{Identificador_Usuario}}”,



“type”: “application/vnd.iris.resource+json”,



“content”: {



 "key": "conteudodeteste"    



}



}



Porém só funciona quando o recurso é do tipo Texto, os outros tipos não enviam.


Hey @Danilo_de_Moura_Raim, tudo bem?


Pode detalhar um pouco mais sobre o uso dessa sua solução? Fiquei com algumas dúvidas, por exemplo:





  • Por onde você vai enviar o recurso?


  • Poderia passar o JSON para exemplificar?


  • Você quer adicionar o recurso ao bot ou usá-lo no fluxo?




Ah! Para fechar nosso primeiro contato com chave de ouro, gostaria de te dar boas-vindas à nossa Comunidade! 🎉 Neste momento, o tópico de Primeiros Passos vai ser super importante para você! Aproveite!


opa, boa tarde!


Obrigado pelo contato.



Consegui resolver utilizando recursos separados, um recurso envia textos com as informações e outro recurso envia os botões para auxilio de resposta rápida, parecido com o template do WhatsApp.



Chamei os dois recursos via API de forma separada, primeiro o texto, depois os botões, funcionou bem.



A minha questão era, eu gostaria de enviar um template de WhatsApp porém sem ser pelo WhatsApp rsrs, o canal utilizado foi o teams, e eu não conseguia criar um recurso com o texto e botão junto, sendo assim foi feito a solução separada.


Comente