Skip to main content

Bom Dia,



Estou usando o blip-sdk javascript (GitHub - takenet/blip-sdk-js: The Javascript SDK for BLiP)


E gostaria de que se a mensagem que o usuário enviou não tiver interação nenhuma ele mostre uma mensagem default, porém se encontra ele não deve mostrar, e o mesmo não está acontecendo, ele está mostrando as duas mensagens.



client.addMessageReceiver(function(){return message.content == `Teste`}, function (message) {

client.sendMessage({

to: message.from,

type: "text/plain",

content: "Legal, este é um teste."

});

return false; **// Não está finalizando a execução e ele segue para a próxima Receiver, que seria com o intuito de que se não encontrar mensagem para interagir mostro uma mensagem default**

})



client.addMessageReceiver(true, function (message) {

client.sendMessage({

to: message.from,

type: "text/plain",

content: "Não entendi sua mensagem."

});

});

Lembrei que no MessagingHub-Client funcionava, talvez exista outra maneira.


https://github.com/takenet/messaginghub-client-js


Olá @odirleiborgert,



Recentemente mudamos o nome da bliblioteca messaginghub-client-js para blip-sdk-js. Portanto, de agora em diante, utilize apenas a versão blip-sdk-js.



Vamos a sua dúvida:



o método client.addMessageReceiver recebe duas funções como parametros filter, messageHandler.



client.addMessageReceiver(filter, messageHandler)



A função filter é utilizada para filtrar quais mensagens serão processadas pela função messageHandler. Exemplo 1: O receiver abaixo loga todas as mensagens de texto enviadas pelos usuários



client.addMessageReceiver((m) => m.type === 'text/plain', (m) => {

console.log(m);

});



Isso acontece por que a primeira função (filter) passada para o método addMessageReceiver retorna true apenas para mensagens do tipo ‘text/plain’ e por que a segunda função (messageHandler) loga as mensagens que passarem pelo filtro.



filter: (m) => m.type === 'text/plain'


messageHandler: (m) => { console.log(m); }



Esse é o motivo do seu bot estar respondendo as duas mensagens para o cliente.


O fato de retornar false no primeiro receiver não faz com que o segundo receiver não seja executado, apenas provoca uma falha na promise que trata a mensagem recebida.


No seu caso, seu segundo receiver receberá qualquer mensagem enviada pelo cliente e o primeiro receiver será executado sempre que algum usuário enviar a palavra “Teste” para o bot.



Sugiro que vc utilize os receivers para separar os tipos de mensagens (texto, media, etc) e não qual mensagem foi recebida pelo bot.


Legal @rafaelpa



A partir de agora vou separar os receivers por tipo de mensagem, dessa forma que fiz funcionou como esperado. Obrigado



// Text-plain

client.addMessageReceiver((message) => message.type === 'text/plain', (message) => {



if (message.content === 'Começar') {

client.sendMessage({

id: Lime.Guid(),

to: message.from,

type: "text/plain",

content: "Legal, vamos começar."

});



return false;

}



client.sendMessage({

id: Lime.Guid(),

to: message.from,

type: "text/plain",

content: "Não entendi sua mensagem."

});



return false;

});





// application/vnd.lime.media-link+json

client.addMessageReceiver((message) => message.type === 'application/vnd.lime.media-link+json', (message) => {



client.sendMessage({

id: Lime.Guid(),

to: message.from,

type: "text/plain",

content: "Não estou preparado para interagir com esse tipo de conteúdo"

});



return false;

});



👏 Essa é a ideia, muito bom 😉


Comente