Mensagem default no BlipSDK-JS


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."
});
});

4 comentários

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