EvolutionAPI / evolution-api

Evolution API is an open-source WhatsApp integration API
https://evolution-api.com
GNU General Public License v3.0
1.75k stars 859 forks source link

[PT][FEAT] Obter a resposta de um sendList (Lista) e prosseguir o fluxo Typebot 2.20.0 e EvolutionAPI 1.6.1 #329

Closed fredlisboa closed 8 months ago

fredlisboa commented 9 months ago

Descrição Detalhada:

Gostaria de criar um fluxo no Typebot utilizando as Listas (ENDPOINT sendList @w3nder) sendo que o fluxo de mensagens continuaria ao passo que o usuário clicasse em uma das opções disponibilizadas pela lista;

Racional:

Esta funcionalidade permitiria a elaboração de chatbots eficientes e retentivos no que se refere à usabilidade e possível alta taxa de interação dos usuários com o mesmo. Considero que esta seria uma alternativa à altura dos botões (aparentemente disponíveis apenas na API Oficial);

Exemplos de Uso:

Chatbot com fluxo de interações para qualificação de leads via WhatsApp;

Possíveis Implementações:

A resposta da lista fica na propriedade message?.listResponseMessage, diferentemente da propiedade que aparentemente o TypeBot avalia ao coletar uma informação do usuário (extendedTextMessage, conversation);

Impacto no Projeto:

Não tenho conhecimento técnico para avaliar este impacto no projeto.

Notas Adicionais:

Segue abaixo teste atual desta possível implementação: da forma como está, o Typebot retorna "mensagem não reconhecida".

PARTE03

gabrielpastori1 commented 9 months ago

Você consegue mandar aqui o payload recebido pelo webhook quando responde a uma lista? Recomendo o https://public.requestbin.com/r para conseguir pegar o webhook

fredlisboa commented 9 months ago

Posso tentar, claro. Segue abaixo e em anexo. Sigo à disposição, obrigado!

{ "event": "messages.upsert", "instance": "INSTANCIA", "data": { "key": { "remoteJid": "123456@s.whatsapp.net", "fromMe": false, "id": "30102001" }, "pushName": "Fred Lisboa", "message": { "messageContextInfo": { "deviceListMetadata": { "senderKeyHash": "zeuJ+SMzB/Y8yQ==", "senderTimestamp": "1703764621", "recipientKeyHash": "LsBsuui3DuaVRw==", "recipientTimestamp": "1703591632" }, "deviceListMetadataVersion": 2 }, "listResponseMessage": { "title": "Title row 01", "listType": "SINGLE_SELECT", "singleSelectReply": { "selectedRowId": "rowId 001" }, "contextInfo": { "stanzaId": "BAE5484DB34AAA9E", "participant": "654321@s.whatsapp.net", "quotedMessage": { "listMessage": { "title": "List Title", "description": "List description", "buttonText": "Click Here", "listType": "SINGLE_SELECT", "sections": [ { "title": "Row tilte 01", "rows": [ { "title": "Title row 01", "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,", "rowId": "rowId 001" }, { "title": "Title row 02", "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,", "rowId": "rowId 002" } ] }, { "title": "Row tilte 02", "rows": [ { "title": "Title row 01", "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,", "rowId": "rowId 001" }, { "title": "Title row 02", "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,", "rowId": "rowId 002" } ] } ], "footerText": "footer list\nhttps://examplelink.com.br" } } }, "description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s," } }, "messageType": "listResponseMessage", "messageTimestamp": 1703852086, "owner": "INSTANCIA", "source": "android" }, "destination": "https://eni7u7w7a10d.x.pipedream.net", "date_time": "2023-12-29T09:14:46.895Z", "sender": "654321@s.whatsapp.net", "server_url": "https://evolution.api.com", "apikey": "102030" }

sendList_response_20231229.json

gabrielpastori1 commented 9 months ago

Legal, no webhook dá para identificar a resposta do usuário data.message.listResponseMessage.singleSelectReply Agora é ver como passar isso para o typebot

