Skip to main content

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

});


@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