Salvar o nome do usuário em uma conversa do BlipChat - NodeJS


Olá Pessoal,


Uma dúvida… Se formos usar o BlipChat eu não vou ter o nome do usuário na conversa. Porém vou perguntar a ele qual o nome, e assim que ele responder quero salvar esse nome na Thread que ele está, pelo BlipWeb eu vi que nas informações do usuário eu tenho disponível Nome, Telefone, E-mail e Gênero. Minha dúvida é como salvar esses dados.


// Aqui pegamos a thread do usuário que está rolando no momento
await client.sendCommand({
id: Lime.Guid(),
method: "get",
uri: `/threads/${message.from}`
})
.then( async res => {

if (res) {

// Pegamos a última mensagem enviada PELO ChatBot
let sent = res.resource.items.find(item => {
return item.direction == 'sent';
});

// Pegamos a última mensagem enviada PELO Usuário
let received = res.resource.items.find(item => {
return item.direction == 'received';
});

// Legal, agora pegou a última mensagem enviada PELO ChatBot
if (sent) {

if (sent.content == 'Qual é o nome?') {
let name = received.content;

// E agora...

}

}

}

}).catch(err => {
console.log(err);
});

5 comentários


@odirleiborgert, vc precisa adicionar (e manter atualizado) as informações do cliente na agenda de contatos do seu bot.

Para isso utilize o comando SET de contato. Veja este link.


Exemplo:


{  
"id": "1",
"method": "set",
"uri": "/contacts",
"type": "application/vnd.lime.contact+json",
"resource": {
"identity": "[email protected]",
"name": "João da Silva",
"gender":"male",
"group":"amigos",
"extras": {
"plan":"Gold",
"code":"1111"
}
}
}

Após enviado este comando vc conseguirá ver o nome do usuário no BLiP Web ou em qualquer outro lugar do portal.


A extensão de Threads é utilizada apenas para buscar o histórico de conversa de algum cliente com o bot.

Legal @rafaelpa,


Funcionou, porém fazendo uns testes surgiu uma dúvida. Cada vez que rodo sobrescreve os dados do resource.


Vamos supor que em um determinado fluxo da conversa pergunto o nome da pessoa e salvo, e depois vou pedir o telefone e quando eu salvar somente o telefone sobrescreve o nome.


Existe alguma maneira de contornar essa situação?


Talvez salvar tudo no Buckets e depois no final pegar os dados do buckets e salvar no contacts?


Outra opção talvez seria antes de salvar a nova propriedade, pegar os dados do usuário e adicionar a nova propriedade e salvar…

Uma outra solução que encontrei foi:



  1. Fazer um get dos dados do usuário e atribuir a um objeto

  2. Adicionar a nova propriedade nesse objeto

  3. Salvar os dados do usuário no contato dele…

Solução encontrada


let contact = {};

from = from.replace('/web', '');

// Pegamos os dados do usuário
await client.sendCommand({
id: Lime.Guid(),
method: "get",
uri: `/contacts/${from}` //
}).then(res => {
if (res) {
contact = res.resource;
}
}).catch(err => {
console.log('err', err);
});

// Atribuindo a propriedade
Object.assign(contact, { name: 'João' });
Object.assign(contact, { identity: from });

// Salvando os dados
await client.sendCommand({
id: Lime.Guid(),
method: "set",
uri: "/contacts",
type: "application/vnd.lime.contact+json",
resource: contact
}).then(res => {
console.log('success');
}).catch(err => {
console.log('err', err);
});

Perfeito @odirleiborgert, essas são as duas soluções possíveis 😊

Comente