alekyxander commented 9 months ago

Se funcionar vai agregar muito!

pedrofnts commented 9 months ago

@fredlisboa pode informar qual webhook está fornecendo esse resultado?

fredlisboa commented 9 months ago

@fredlisboa pode informar qual webhook está fornecendo esse resultado?

messages.upsert

Luis-Fernando-Developer commented 9 months ago

Alguém ai conseguiu ?

MarksEliel commented 9 months ago

Outra coisa que percebi, é que mesmo você definindo uma mensagem para enviar antes da lista, ele envia na ordem errada, primeiro processa o webhook, depois a mensagem.

Alguma forma de contornar isso @fredlisboa

alekyxander commented 9 months ago

Pessoal uma amigo do grupo do whatsapp o Edson martins fez o ajuste> image Para o Typebot entender a resposta de listas, basta adicionar essa linha aqui no typebot.service.ts..

responseRowId: msg.listResponseMessage.singleSelectReply?.selectedRowId,

adicionar esta linha, alguem pode ver pra colcoar pra testes?

daniloruizdasilva commented 9 months ago

Exatamente isso mesmo, basta adicionar a linha "responseRowId: msg.listResponseMessage.singleSelectReply?.selectedRowId," no arquivo typebot.service.ts..

Luis-Fernando-Developer commented 9 months ago

Exatamente isso mesmo, basta adicionar a linha "responseRowId: msg.listResponseMessage.singleSelectReply?.selectedRowId," no arquivo typebot.service.ts..

Eu coloquei no meu arquivo exatamente como o Edison fez mas mesmo assim quando vou fazer o teste o fluxo não segue após receber o item selecionado.

Luis-Fernando-Developer commented 8 months ago

Pessoal uma amigo do grupo do whatsapp o Edson martins fez o ajuste> image Para o Typebot entender a resposta de listas, basta adicionar essa linha aqui no typebot.service.ts..

responseRowId: msg.listResponseMessage.singleSelectReply?.selectedRowId,

adicionar esta linha, alguem pode ver pra colcoar pra testes?

Eu coloquei mas não funcionou.nao consigo Extrai a resposta e seguir em diante o fluxo a partir do if/else

edisonmartinsmkt commented 8 months ago

Eu coloquei no meu arquivo exatamente como o Edison fez mas mesmo assim quando vou fazer o teste o fluxo não segue após receber o item selecionado.

Fala @Azzybot, beleza?

Colocando do jeito que citei para o amigo @alekyxander, a única coisa que vai precisar é fazer um collect, igual faria para pegar qualquer resposta no Typebot, tipo um nome, data de nascimento, qualquer coisa, pois o código passa a ser tratado como uma resposta normal de texto do lead.

O que tem que se atentar é para a requisição de montagem da lista. Vou mandar um exemplo, que foi o que coloquei no Postman da Evolution quando eu criei, lá atrás... nas primeiras versões.

Veja na imagem abaixo, que são passados o title, description e rowId da linha na requisição. O title e o description são o que chegam para o lead. Daí, quando ele responder, o Typebot vai receber o rowId. É o conteúdo do rowId que tem que considerar pra criar a sua automação, ok?

image

Então, quando eu clicar nessa opção e mandar responder, o Typebot vai receber o texto ID 1001, que deverá ser tratado e respondido adequadamente para o contato.

image

De forma beeemmm básica, seria algo assim:

image

Espero que ajude a galera a entender melhor.

Abraços. 🚀

Luis-Fernando-Developer commented 8 months ago

Opaa @edisoncm-ti . Tudo na paz Mestre?

Acabei de fazer os testes como recomendou mas ainda sim não funcionou. Coloquei basicamente o mesmo exemplo mostrado nas imagens mas mesmo assim não funcionou.

Segue aí:

Body do endpoint sendList IMG-20240121-WA0002

