Coletar automaticamente histórico de um ticket

Olá,

Gostaria de saber como faço para coletar o histórico de mensagens de um ticket após ele ser finalizado.

Consigo coletar o ID do ticket e realizar a requisição conforme o docs (https://docs.blip.ai/?http#get-all-messages-from-a-customer-by-a-ticket)

Porém não retorna nenhuma mensagem da interação do ticket. Sei que tem a feature de fazer download manual do histórico, mas preciso que seja automático esse processo.

3 Curtidas

Olá @Adilson_Torres_Grego,

Atualmente, há uma maneira de buscar essas mensagens, o processo pode ser um pouco moroso sem a automação do processo :man_technologist:t5:

Segue passo a passo (só funciona para contexto do roteador desligado) :tipping_hand_man:t5:

  1. Busque as informações do ticket utilizando o endpoint https://docs.blip.ai/?http#get-a-ticket
    Veja um exemplo de retorno:
    {
        "type": "application/vnd.iris.ticket+json",
        "resource": {
            "id": "bd7690b2-3711-4d6b-9fec-017628f48edb",
            "sequentialId": 1,
            "ownerIdentity": "bot@msging.net",
            "customerIdentity": "99e2cf30-8236-4630-a043-3a8b546d18dd@tunnel.msging.net",
            "customerDomain": "tunnel.msging.net",
            "provider": "Lime",
            "status": "ClosedClient",
            "storageDate": "2020-12-03T14:14:44.700Z",
            "closeDate": "2020-12-03T14:15:50.570Z",
            "statusDate": "2020-12-03T14:15:50.570Z",
            "externalId": "bd7690b2-3711-4d6b-9fec-017628f48edb",
            "rating": 0,
            "team": "Default",
            "unreadMessages": 0,
            "closed": true,
            "closedBy": "bot@msging.net",
            "priority": 0
        },
        "method": "get",
        "status": "success",
        "id": "73df280d-c9d7-459e-bb58-242798be0823",
        "from": "postmaster@desk.msging.net/#iris-hosted-6",
        "to": "bot@msging.net/!iris-hosted-6-rti1lbrg",
        "metadata": {
            "#command.uri": "lime://bot@msging.net/ticket/bd7690b2-3711-4d6b-9fec-017628f48edb",
            "uber-trace-id": "b9d4474f3026e67e%3Abcd479dc9489418b%3Ab9d4474f3026e67e%3A1"
        }
    }
  1. Veja que no retorno anterior, há dois valores que iremos utilizar como intervalo de busca além do customerIdentity:
  • storageDate: data de abertura do ticket
  • closeDate: data de fechamento do ticket
  1. Adiante utilizaremos o endpoint: https://docs.blip.ai/?http#get-last-messages

  2. Neste endpoint utilizaremos o seguinte body, como início para iterar, neste body iremos buscar as próximas 100 mensagens do customerIdentity a partir da data que o ticket foi criado. Obs: Substitua os valores {customerIdentity} e {storageDate} com seus respectivos valores.

{  
  "id": "{{$guid}}",
  "method": "get",
  "uri": "/threads/{customerIdentity}?$take=100&storageDate={storageDate}&direction=asc"
}
  1. Seguindo a lógica anterior, para buscar mais de 100, execute a requisição com o body abaixo, sempre substituindo o lastMessageId com o id da última mensagem recuperada e o lastMessageStorageDate com o storageDate da última mensagem recuperada.
    Faça até que não haja nenhuma mensagem onde o storageDate é maior que closeDate ou o retorno seja vazio.
   {  
     "id": "{{$guid}}",
     "method": "get",
     "uri": "/threads/{customerIdentity}?$take=100&messageId={lastMessageId}&storageDate={lastMessageStorageDate}&direction=asc"
   }

Conseguiu entender? :thinking:

1 Curtida

Consegui entender sim, obrigado.

Irei testar aqui.

2 Curtidas

Depende da usabilidade, mas eu uso a requisição:

POST https://http.msging.net/commands HTTP/1.1
Content-Type: application/json
Authorization: Key {YOUR_TOKEN}
{
  "id": "{{random.guid}}",
  "to": "postmaster@desk.msging.net",
  "method": "get",
  "uri": "/tickets/{{input.content@id}}/messages"
}

Onde a variável {{input.content@id}} é o ID do Ticket, conforme orientado pelo @caiof no 1º tópico.

A partir daí, eu consigo TODAS as mensagens (não só o do chat) daquela conversa do meu cliente com o BOT. Após receber o retorno da requisição, eu trato as mensagens através de um script, selecionando quais eu quero e quais não quero, enfim… o resultado é um histórico de conversa que eu insiro no meu ITSM, fica mais ou menos isso:

Segue outra forma de fazer :wink: hehe

3 Curtidas

Bom dia @GabrielPetrone, pode me ajudar na coleta desses dados de histórico de conversas.

Opa, posso tentar sim!

Basicamente é fazer conforme o Caio e eu escrevemos aí em cima, mas conte-nos mais um pouco sobre o que você precisa exatamente…

Então, eu usei aquela API que passei acima, você chegou a dar uma olhada nela?

Além disso, você sabe javascript?

Poxa hein! :frowning:
Mas a API você conseguiu conectar e tirar um resultado?

Infelizmente esse código não foi criado por mim e não recebi autorização para compartilhá-lo com a comunidade :frowning: Também não sei muito sobre script e esse foi bem avançado mesmo (pra mim pelo menos). Quem sabe alguém aqui consegue dar uma mão pra gente montar um modelo.

Inclusive, isso poderia ser um dos apoios dos devs né @Bia o que acha de montarmos um template de chat history para integração e disponibilizarmos pra comunidade? hehe

2 Curtidas

A API consigo ter resultados.

Boooa, @GabrielPetrone!

Vamos trabalhar nisso com os devs do lado de cá e podemos disponibilizar esse tipo de conteúdo tanto no Help Center, quanto aqui no fórum, na sessão Central Blip. Inclusive, tá rolando uma votação importante lá (apesar da tentativa frustrada de fixar o tópico :frowning_face:) . Rola de ajudar a gente participando? O link é esse aqui: Tracking Automático

Aeeeee!! Muito bom Bia, obrigado pelo empenho e help de sempre!

É pra já, ontem tentei votar mas falhou :see_no_evil: haha!

1 Curtida

Realizei alguns testes, porém ainda não consigo receber histórico de nenhum ticket.

Eu consigo pegar os tickets fechados de um usuário em especifico, porém a partir desses tickets tanto via thread quando ticket/messages não retorna nada.

Últimos tickets fechados de um usuário:

Resultado, sem nenuhma mensagem de retorno:

O acesso e requisições eu faço tudo a partir de um subbot dentro de um router, não sei se isso interfere em algo, além do usuário ter um id via tunnel.

@Adilson_Torres_Grego,

Realmente tem um furo no tutorial :frowning:
Seguindo os passos anteriores só ira funcionar caso o contexto do roteador no bot esteja desligado. :sweat_smile:

Mas não se preocupe adaptei o tutorial para casos onde o contexto esteja ligado, basicamente será necessário realizar mais um passo para obter as mensagens :tipping_hand_man:t5:

(Funciona para contexto ligado)

  1. Busque as informações do ticket utilizando o endpoint https://docs.blip.ai/?http#get-a-ticket no subbot de atendimento (chave do subbot)
    Veja um exemplo de retorno:
    {
        "type": "application/vnd.iris.ticket+json",
        "resource": {
            "id": "bd7690b2-3711-4d6b-9fec-017628f48edb",
            "sequentialId": 1,
            "ownerIdentity": "bot@msging.net",
            "customerIdentity": "99e2cf30-8236-4630-a043-3a8b546d18dd@tunnel.msging.net",
            "customerDomain": "tunnel.msging.net",
            "provider": "Lime",
            "status": "ClosedClient",
            "storageDate": "2020-12-03T14:14:44.700Z",
            "closeDate": "2020-12-03T14:15:50.570Z",
            "statusDate": "2020-12-03T14:15:50.570Z",
            "externalId": "bd7690b2-3711-4d6b-9fec-017628f48edb",
            "rating": 0,
            "team": "Default",
            "unreadMessages": 0,
            "closed": true,
            "closedBy": "bot@msging.net",
            "priority": 0
        },
        "method": "get",
        "status": "success",
        "id": "73df280d-c9d7-459e-bb58-242798be0823",
        "from": "postmaster@desk.msging.net/#iris-hosted-6",
        "to": "bot@msging.net/!iris-hosted-6-rti1lbrg",
        "metadata": {
            "#command.uri": "lime://bot@msging.net/ticket/bd7690b2-3711-4d6b-9fec-017628f48edb",
            "uber-trace-id": "b9d4474f3026e67e%3Abcd479dc9489418b%3Ab9d4474f3026e67e%3A1"
        }
    }
  1. Veja que no retorno anterior, há dois valores que iremos utilizar como intervalo de busca além do customerIdentity:
  • storageDate: data de abertura do ticket
  • closeDate: data de fechamento do ticket
  1. Utilize o endpoint Get a tunnel info para buscar o contato originador do tunnel no subbot de atendimento (key do subbot), após enviar o comando salve o valor do originator, substitua a variável {tunnelId} pelo valor do customerIdentity, veja um exemplo do comando abaixo:
{  
  "id": "{{$guid}}",
  "to": "postmaster@tunnel.msging.net",
  "method": "get",
  "uri": "/tunnels/{tunnelId}"
}

Veja o retorno deste comando:

{
    "type": "application/vnd.iris.tunnel+json",
    "resource": {
        "owner": "bot@msging.net",
        "originator": "ea1eeb39-5f3c-4a6b-8a88-7630d81a20db.celulazulurouter@0mn.io",
        "destination": "testefsdfsdfsdgsd@msging.net"
    },
    "method": "get",
    "status": "success",
    "id": "4834e606-da60-4c2a-a82f-a27be81cd7ac",
    "from": "postmaster@tunnel.msging.net/#iris-hosted-6",
    "to": "testefsdfsdfsdgsd@msging.net/!iris-hosted-6-titub06b",
    "metadata": {
        "#command.uri": "lime://subbot@msging.net/tunnels/832b689d-c539-4066-adca-73fd52f708b0@tunnel.msging.net",
        "uber-trace-id": "171974c7d90892b7%3A65f4e241fbfd812d%3A171974c7d90892b7%3A1"
    }
}
  1. Adiante utilizaremos o endpoint: https://docs.blip.ai/?http#get-last-messages buscando mensagens no router (key do roteador).

  2. Neste endpoint utilizaremos o seguinte body, como início para iterar, neste body iremos buscar as próximas 100 mensagens do originator no roteador (key do roteador) a partir da data que o ticket foi criado. Obs: Substitua os valores {originator} e {storageDate} com seus respectivos valores.

{  
  "id": "{{$guid}}",
  "method": "get",
  "uri": "/threads/{originator}?$take=100&storageDate={storageDate}&direction=asc"
}
  1. Seguindo a lógica anterior, para buscar mais de 100, execute a requisição com o body abaixo, sempre substituindo o lastMessageId com o id da última mensagem recuperada e o lastMessageStorageDate com o storageDate da última mensagem recuperada.
    Faça até que não haja nenhuma mensagem onde o storageDate é maior que closeDate ou o retorno seja vazio.
   {  
     "id": "{{$guid}}",
     "method": "get",
     "uri": "/threads/{originator}?$take=100&messageId={lastMessageId}&storageDate={lastMessageStorageDate}&direction=asc"
   }

Consegui te explicar bem? :thinking:

4 Curtidas

Bom dia,

Entendi sim! Agora consigo pegar as mensagens, obrigado.

3 Curtidas

Este tópico foi fechado automaticamente 7 dias depois da úlima resposta. Novas respostas não são mais permitidas.