Como Criar um Buffer de Mensagens Otimizado no n8n para Chatbots com Redis | Evite Gargalos!

1.34k views6516 WordsCopy TextShare
Gabriel Augusto
Neste vídeo, vou te mostrar como criar um buffer de mensagens otimizado no n8n, essencial para quem ...
Video Transcript:
buffer de mensagem otimizado para você utilizar aí no seu chatbot que utiliza telegram WhatsApp ou qualquer outra plataforma ferramenta que o usuário não fique bloqueado de mandar outra mensagem enquanto tá sendo processado por exemplo quando a gente tá no chat GPT se eu mando uma mensagem enquanto ele tá gerando a resposta eu não posso mandar outra mensagem no WhatsApp não é assim que funciona então o usuário pode falar de forma picada e não objetiva e é esse buffer é para corrigir isso E permitir que a gente espere o usuário eh mandar tudo que ele precisa
mandar para depois processar tudo de uma vez concatena tudo e manda tudo ali paraa Nossa inteligência pra gente paraa nossa inteligência dar uma resposta objetiva também porque senão o usuário vai mandar Boa tarde a inteligência responde Boa tarde tudo bem a inteligência tudo bem como você tá E aí fica essa conversa picada ali que não é objetivo porque o usuário ainda não tinha ter nado de mandar todas as mensagens e a inteligência já estava processando certo e o que é um buffer O que é um buffer de mensagens o buffer nada mais é do que
um local de armazenamento temporário a gente vai colocar temporariamente uma informação dentro do buffer para distribuí-la pro lugar certo e depois limpa o buffer apaga essas informações do buffer para continuar esse fluxo coloca no buffer vai pro lugar certo limpa do buffer então o armazenamento ali temporal ário E é isso que a gente vai utilizar aqui a gente temporariamente vai armazenar a primeira mensagem do usuário a segunda a terceira e quantas mensagens o usuário mandar para depois concatenar tudo isso apagar o que tá do buffer e mandar para processamento ali paraa Nossa Inteligência Artificial certo
então beleza dado que é buffer dado o o porquê da gente utilizar esse buffer e eu vou agora explicar o porque ele é otimizado esse que eu vou ensinar aqui para vocês ele é otimizado a gente costuma ver eh em vários vídeos inclusive do YouTube o pessoal coloca ali um um tempo de espera E aí depois faz uma checagem se é aquela é a é a última mensagem e segue a vida certo só que aí a gente gera um problema um gargalo inclusive porque se eu colocar por exemplo 15 segundos de espera para depois prosseguir
e só prosseguir em um fluxo né não não prosseguir em todos mas todos esperaram eu crio um Problema que problema é esse todos os meus fluxos vão estar eh esperando e aí quando a gente a nossa aplicação começa a ficar muito grande começa a escalar de uma forma muito grande e ter muitos usuários conversando ali com com a ia em simultâneo a gente vai criar um gargalo de processamento no nhn porque o nhn quando a gente tá instalando ele lá por exemplo a minha instalação eu tenho tenho três workers e cada worker pode ter cinco
eh Jobs workflows ali em execução simultâneo certo então eu tenho 15 execuções que eu posso fazer em simultâneo eu vou colocar um simultâneo entre aspas porque na computação nunca é simultâneo Mas vamos lá eu tenho 15 execuções em paralelo E aí se a minha aplicação ali se o meu chatbot tá recebendo muito cliente e muito cliente que manda mensagem picada todos os meus fluxos tendo que esperar esses 15 segundos eu vou fazer um gargalo ali porque eu não vou ter trabalhador worker para conseguir ficar processando tanto fluxo tanta mensagem que tá recebendo Porque eles estão
tendo que esperar e tá tendo que esperar à toa a gente consegue tirar essa espera à toa e deixar um fluxo eh apenas esperando que aí OK um fluxo vai ter que esperar a gente precisa esperar para fazer a checagem de última desculpa de última mensagem do cliente certo beleza dado essas explicações a gente vai aqui pro nosso nhn quais ferramentas que eu vou utilizar nhn e redis certo não vou utilizar aqui banco de dados ou base Roll ou o planilha ali do do Google sheets vou utilizar apenas o redis porque se você tem um
nhn você tem um redis Com certeza Então a gente vai utilizar apenas um redis você pode sim eh Putz eu preciso de log das mensagens recebidas ajustar o fluxo para gravar essas mensagens também em um banco de dados além do redis ou numa planilha do drive a ferramenta que você se adapta melhor certo mas o buffer mesmo vai ser feito no redis porque o redis é um é um banco preparado para para para ser rápido e essa rapidez pra gente é excelente então é para é um banco de Cash m mesmo vamos armazenar temporariamente uma
informação ali e depois a gente remove e dá sequência nesse fluxo esse nosso buffer ele vai ser uma lista certo então quando receber a primeira mensagem a lista vai ser criada certo essa lista criada todas as próximas mensagens durante o período de 15 segundos ali vai ser adicionado no final dessa lista certo e aí depois que ter passou 15 segundos da última mensagem 15 10 ou o tempo que que você achar necessário setar a gente vai dar continuidade vamos prosseguir com o nosso workflow com o nosso primeiro workflow E aí ele vai fazer esse processamento
certo e aí a gente vai fazer a remoção do dessa lista lá do do redis vamos Apagar o buffer daquele usuário para que na próxima vez que ele mandar além desse tempo de espera da última mensagem se cria um novo buffer e o processo se repita então vamos aqui eu já tenho eh uma mensagem recebida aqui pela Evolution certo que é uma mensagem do WhatsApp e eu tenho uma normalização dela basicamente para deixar bonitinho sabe tem coisas que as mensagens podem vir de tipos diferent pode ser uma imagem pode ser um texto do modo estendido
ou pode ser um texto do modo conversation então tipo assim eu eu faço essa normalização aqui para sempre para padronizar a saída a saída vai ser sempre vai ter um content sempre vai ter um content Type tô sempre pegando o message ID certo sempre pegando chat ID que é o a conversa ali no caso então sempre aqui eu tenho e esse Jon né que isso aqui é um Jon eu tenho esse objeto aqui da minha mensagem então eu eu faço essa normalização feito a normalização o que que eu preciso fazer eu preciso gravar Essa mensagem
eu preciso salvar essa mensagem no buffer preciso criar esse buffer certo e a gente vai utilizar o redis e como que a gente vai fazer essa criação do buffer o buffer no ali no redis ele essa lista ele é criada automaticamente quando a gente tenta inserir alguma coisa quando a gente vai inserir alguma coisa então a gente vai fazer um push push nada mais é do que empurrar inserir alguma informação ali então a gente vai fazer um push lá no buffer certo P buffer qual que vai ser a lista que a gente vai tá criando
Como que é o nome dessa lista Qual que é o identificador dessa lista vai ser o o chat ID aqui que no caso eu tô utilizando o número do cliente que tá falando comigo e qual que é a informação que eu quero armazenar nesse Ness nesse buffer nessa lista eu quero armazenar o meu objeto message inteiro mas por que eu tô armazenando o objeto message inteiro e não só o content da message porque no na na sequência do do fluxo eu vou precisar trabalhar com o meu objeto messag inteiro eu preciso saber todas essas informações
eh no para continuar se eu for fazer por exemplo criar uma sessão eu preciso saber qual que é o o chat ID eu preciso saber qual que é o tipo porque eu vou saber se eu vou continuar ou se eu não vou continuar se eu vou falar ah eu não recebo imagens Então eu preciso de todo esse contexto aqui por isso que eu salvo todo o message em vez de salvar só o message P content por exemplo certo então aqui eu vou estar salvando todo o message e o tei essa opção zinha aqui ela é
cara armazena sempre no final você criou vai criar uma lista e eu quero que você armazene sempre no final Então se é a primeira mensagem da lista a lista tá vazia armazena no final armazenou no final a última é a primeira certo mas se é as subsequentes mensagens armazena no final a ú armazenou no final criou a segunda mensagem armazenou no final criou a terceira mensagem entendeu então eu quero que sempre armazene no final porque eu preciso da sequência das mensagens do usuário para ter ter um contexto que faça sentido né a gente armazenar de
uma de forma não ordenada não vai fazer sentido a nossa inteligência vai falar ué que que que que tá querendo aqui porque a mensagem fica desconexa então aqui eu criei o buffer o buffer de mensagem armazenando o objeto mensagem no final dessa lista certo e após adicionar esse objeto mensagem no final da lista eu preciso obter a lista completa certo eu não vou pegar apenas e a lista incompleta Opa que que eu não fiz aqui hum invalid Type show de bola gente precisa fazer aqui ó um Jason ping streamify beleza por que eu fiz isso
vamos lá quando a gente vai armazenar algo no redis ele não armazena o objeto Jason inteiro então se eu tivesse colocado só o message P content ele armazenaria sem erro como eu tô armazenando um objeto um um Jason em formato de objeto aqui no no no nhn ele precisa que eu converta esse objeto numa string para conseguir armazenar lá certo então aqui eu precisei fazer esse Jon string F para que ele converta e armazena esse objeto como uma string no final da lista agora a gente pode obter esse eh essa lista certo então qual que
é a chave a chave aqui é o nome da lista que é o número do do contato lá no WhatsApp eu vou chamar de messages certo o tipo aqui como eu sei que é uma lista posso colocar lista mas se deixar no automático também ele vai funcionar perfeitamente e aqui eu vou chamar de get e messages buffer certo e aqui eu vou colocar bu mensag buffer lembrando a gente armazena a mensagem uma uma no final e a gente obtém a lista completa certo no na hora que a gente clica e cria esse get aqui a
gente não pega só uma mensagem beleza agora a gente já tem aqui o o objeto eh a nossa lista de mensagens certo messages que só tem um objeto agora e tá aqui o nosso Jon Só que ele ainda tá em formato de e string essa lista aqui não não tá em formato de de objeto que que é o o formato que a gente trabalha ali com com o objeto certo que a gente faz a o dot notation que a gente coloca message.on content isso aqui ó do jeito que tá a lista aqui a gente não
consegue trabalhar com isso mas vamos lá vamos prosseguir aqui hum agora a gente vai criar um Suit certo Por que eu vou utilizar um Suit e não o si porque eu eu vou fazer só duas condições tá eh já me me antecipando aqui eu vou fazer duas condições Quais quais são essas condições primeira condição Eu quero saber se a mensagem que eu recebi aqui certo se o message ID é igual o o message ID é no caso é igual não eu quero saber se esse message ID é diferente do primeiro mensage ID da lista no
caso aqui vai ser igual certo porque aqui a gente só a gente tá no primeiro então essa condição não vai ser verdadeira mas eu preciso saber se o messageid que eu tô processando ele é diferente do primeiro mgid porque se for diferente eu não tenho que fazer mais nada certo eu eu tenho que parar a execução aqui eu já gravei lá no final da lista deixa quietinho porque o workflow que tiver esperando ele vai pegar a lista inteira depois o segundo a segunda condição que eu preciso fazer é eu quero saber se a última mensagem
da lista faz mais de 15 segundos que foi recebida certo se essa mensagem fizer mais de 15 segundos que foi recebida aí eu quero prosseguir porque eu vou dar continuidade para concatenar a mensagem certo e ir lá processar com a minha inteligência artificial e fazer tudo que eu preciso fazer se não atender nenhuma dessas condições eu preciso de qual condição agora esperar certo e se eu utilizasse o if Eu não conseguiria por mais que eu só tenho duas condições certo aqui eu só trato verdadeiro ou falso no no IF aí eu eu teria que ficar
fazendo if com if com if com if vários ifs aqui ou eu trato isso aqui aqui num sutch certo que é o que a gente vai fazer para deixar mais fácil e mais tranquilo pra gente Então qual que vai ser o primeiro aqui que a gente vai criar eu vou colocar nada a fazer certo como saída o segundo vai ser proseguir certo que é vai dar continuidade O que que a gente precisa checar aqui eu preciso pegar esse arrei de messages completo eu quero pegar o último objeto dele o l certo pronto pegamos aqui o
message completo e o Lest eu preciso fazer um Jason P parse lembra que a gente tinha convertido isso aqui em uma string certo como eu converti ele em uma string se eu tentasse por exemplo fazer isso aqui ó eu preciso do message ID ponto message under ID ele tá dando erro tá vermelhinho tá undefined Opa tá dando erro aqui porque eu coloquei uma vírgula um ponto mas tá vermelhinho aqui dando undefined também por que isso tá acontecendo porque isso aqui é uma string e eu não consigo trabalhar a string desse jeito eu preciso converter ela
em objeto Jason de novo então eu utilizo aqui o Jon ppce certo e agora sim se eu escrever pon message under ID eu consigo acessar o ID dessa mensagem no caso aqui a Gente Tá acessando o ID da última mensagem certo só que na verdade a gente tá acessando o ID errado não é da última que eu quero saber é o ID da first first certo ah mas apareceu o mesmo ID lembra que por enquanto a gente só tá com uma mensagem aqui no na nossa lista então o primeiro e o último são os mesmos
certo que que eu preciso eu preciso saber se esse ID se esse menag ID da primeira mensagem é diferente então é not equal certo ao vamos pegar aqui p mes vou pegar do normalização tá se é se ele é diferente desse message ID aqui que eu estou e recebendo agora porque se ele for diferente eu não quero fazer nada porque eu já fiz o que tinha para fazer eu já adicionei ele no final da fila certo então não preciso fazer mais nada então beleza se for diferente não faça mais nada agora a gente vai vir
aqui pro fluxo de prosseguir certo como que vai funcionar aqui esse fluxo de prosseguir eu vou pegar de novo eu vou só copiar aqui para ficar mais fácil eu não ter que repetir na verdade não eu vou repetir para para ficar mais claro para vocês Tá eu vou pegar o messages aqui o arre messages de novo e o que que eu preciso desse arre messages aqui preciso da última mensagem agora porque eu preciso saber se já faz 15 segundos da última mensagem recebida se não fizer 15 segundos da última mensagem recebida essa condição não vai
ser verdadeira beleza eu peguei o mess de pon Leste e aqui eu tenho um time stamp certo que eu salvei veio lá da minha nor é o horário que eu recebi essa mensagem então preciso acessar o time stamp Ah vou só digitar aqui time stamp vai vai vai funcionar não não vai funcionar por qu porque a gente armazenou o nosso objeto Jason como uma string lá na nossa lista então eu tenho que fazer um Jason parse certo e agora colocar time stamp opa agora sim a gente consegui puxar a data por quê Porque a gente
converteu o o objeto que estava no formato de string no pro formato de objeto mesmo então beleza eu tenho time stamp aqui o que que eu preciso saber eu preciso saber se esse time stamps já tem mais de 15 segundos como que a gente vai saber disso a gente então precisa fazer uma comparação comparação essa o time stamp dessa mensagem ele é anterior a agora menos 15 segundos no caso então beleza A a ideia aqui é o time stamp o horário de recebimento da mensagem ali ele é anterior ele é antes de agora menos 15
segundos então é o que a gente vai fazer aqui vamos fazer uma comparação de data is before certo é antes aqui vai ser uma expressão e aqui a gente vai colocar o cifrão Now beleza cifrão Now a gente tem o horário de agora show só que não é só o horário de agora que a gente quer comparar porque se eu se eu perguntar Putz eu recebi a mensagem antes de agora isso aí vai ser verdadeiro inclusive já tá aqui como verdadeiro mas a pergunta é essa mensagem ela já tem 15 segundos no caso essa mensagem
aqui ela é anterior Men 15 ela tem mais de 15 segundos Então a gente vai fazer um Now ponos a gente vai subtrair uma informação daqui o nhn Nessa versão ele já traz aqui como que utiliza então aqui ele já fala ó é a data pon min o valor e se é que o que que é esse valor então a gente vai colocar 15 V Beleza então então se você observar aqui ó ele já trouxe para mim o horário 15:20 e45 agora já é 15:21 Nossa eu coloquei praticamente exatamente no primeiro segundo ali do na
hora que que virou de 1521 né 3:21 então é isso que eu tô fazendo o Now é o a data aqui é agora menos 15 segundos e se a data lá o time stamp e a data que eu recebi a mensagem for 15 segundos antes Ô for anterior a agora menos 15 segundos essa condição é verdadeira como a data aqui é a data é de outro dia isso aqui ó do dia 19 é anterior a agora menos 15 segundos então é verdadeira certo daqui a pouco a gente edita isso aí e a outra coisa que
a gente vai fazer é o seguinte a gente vai criar lembra que eu falei ó eu tenho duas condições e eu tenho um sen não ali se nenhuma dessas duas condições eu preciso fazer alguma coisa Que coisa é essa esperar que a gente já tenho nada a fazer eu já tenho prosseguir então no sutch o senão ele chama fallback fallback output que que é esse fallback fallback é um nó de cara nada aqui em cima é deu como verdadeiro então cria esse nó de fallback aqui que eu vou precisar fazer alguma coisa no nosso caso
esse vai ser um fallback extra tá vendo por por default aqui ele não existe esse nó de fallback então a gente tá criando ele e tá falando que é um é uma saída Extra certo e eu vou renomear o fallback output aqui para esperar beleza para ficar bem didático aqui pra gente beleza então agora eu já tenho aqui o sutch que ele trata o nada fazer porque eu já inseri a mensagem ele já trata o prosseguir Ele já sabe quando ele tem que prosseguir e ele sabe quando tem que esperar então aqui eu já vou
puxar aqui pro o esperar e eu vou trazer um a White quanto tempo eu vou esperar 15 segundos certo e depois que eu esperar 15 segundos o que que eu preciso fazer eu preciso voltar aqui no obter mensagens certo que eu vou obter a lista completa de mensagens se outros se outros workflows adicionaram mensagens a essa na hora que eu volto aqui eu consigo pegar e isso aqui pegar esse essa lista completa e Verificar novamente opa vou verificar novamente eh essa condição Eu tenho certeza que ela não vai ser verdadeira certo por quê Porque ela
não vai ser verdadeira porque para ela entrar nessa condição ela sempre e só entra nessa condição se não for a primeira mensagem a gente tá segurando a execução do workflow da primeira mensagem então essa mensagem na primeira execução ela nunca esse essa regra aqui de roteamento nunca vai ser verdadeira certo paraa primeira mensagem essa aqui ela pode ser verdadeira se a última mensagem fizer 15 segundos e senão ele espera de novo certo e aí sobre a espera calma aí que a gente já já volta nela mas beleza a gente obtém a mensagem aí ele vai
lá obtém a mensagem de novo e descobre que ah não a última mensagem realmente já faz 15 segundos ali que ela foi recebida então eu posso prosseguir que que ele vai fazer aqui quando ele for prosseguir ele precisa concatenar as mensagens então é o que eu vou tratar aqui agora com vocês a parte de concatenar as mensagens e o Nada a fazer aqui eu vou colocar um no Operation aqui só para ficar bonitinho pra gente beleza no Operation Então vamos tratar aqui a parte de prosseguir a mensagem como essa mensagem aqui eu sei que ela
anterior a 15 segundos eu posso fazer o quê eu posso executar aqui e ele já vai cair aqui no nó de prosseguir e agora aqui vem a o X da questão a gente precisa eh concatenar todas as mensagens recebidas como aqui a gente tem uma lista nesse momento aqui eu só tenho uma mensagem nessa lista certo mas daqui a pouco eu não vou ter só uma mensagem porque daqui a pouco eu vou inserir bem mais mensagens certo e aí aqui eu puxei o Array de messages e joguei aqui a Na verdade eu puxei o o
o messengers Não puxei o arrei aqui eu puxei o arrei Ele criou como do tipo arrei certo e aqui é uma lista tá feio ainda porque tá no formato de string lembra que é uma lista de string mas a string precisa ser convertida a um objeto e agora a gente precisa concatenar todas as mensagens como a gente faz isso aqui a gente vai utilizar um pouco de JavaScript Beleza então como que funciona quando a gente precisa percorrer um arrei e pegar uma informação desse Array e retornar a gente utiliza o Map certo então a gente
vai pegar o map aqui já tem mais ou menos como que funciona ó o nhn já traz ó ele fala ó pega uma variável faz uma função aqui ó por exemplo ele vai pegar o número ele vai pegar o valor ele vai criar uma função que esse valor vai ser multiplicado por do e a saída vai ser um arrei também isso aqui é é JavaScript puro isso aqui tá então 12 virou 24 33 virou 66 16,32 a gente vai fazer algo semelhante Mas a gente não vai criar uma função que multiplica então o que que
eu vou fazer eu vou chamar aqui todas as Strings de value de valor certo vou criar a função que ele vai fazer um json p parse no valor no value por quê Porque a gente precisa converter o objeto que tá em string em objeto pra gente conseguir eh trabalhar com ele então eu vou pegar o valo e jogar dentro de um Jason parse e eu vou pegar o content certo Olá tudo bem então agora ele me pegou só o Olá tudo bem E me retornou uma Rei só com Olá tudo bem certo e se eu
tivesse outra mensagem lá dentro Vamos colocar uma mensagem aqui só para vocês verem eu vou editar isso aqui e vou colocar o mais duas interrogação e vou editar até o push aqui eu só vou rodar até o push Não na verdade eu posso rodar tudo ele vai chegar no prosseguir tá beleza agora tá vendo ó a gente tem mais que uma mensagem dentro daquele daquele buffer Então a gente tem aqui Um Oi tudo bem a gente tem Opa a gente tem dois Olá tudo bem pera aí a Ah tá é que eu editei só que
eu preciso rodar a normalização de novo para poder rodar isso aqui beleza agora a gente tem três mensagens olá tudo bem olá tudo ué calma aí eu não salvei ã deixa eu olhar aqui o que que aconteceu que a normalização não não pegou Ah tá é que eu eu tinha que ter rodado isso aqui primeiro como eu fiz uma edição eu precisava ter rodado isso aqui primeiro rodei ali o o input Chegou a mensagem nova e agora sim a gente pode vir aqui e vai ter olá tudo bem olá tudo bem olá tudo bem e
as nossas interrogações ali o código que a gente estava fazendo lembra o map que a gente estava fazendo ó o arrei que ele criou aqui olá tudo bem olá tudo bem olá tudo bem interrogação interrogação certo só deixa eu fazer um adendo ele passou pro prosseguir eh olhando aqui o before eh 15 segundos atrás porque a o input aqui o time stamp recebido na dessa mensagem é uma mensagem antiga ele ele eu não alterei é o mesmo então é lá do dia 19 ainda então não importa quantas mensagens eu tô adicionando aqui ele vai estar
sempre entrando nesse prosseguir já a gente ajusta isso também aí aqui beleza ó olá tudo bem olá tudo bem olá tudo bem interrogação interrogação só que não é assim que a gente vai mandar pr pra nossa inteligência a gente precisa fazer o quê A gente precisa fazer um join nessas mensagens a gente vai fazer um join agora ficou melhor não é mais uma arrei é uma string de Olá tudo bem mas tá tudo separado por vírgula não é isso que a gente quer a gente quer que ele pule uma linha eu eu também não quero
por exemplo um espaço apenas porque pode ficar desconexo também essa a mensagem toda em uma linha às vezes ele ele escreveu coisas e a quebra de linha é justamente tipo ó é como se fosse um ponto final ali só que aí eu utilizo uma quebra de linha um contra barra n agora sim aqui a gente já tem o conteúdo que a gente vai mandar para nosso ia ó olá tudo bem olá tudo bem olá tudo bem interrogação interrogação show de bola esse conteúdo aqui não vai ser mais do tipo arrei vai ser aqui do tipo
string Então a gente tem o messages eu vou chamar isso aqui de messages que a saída dele deixa eu rodar o workflow completo a saída dele ele é um olá tudo bem olá tudo bem olá tudo bem E eu tenho contra barra n aqui no meio significa que ele tá pulando linhas show de bola a gente já tem aqui o nosso fluxo pronto e agora a gente precisa testar ele para testar ele eu vou fazer o quê aqui no time stamps eu vou tirar o input que vem lá da mensagem e eu vou colocar como
exemplo aqui o Now então Now P ISO porque eu quero que a data seja seja um no formato ISO lá salvei aqui e vamos fazer o teste Opa ó que que aconteceu entrou a mensagem é uma mensagem de agora ele salvou a mensagem no final da da da lista ele obteve a lista ele entrou aqui Ele olhou Cara essa mensagem aqui que eu tô processando agora o ID dela é diferente do ID da primeira mensagem não eu não editei o ID da primeira mensagem certo então o que que ele fez ele não não atingiu essa
condição aí ele veio pra próxima condição Ele olhou o quê Ele olhou essa eh a última mensagem que tá lá dentro da lista ela tem 15 segundos não a gente colocou o tempo ali como na que é agora então ele vai não vai não vai corresponder em nenhuma dessas duas opções então ele foi pro fallback queer esperar do fallback ele esperou na H el voltou aqui el deu um erro vamos ver aqui por desse erro Tá eu já sei o por do erro vamos lá este erro aqui aconteceu porque a gente tá utilizando joness chat
só que quando a gente passa aqui a gente perde aquele Men chat então eu tô pegando do lugar errado eu precis aqui daiz agora gente tá pegando do lugar certo e vamos executar novamente beleza mesma coisa a última mensagem que é a que eu acabei de inserir ela vai ficar esperando porque ela é igual no caso a primeira mensagem eh e aí agora ele beleza ele continuou esperou os 15 segundos foi lá e obteve de novo no buffer entrou no buffer foi pro prosseguir por quê Porque agora ele esperou 15 segundos ele verificou se a
última mensagem ela é antes de agora Men 15 então ele entrou no prosseguir e pum fez aqui a nossa concatenação de mensagens só que eu quero testar mais uma coisa para vocês o que que eu quero testar aqui agora e se o message ID for outro de eu colocar alguma coisa aqui de eu trocar o mess o que que vai acontecer testa Opa Você viu como executou rápido não esperou não fez nada por quê não foi ele entrou no fluxo do nada a fazer porque o ID da primeira mensagem ele é diferente do id dessa
mensagem que tá sendo processada agora então quantas vezes eu clicar aqui Quantas mensagens o usuário enviar a gente tá ó evitando gargalo tá entrando mensagem tá entrando mensagem e em paralelo vai ter um fluxo no final no final não no começo que foi a primeira mensagem que o caraa mandou que vai tá processando ó ele tô esperando faz 15 segundos Ah não faz então tô esperando certo e aí ele essas condições ele nunca entra nessa com primeira condição porque o mensage ID da primeira mensagem vai ser sempre igual o msid que tá processando isso na
primeira execução e se a mensagem acabou de ser recebida ela com certeza não é anterior a 15 segundos então ele nunca vai entrar nessa condição ele sempre no primeiro na primeira execução do workflow ele vai entrar no fallback que é esperar aí depois que ele espera ele consegue prosseguir aqui para fazer essa concatenação de mensagens pra gente antes de fazer a concatenação de mensagem eu vou fazer o seguinte aqui também eu quero apagar antes de de mandar pra Inteligência Artificial antes de processar eu já quero apagar a lista o Buff que eu criei certo Por
que eu quero fazer isso porque quando eu quando eu por exemplo calma aí deu uma bugada aqui na minha mente porque eu tô fazendo mais de uma coisa ao mesmo tempo por quê Porque eu quero apagar de imediato na hora que eu termino de esperar porque se o usuário mandou uma mensagem tipo assim 16 segundos se ele demorou muito tempo pra próxima mensagem eu já quero que ele crie um buffer novo se eu deixo para apagar no final eu corro o risco de apagar mensagem que eu não podia est apagando do buffer certo porque o
buffer ainda existe ele ainda vai estar criando mensagem lá só que aí no final o GPT respondeu pap Papá eu fui lá e apaguei eu apaguei as mensagens que ele mandou por exemplo com 30 segundos se o GPT não tivesse terminado de processar a tempo ainda então no começo do prosseguir assim do que eu falei Putz pode continuar eu já quero deletar o buffer porque se ele mandar uma mensagem nova de novo vai ser tratado como uma nova mensagem mas vai ter todo o contexto da primeira mensagem lá que o GPT já vai tá processando
ou qualquer ia já vai est processando vai ter que esperar os 15 segundos também então é bem provável que ele responda primeiro o agrupamento de mensagens e aí Siga a responder Da próxima mas já com a bagagem lá da primeira entendeu E aí ele não fica trabalhando respondendo Oi tudo bem picado Então vamos lá apagar a mensagem pra gente apagar a mensagem eu vou ter que ah eu preciso aqui voltar o time stamps que eu tinha editado eu vou colocar um Minus aqui só para eu não não pegar o o código ali que eu tava
utilizando vou colocar sei lá 30 segundos antes vírgula Seconds acho que tem um parênteses a mais aqui menos Ah tá eu não posso o tio iso é no depois beleza beleza Prontinho vamos processar aqui novamente problema problema Verifica o primeiro item Deixa eu só atualizar essa tela aqui que eu acho que deu alum bug em alguma coisa ué bom não Ah tá quando tem um um no com erro ele não me deixa testar workflow inteiro beleza eu coloquei aquilo lá só porque eu preciso fazer o quê eu preciso pegar a normalização aqui e passar aqui
ó porque ela é a chave PR que a gente vai deletar delete delete buffer buffer beleza essa é a chave que a gente vai deletar E aí depois a gente pode continuar concatenar a mensagem e seguir o fluxo então aqui show de bola funcionando olá tudo bem olá tudo bem um monte de interrogação e agora ele o buffer né como ele deletou o buffer se ele se eu mandar deixa eu ver aqui se ele foi ah tá ele foi no prosseguir porque a gente não tá com o n mas ele já tá ali com o
buffer deletado e só tem uma única mensagem novamente Então vamos fazer mais um teste fazer mais um teste eu vou fazer o quê eu vou abrir duas Abas aqui desse buffer em uma eu vou deixar o agora e o ID vai ser esse aqui mesmo certo salvar aqui no outro eu não vou não vou salvar mas eu vou editar o quê eu vou editar o ID da mensagem e essa mensagem também vai ser recebida no agora show de bola buffer tá deletado não tem nenhuma mensagem no buffer porque a gente deletou antes de prosseguir vamos
fazer o teste o que que eu espero que aconteça aqui eu espero que ele entre pro aguardar e esse aguardar a gente vai fazer uma edição nele eu não quero que aguarde 15 segundos eu quero que aguarde CCO Ué mas vai esperar 15 mas você só tá querendo aguarde c Por quê Porque aqui a condição ele checa se já tem 15 segundos da última mensagem mas de C em 5 segundos eu vou checando porque queci eu recebi a mensagem no no intervalo por exemplo de cara mandou quando tava para para checar novamente ele mandou outra
mensagem e aí ele pode pegar no tempo e no meio tempo exato que aí em vez de eu esperar 30 segundos eh 30 não né duas mensagens em vez de eu esperar 15 segundos da última mensagem ele fica lá por exemplo 45 50 segundos não 45 ou 60 segundos esperando por quê Porque eu tô com múltiplo de 15 segundos vai esperar 15 30 45 ou um minuto e assim por diante em vez de eu tá ali de C em 5 segundos eu vou checando se a última mensagem já tem 15 segundos então eu evito uma
espera a mais do que deveria certo então por isso que aqui eu vou checar de CCO em 5 segundos Então beleza o que que eu quero que aconteça aqui eu vou executar nessa tela que eu salvei eu vou Executar a primeira mensagem nessa tela aqui ai eu salvei não Ah tá beleza nessa tela aqui que eu não vou salvar eu vou editar a mensagem que vai ter o ID diferente então beleza tá esperando vai esperar 5 segundos e vai verificar se tem 15 aí aqui eu mandei outra mensagem mandei outra mensagem mandei outra mensagem mandei
outra mensagem ó tá esperando aí aqui ele tá ó deixa eu ver se eu coloquei cinco é coloquei então aqui ó como ele ó tá vendo aqui ó vamos vamos olhando as execuções ó a quinta execução ó ainda tem cinco mensagens lá mas ainda tá esperando por quê Porque eu tô adicionando mensagem adicionei mais uma para esperar mais então ele vai esperar na hora que satisfazer a condição do prosseguir vamos ver vamos esperar alguns segundos aqui que ele vai satisfazer essa condição satisfez a condição deletou todo o buffer certo e show de bola concatenou as
mensagens se eu mandasse uma mensagem agora ele já ia esperar de novo porque o buffer já tá deletado e ele já tá processando lá no GPT as mensagens certo era isso o objetivo desse vídeo pode ter ficado um pouco longo mas eu tentei deixar o mais explicado possível o mais destrinchado aqui o funcionamento de de um buffer então eu já peço aí para vocês se inscreverem no canal deixar um like no vídeo eu vou compartilhar esse fluxo aqui com vocês certo vou deixar o link aqui na descrição ou no comentário fixado e eu espero que
vocês tenham gostado e deem sugestão aí nos comentários de vídeos de do que vocês querem fazer aqui com nhn ou com chatbot que eu possa estar criando um vídeo e ajudando a vocês o objetivo aqui do canal vai ser sempre criar vídeos destrinchando vai ser nunca vai ser aqueles vídeos de 10 minutinhos ali P pá copia e cola vai ser sempre destrinchando e tentando fazer você entender o o contexto a ideia aplicada e como replicar não vai ser Ah vou baixar o fluxo tá funcionando e se precisar da manutenção não sei nem como que funciona
não aqui o objetivo é você aprender beleza segue a gente aí e até a próxima
Related Videos
Como Criar Funcionalidade de Bloqueio do Agente de IA após Intervenção Humana
33:34
Como Criar Funcionalidade de Bloqueio do A...
Gabriel Augusto
470 views
Top Trending Open-Source GitHub Projects: Document Processing, LLM Fine-Tuning & Workflow Automation
25:23
Top Trending Open-Source GitHub Projects: ...
ManuAGI - AutoGPT Tutorials
2,543 views
4K Anime Purple Evening Sky - Relaxing Live Wallpaper - 1 Hour Screensaver - Infinite Loop !
1:00:07
4K Anime Purple Evening Sky - Relaxing Liv...
ALEXIY
3,536,517 views
Como Instalar o EasyPanel em 2 Passos + Evolution API V2 | Ganhe $200 na DigitalOcean!
29:18
Como Instalar o EasyPanel em 2 Passos + Ev...
Gabriel Augusto
1,300 views
N8N: ESSE NODE PODE TRANSFORMAR SUA IA
26:35
N8N: ESSE NODE PODE TRANSFORMAR SUA IA
Nexxus Academy
1,851 views
Extracting Structured Data From PDFs | Full Python AI project for beginners (ft Docker)
36:24
Extracting Structured Data From PDFs | Ful...
Thu Vu data analytics
30,245 views
Build a Realtime Chat App in React Native (tutorial for beginners) 🔴
3:49:50
Build a Realtime Chat App in React Native ...
notJust․dev
1,730,152 views
A forma MAIS FÁCIL de atribuir BASE DE CONHECIMENTO (RAG) ao seu CHATBOT de IA no N8N | Autotic
30:20
A forma MAIS FÁCIL de atribuir BASE DE CON...
Autotic - Automação de Marketing
3,205 views
Chatbot para Whatsapp com voz usado IA e n8n
26:46
Chatbot para Whatsapp com voz usado IA e n8n
Empreendedor Serial
2,517 views
The Ultimate Data Science Roundtable for Aspirants (You don't wanna miss this!)
1:24:41
The Ultimate Data Science Roundtable for A...
Hari Prasad
5,157 views
Assistants da Open AI vs RAG no N8N - Qual é o melhor?
42:56
Assistants da Open AI vs RAG no N8N - Qual...
André Prado
4,873 views
Como transferir atendimento do Typebot para o Chatwoot de forma automática.
36:35
Como transferir atendimento do Typebot par...
uSIGHT - Agência Digital
5,092 views
🔥Google Cloud Platform Full Course 2024 | GCP Full Course For Beginners | GCP | Simplilearn
3:46:57
🔥Google Cloud Platform Full Course 2024 |...
Simplilearn
5,278 views
Git Tutorial for Beginners: Learn Git in 1 Hour
1:09:13
Git Tutorial for Beginners: Learn Git in 1...
Programming with Mosh
2,517,339 views
PRIMEIRA AUTOMAÇÃO COM N8N
1:32:17
PRIMEIRA AUTOMAÇÃO COM N8N
Felipe Raitano
10,485 views
#17 - Postgres Chat Memory  - Curso Completo de N8N: Do Básico à Inteligência Artificial
7:57
#17 - Postgres Chat Memory - Curso Comple...
Hiperautomação
2,229 views
Progress Presentation Session 02 - Melsoft Academy Annual Virtual Hackathon
2:28:05
Progress Presentation Session 02 - Melsoft...
Melsoft Academy
226 views
LangChain Master Class For Beginners 2024 [+20 Examples, LangChain V0.2]
3:17:51
LangChain Master Class For Beginners 2024 ...
codewithbrandon
133,951 views
Executando Workflows do N8N no MODO FILA (QUEUE) | Autotic
16:15
Executando Workflows do N8N no MODO FILA (...
Autotic - Automação de Marketing
3,737 views
Criando um Agente IA do ZERO para WhatsApp [AULA DA COMUNIDADE]
47:01
Criando um Agente IA do ZERO para WhatsApp...
Well Pires
4,968 views
Copyright © 2024. Made with ♥ in London by YTScribe.com