Fluxo Typebot, aqui no if coloquei o primeiro e o seguindo diferente para testes com " " e sem " " e tbm fiz outras variações e tbm sem sucesso. IMG-20240121-WA0003

Abaixo as 3 opções selecionadas. Nota-se abaixo de cada opção selecionada depois de 30 segundos dei o comando "#sair" para poder iniciar o novo teste com outra opção já que a anterior não retornou nada nem mesmo o else que declarei no nó de condições do fluxo IMG-20240121-WA0004 IMG-20240121-WA0006 IMG-20240121-WA0007

Abaixo está o código modificado: IMG-20240121-WA0005

edisonmartinsmkt commented 8 months ago

Acabei de fazer os testes como recomendou mas ainda sim não funcionou. Coloquei basicamente o mesmo exemplo mostrado nas imagens mas mesmo assim não funcionou.

@Azzybot, vamos tentar mais uma vez, ok?

Agora vou tentar facilitar um pouco mais...

Veja a imagem abaixo:

image

  1. Enviei uma mensagem qualquer como gatilho
  2. Recebi a lista enviada pelo TypeBot
  3. Escolhi a linha 1 da seção 2
  4. Recebi a mensagem que a ID 2001 (onde 2 é a seção e 001 é a linha) foi selecionada.

Como mostra a imagem abaixo, a variável optionSelected escolhida foi a ID 2001:

image

Este seria o texto que precisaria ser tratado no fluxo para oferecer uma opção apropriada para o lead, mas aí já personalização de cada um.

Segue o link do arquivo utilizado como fluxo do meu Typebot. Adapte para as suas necessidades:

typebot-export-send-list-typebot-evolution-9ibw5rb.zip

Se ainda assim não funcionar, infelizmente será algo no seu cenário aí, que não terei como avaliar, ok?

Boa sorte e bom domingo para todos! 🙏

PS. Falarei mais sobre esse assunto no grupo do WhatsApp da Evolution. Vou encerrar por aqui. 🤝👍😉

Luis-Fernando-Developer commented 8 months ago

@edisoncm-ti acho que descobri o problema . Usei esse seu fluxo pra teste e sempre que envio a msg o webhook executa normalmente após selecionar a opção ele executa de novo o webhook para o endpoint trazendo a lista de novo e quando escolho a opção de novo ele pausa . Digamos que mando um Oi o fluxo inicia e quando recebo o menu e vou selecionar ele, ele é disparado novamente e trás o menu de novo aí vou olhar no resultados do typebot na variável do input acrescenta o "Oi" e não o id do row selecionado.

20240121_190238

Não sei se é um problema de versão do typebot ou na evo pois mesmo se eu incluir outros bubbles no fluxo( qualquer um) antes do webhook ele sempre executa primeiro o webhook e trata a primeira entrada na input ao invés da opção selecionada. Tentarei fazer um downgrade do typebot para verificar se isso acontece em outras versões tbm. De qualquer forma agradeço de mais a sua resposta Mestre. Tmj 👏

edisonmartinsmkt commented 8 months ago

Não sei se é um problema de versão do typebot ou na evo pois mesmo se eu incluir outros bubbles no fluxo( qualquer um) antes do webhook ele sempre executa primeiro o webhook

Fala @Azzybot, beleza?

Não sei se procede, pois Tybebot não é necessariamente a minha praia, mas Mathueus Leandro, que foi o parceiro que pediu essa parada aí, informou que esse lance do webhook ser executado antes dos demais bubbles é um bug do Typebot.

Eu não cheguei a aprofundar nos testes, então veja o que consegue aí, beleza?

Abraços...

system-help-solution commented 8 months ago

Opa estou em vários grupo e os grupos estão este debate e aqui está a solução usada !

IMG-20240126-WA0073 Como pode ver faltou o ponto de interrogação nesta variavel se isso ajudar estarei aqui!

Zelmosimionato commented 5 months ago

Aqui no meu idem, robo para quando sai de uma variável e vai para um texto, alguém descobriu ou testou a solução proposta e deu certo?