Histórico da conversa


Fala galera! Eu preciso gerar um ticket com o histórico de conversas em outra plataforma quando um chat é encerrado. Eu consegui fazendo um POST na url https://http.msging.net/commands passando os seguintes parâmetros no body:


{  
"id": "{{$guid}}",
"method": "get",
"uri": "/threads/{{contact.identity}}?refreshExpiredMedia=true"
}

até aí tudo bem. Ele retorna um JSON meio complicado, mas consegui tratar:


function run(historico) {
var aux = JSON.parse(historico);
var mensagens = aux.resource.items;
var resp = "";

for(i = mensagens.length - 1; i >= 0;i--)
{
//sent = mensagem do bot ou do agente
if(mensagens[i].direction === "sent")
{
resp = resp.concat("Group: ");
//se for objeto o valor fica em outro lugar
if(typeof mensagens[i].content === 'object')
resp = resp.concat(mensagens[i].content.text.toString());
else
resp = resp.concat(mensagens[i].content.toString());
}
//mensagem do cliente
else if(mensagens[i].direction === "received")
{
resp = resp.concat("Cliente: ");
//se for objeto o valor fica em outro lugar
if(typeof mensagens[i].content === 'object')
resp = resp.concat(mensagens[i].content.customerInput.value.toString());
else
resp = resp.concat(mensagens[i].content.toString());
}
//quebra de linha
resp = resp.concat("<br>");
}
return resp.replace(/\n/g,"<br>");
}

Até aí tudo bem, tá tudo funcionando bonitinho.

O problema é que, quando faço essa mesma requisição via Whatsapp vem um JSON totalmente diferente, sem nenhuma mensagem…


{"type":"application/vnd.lime.collection+json","resource":{"itemType":"application/vnd.iris.thread-message+json","items":[]},"method":"get","status":"success","id":"{{$guid}}","from":"[email protected]/#iris-hosted-6","to":"[email protected]/!iris-hosted-6-valor_aqui","metadata":{"#command.uri":"lime://[email protected]/threads/[email protected]? refreshExpiredMedia=true","uber-trace-id":"valor_aqui"}}

Note que eu troquei uns ids por valor_aqui porque não sei se tem algo “confidencial”


Como faço então para pegar o histórico de mensagens? Eu estou perdendo algo e tem uma maneira mais fácil de fazer isso? Realmente estou sem direções…


20 comentários

estou com o mesmo problema !!!

Reputação 7
Crachá +1

Eu não entendi o que você quis dizer com:



Seria quando o canal do contato é WhatsApp? Não ficou claro pra mim.


Mas bom, eu percebi que nesse modelo do WhastApp que você postou abaixo, você está passando o contact identity do seu router, certo?

image


Será que não é isso?


Eu preciso ver esse seu modelo pra entender melhor, pois eu acabei que implementando através de outro método. Ao invés de pegar em /threads eu pego os /tickets/{id}/messages:


{
"id": "{{random.guid}}",
"to": "[email protected]",
"method": "get",
"uri": "/tickets/{{input.content@id}}/messages"
}

Gabriel estou com o mesmo problema que amigo acima, no widgest funciona corretamente mais no whatszap não funciona ???


o que fazer???

Reputação 7
Crachá +1

Como assim?


Você consegue pegar o Ticket History via Blip Chat, mas via Whatsapp não?


Confesso que não entendi, um dos motivos é o fato de eu nunca ter testado no wpp, mas creio não ter diferença no canal do cliente.

É isso mesmo! Fazendo um POST para https://http.msging.net/commands eu consigo pegar todo o histórico e depois tratá-lo como fiz na pergunta, porém o retorno desse post é totalmente diferente quando o canal é o Whatsapp

Sobre a sugestão de usar o tickets/id/messagens, estou disposto a tentar, mas como pego esse id? se eu uso a variável input.content só recebo o texto da última mensagem enviada pelo usuário, não tem nenhum id no meio

Reputação 7
Crachá +1

Eu pego da variável {{input.content@id}} pode usar que é sucesso, foi o Bruno que me ensinou.

@GabrielPetrone , tem como dar uma olhada no porque do json vir diferente via Whatsapp?

Reputação 7
Crachá +1

Claro, consigo dar uma olhada em como é o formato, porém entender o porque vem diferente eu diria ser um trabalho pro time da Take conseguir uma resposta, o máximo que eu consigo é olhar a docs do Whatsapp porém não encontrei nada a respeito de “histórico de mensagens”, pode ser por isso que talvez não exista nenhum histórico (FAQs - WhatsApp Business Platform On-Premises API - Documentation - Meta for Developers). @BrunoC você sabe algo a respeito disso?

Reputação 7

Isso ocorre na utilização da estrutura Router SubBot, neste caso você deverá utilizar o id do contato no router e a chave do router.

Boa tarde Vitor, tudo bem?


