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
Importando e testando este template
O template que pode ser testado e importado no seu chatbot seguindo passo a passo de importação abaixo:
Crie um bot a partir do template de atendimento
Baixe o fluxo aqui
Contact Close Ticket - Template.json (32,5,KB)
Importe o fluxo no seu bot - Como faço isso?
Prontinho 🙂
Veja um exemplo do fluxo na prática
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:
- Buscar o ticket aberto ou em aguardo do contato.
- Separar o id deste ticket
- 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
- Vá à aba de ações do bloco ‘Fechar ticket’
- Nas ações de entrada, adicione uma ação de “Processar Comando”
- 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:
- Vá à aba de ações do bloco ‘Fechar ticket’
- Nas ações de entrada, adicione uma ação de “executar script”
- Adicione nas Variáveis de entrada, a variável ‘ticket’.
- 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';
}
}
- 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:
- Vá à aba de ações do bloco ‘Fechar ticket’
- Nas ações de entrada, adicione uma ação de “Processar Comando”
- 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:
- Vá à aba de conteúdo do bloco ‘Fechar ticket’
- 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’.