[Template] Permitir que clientes/contatos fechem os próprios tickets

Fala Galera, tudo bom?

Como sabemos em diversos momentos um cliente pode esperar por tempo indeterminado para ser atendido em um ticket, diante desse cenário criei um template de bot para possibilitar que clientes/contatos fechem os próprios tickets :blipinlove:

Importando e testando este template

O template que pode ser testado e importado no seu chatbot seguindo passo a passo de importação abaixo:

  1. Crie um bot a partir do template de atendimento
    criar atendimento humano

  2. Baixe o fluxo aqui
    Contact Close Ticket - Template.json (32,5,KB)

  3. Importe o fluxo no seu bot - Como faço isso?

  4. Prontinho :slight_smile:

Veja um exemplo do fluxo na prática
Animation

Como desenvolver essa jornada no meu fluxo?

Passo a passo da criação

Encerrando o ticket como cliente pelo Builder

Para exemplificar como desenvolver essa solução fazemos um exemplo genérico, mas partindo do template de atendimento humano provido no portal com seguinte layout

1- Definindo um palavra-chave de saída no atendimento humano

No bloco de atendimento crie uma condição de saída com uma palavra-chave que representa aquilo que o usuário deve digitar para sair do atendimento humano para posteriormente encerramos o ticket, neste exemplo, utilizaremos a palavra ‘Sair’, veja um exemplo dessa configuração, considere a condição ‘Igual a’ e o Se como ‘Resposta do usuario’.

Lembre-se de informar o cliente anteriormente no fluxo que ele pode finalizar o atendimento enviando a palavra-chave, neste exemplo, ‘Sair’.

2- Crie o bloco para finalizar o ticket criado

O bloco criado agora será o lugar onde o usuário será direcionado quando digitar a palavra-chave para sair do atendimento, neste exemplo, nomearei o bloco como ‘Fechar ticket’, neste bloco será desenvolvida toda a lógica para finalizar o ticket que ainda continua aberto ou aguardando no atendimento humano. Em suma, são estas funções que o bloco deverá cumprir:

  1. Buscar o ticket aberto ou em aguardo do contato.
  2. Separar o id deste ticket
  3. Enviar o comando para finalizar o ticket.

A seguir descrevemos cada um dessas funcionalidades bem como implementá-las.

2.1 Buscar o ticket aberto ou em aguardo do contato.

Para buscar o ticket do contato precisaremos enviar uma variação do comando Get all tickets of a bot, a estrutura está descrita baixo. Basicamente, este comando tem como objetivo buscar o ticket aberto ou aguardando do contato que está interagindo no seu bot, por este motivo, temos a variável {{contact.identity}} que representa o id do contato.

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?$filter=status%20eq%20'open'%20or%20status%20eq%20'waiting'%20and%20(CustomerIdentity%20eq%20'{{contact.identity}}')&$skip=0&$take=100"
}

Precisaremos agora adicionar essa requisição nas ações do bloco ‘Fechar ticket’, portanto

  1. Vá à aba de ações do bloco ‘Fechar ticket’
  2. Nas ações de entrada, adicione uma ação de “Processar Comando”
  3. Preencha o cada campo abaixo com o valor correspondente:
    Para: postmaster@desk.msging.net
    Método: get
    URI: /tickets?$filter=status%20eq%20’open’%20or%20status%20eq%20’waiting’%20and%20(CustomerIdentity%20eq%20’{{contact.identity}}’)&$skip=0&$take=100
    Variável de resposta: ticket

Veja um exemplo abaixo

2.2 Separar o id deste ticket

Quando recuperamos o ticket no passo anterior o corpo da resposta que foi preenchido na variável “ticket” fica com o valor parecido com:

{
   "type":"application/vnd.lime.collection+json",
   "resource":{
      "total":1,
      "itemType":"application/vnd.iris.ticket+json",
      "items":[
         {
            "id":"1cbb38de-f356-4332-a79a-017670c2a924",
            "sequentialId":1,
            "ownerIdentity":"fecharticketporcliente@msging.net",
            "customerIdentity":"a296c12e-af33-43fd-b7ec-4a95c9857635.fecharticketporcliente@0mn.io",
            "customerDomain":"0mn.io",
            "provider":"Lime",
            "status":"Waiting",
            "storageDate":"2020-12-17T12:52:54.180Z",
            "externalId":"1cbb38de-f356-4332-a79a-017670c2a924",
            "rating":0,
            "team":"Default",
            "unreadMessages":0,
            "closed":false,
            "priority":0
         }
      ]
   },
   "method":"get",
   "status":"success",
   "id":"21c2d48a-f8f5-4206-ba5e-fbe39c81fd07",
   "from":"postmaster@desk.msging.net/#iris-hosted-1",
   "to":"fecharticketporcliente@msging.net/!iris-hosted-1-m7kasddo",
   "metadata":{
      "#command.uri":"lime://fecharticketporcliente@msging.net/tickets?$filter=status%20eq%20'open'%20or%20status%20eq%20'waiting'%20and%20(CustomerIdentity%20eq%20'a296c12e-af33-43fd-b7ec-4a95c9857635.fecharticketporcliente@0mn.io')&$skip=0&$take=100",
      "uber-trace-id":"dc234c4d2fdb9ee3%3A1f4dabdc4a56d09d%3Adc234c4d2fdb9ee3%3A1"
   }
}

Neste passo, precisamos recuperar e isolar somente a informação do id deste ticket, com isto em mente:

  1. Vá à aba de ações do bloco ‘Fechar ticket’
  2. Nas ações de entrada, adicione uma ação de “executar script”
  3. Adicione nas Variáveis de entrada, a variável ‘ticket’.
  4. Preencha o script com o seguinte conteúdo a seguir:
function run(ticket) {
  try {

    let ticket = JSON.parse(ticket);
    return ticket.resource.items[0].id;

  } catch (error) {
    return 'script error';
  }
}
  1. Por fim, no salvar retorno preencha o nome da variável de retorno, neste exemplo, será ticketId.

Veja abaixo como ficou esta ação

2.3 Enviar o comando para finalizar o ticket.

Agora, em pose do ticket id, podemos enviar o comando para finalizar o ticket como usuario, este comando propriamente dito é apresentado abaixo

POST https://http.msging.net/commands HTTP/1.1

Content-Type: application/json

Authorization: Key {YOUR_TOKEN}

{
   "id":"{{$guid}}",
   "to":"postmaster@desk.msging.net",
   "method":"set",
   "uri":"/tickets/change-status",
   "type":"application/vnd.iris.ticket+json",
   "resource":{
      "id":"{{ticketId}}",
      "status":"ClosedClient"
   }
}

Sendo assim:

  1. Vá à aba de ações do bloco ‘Fechar ticket’
  2. Nas ações de entrada, adicione uma ação de “Processar Comando”
  3. Preencha cada campo abaixo com o valor correspondente:
    Para: postmaster@desk.msging.net
    Método: set
    URI: /tickets/change-status
    Tipo: application/vnd.iris.ticket+json
    Resource: {“id”:"{{ticketId}}",“status”:“ClosedClient”}
    Variável de resposta: responseClose (como a resposta não será utilizada, pode colocar qualquer nome desejado.

Veja um exemplo abaixo

2.4 Completando o preenchimento do bloco ‘Fechar ticket’

Com as ações propriamente construídas nossa lógica está praticamente finalizada, mas é importante pontuar algumas circunstâncias, quando um ticket é finalizado, o Desk encaminha a informação do ticket como uma entrada de usuário, assim sendo, para que este bloco funcione corretamente, faça:

  1. Vá à aba de conteúdo do bloco ‘Fechar ticket’
  2. Adicione o “aguardar entrada de usuário”.

3- Crie um bloco de despedida

Por fim, você pode adicionar um bloco de despedida, no qual o usuário será redirecionando após finalização do bloco ‘Fechar ticket’.

Nosso layout final ficou assim, com a adição do bloco ‘Fechar ticket’ e ‘Despedida’.

9 Curtidas

Faltou só o alerta de textão no começo! :rofl: :rofl:

Valeu demais pela contribuição, @Caiof :baguette_bread:

Xô testar aqui…

3 Curtidas

Que top @Caiof

3 Curtidas

Muitooo bommmmmm!!!

3 Curtidas

Sensacional, muito útil apesar de sempre esperar que isso jamais ocorra. haha

3 Curtidas