Você está realizando a requisição dentro de algum subbot?

Consegue confirmar se o {{contact.identity}} enviado na requisição é realmente o Id do usuário no Wpp ([email protected]) e não o id do tunnel?

Estou tendo problema similar:


Estou tentando acessar o histórico da conversa porém não estou conseguindo. Funciona normal quando eu faço o teste pelo “testar” do blip portal. Porém, quando tento pegar o histórico em uma conversa “real” via WhatsApp , não retorna nenhum conteúdo.


Request:


{

“id”: “{{$guid}}”,

“to”: “[email protected]”,

“method”: “get”,

“uri”: “/tickets/3642a7f9-31d0-4c5b-a933-0178c89dd7d1/messages”

}


O ticket id foi obtido utilizando a variável {{input.content@id}} , também ja tentei obter ticketid utilizando a request:


{

“id”: “{{$guid}}”,

“to”: “[email protected]”,

“method”: “get”,

“uri”: “/tickets?$filter=(CustomerIdentity%20eq%20’[email protected]’)&$closed=true&$skip=0&$take=100”

}


E o resultado foi exatamente o mesmo, ou seja, um ticketid que não retorna nenhuma mensagem.


Acredito que seja algo relacionado ao tunnel.msging.net, porém não estou sabendo como configurar, alguém pode ajudar?


Já tentei fazer a requisição utilizando o usuario no formato [[email protected]] q peguei no {{tunnel.originator}} .


Obrigado

Poderia dar mais detalhes?


Obrigado

Reputação 7

Se você estiver com o Contexto do Roteador ativado:



Você poderá passar a variável de entrada como: contact.identity


Caso esteja desativado:

image


A variável de entrada deverá ser: tunnel.originator


Tem mais informações nestes artigos, sobre variáveis no Router:




Espero que lhe ajude! 🚀

Não consegui 😕


Independente do que eu to passando na requisição:


{

“id”: “{{$guid}}”,

“to”: “[email protected]”,

“method”: “get”,

“uri”: “/tickets/TicketID/messages”

}


Não retorna nenhuma das mensagens trocadas 😕. Isso só ta funcionando quando eu passo um ticketID de uma conversa originada internamente no blip. As conversas via WhatApp não retornam nada pelo ticketID

Fala Galera, pra quem tá tendo o problema, entrei em contato com o suporte e me ajudaram a resolver. Na requisição troquem a authorization key para a do router, e, no corpo, coloquem assim:


{ 
"id": "{{random.guid}}",
"method": "get",
"uri": "/threads/{{tunnel.originator}}?refreshExpiredMedia=true&$take=50"
}

Só que aí vocês tem que trocar o bot do site de vcs para que seja o router, se não só vai funcionar o whatsapp kkkkkk

Reputação 7

Ei @Anderson_Luiz_Baptis, tudo bem?


Será que a solução do @Vitor_Ceolin_Porfiri se aplica para você? Consegue fazer um teste?

Olá! Obrigado pelo retorno pessoal! Se aplica em partes, na verdade. Eu consegui acessar as mensagem 🙌


O “problema” é que a thread retorna todas as ultimas conversas daquele cliente. (dentro de uma certa quantidade máxima de itens) e eu precisava das mensagens “filtradas” por ticket.


Preciso desse filtro pq o meu objetivo é, ao término de um atendimento humano, ter o histórico daquele atendimento específico (incluindo o que foi tratado no bot). Caso eu precise registrar em algum outro lugar. Nesse cenário, não seria interessante receber uma série de informações “passadas”. Entende?


Por isso eu tinha tentado utilizar a requisição:


{

“id”: “{{$guid}}”,

“to”: “[email protected]”,

“method”: “get”,

“uri”: “/tickets/TicketID/messages”

}


Pq por ela dava pra especificar o ticketID na URI


Seria possível, obter a thread ou o histórico das mensagens para ticketsID específicos ?

Reputação 7

Anderson, dá um olhada se essa documentação atende sua demanda por favor:


https://docs.blip.ai/#get-all-messages-from-a-customer-by-a-ticket

Oi Adriano,


Essa requisição que vc me indicou na documentação é a que eu deixei acima na conversa, de que não funcionou 😔


{

“id”: “{{$guid}}”,

“to”: “[email protected]”,

“method”: “get”,

“uri”: “/tickets/TicketID/messages”

}


Onde eu vou conseguir esse ticketID? As formas que eu utilizei para obter o ticketID não funcionaram. foram elas:


Blip Docs | API Reference :


{

“id”: “{{$guid}}”,

“to”: “[email protected]”,

“method”: “get”,

“uri”: “/tickets?$filter=(CustomerIdentity%20eq%20’{{tunnel.originator}}’)&$closed=true&$skip=0&$take=100”

}


Ou então utilizando a {{input.content@id}}.

Comente