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

[Template] Permitir que clientes/contatos fechem os próprios tickets
Reputação 5

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 🙂




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":"[email protected]",
"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: [email protected]

    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":"[email protected]",
"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":"[email protected]/#iris-hosted-1",
"to":"[email protected]/!iris-hosted-1-m7kasddo",
"metadata":{
"#command.uri":"lime://[email protected]/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":"[email protected]",
"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: [email protected]

    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’.




8 comentários

Reputação 7

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


Valeu demais pela contribuição, @Caiof 🥖


Xô testar aqui…

Reputação 7

Que top @Caiof

Reputação 6
Crachá

Muitooo bommmmmm!!!

Reputação 7
Crachá +1

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

@Caiof muito bom parabéns.

Só estou com um problema.


Quanto eu testo pelo bot “Atendimento Humano” funciona perfeitamente. Porém quando testo pelo roteador, preciso digitar 2x Sair para ativar a ação de finalizar o ticket, e ainda sim o ticket não finaliza.


Existe alguma configuração para que funcione no contexto do roteador?


Reputação 5

Ei @CarlosER7, tudo bom?



Existe sim, neste template é necessário que o bot de atendimento esteja Utilizar contexto do roteador esteja desabilitado, verifica e me conta aqui se seu bot está com o contexto desabilitado? :goodblip:



Ahh antes que eu esqueça, caso você necessite do contexto habilitado neste bot, só me informe aqui que conseguimos adaptar o template para tal, blz? :shyblip:

Reputação 6
Crachá

Como que eu adapto para contexto ligado? O bot não está fechando pelo usuário por conta disso.

Bom dia Caiof, por conta do tempo o arquivo não se encontra mais disponível, seria possível reupar por favor? Grato. 

Comente