[Resolvido] Mensagem default no BlipSDK-JS

Bom Dia,

Estou usando o blip-sdk javascript (https://github.com/takenet/blip-sdk-js)
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.

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.

1 Curtida

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

:clap: Essa é a ideia, muito bom :wink:

1 Curtida