ūüßź Problemas comuns ao criar um servi√ßo de atendimento humano utilizando roteador

Olá pessoal!! Como vocês estão?

To passando por aqui para passar algumas dicas que irão auxiliar na construção de um contato inteligente que tenha um atendimento personalizado pelo blip!

Aqui vamos falar sobre a estrutura roteadora, mas tamb√©m teremos dicas valiosas para a constru√ß√£o de um √ļnico bot que j√° possua o atendimento.

Por isso, se você ainda não sabe como funciona e o que é um roteador, confira esse super material que o @BrunoC fez.

Com isso, vamos imaginar um cen√°rio:

  • Temos um roteador e dois bot‚Äôs builder (um para receber o usu√°rio e outro para realizar o atendimento)

  • Esse roteador ter√° ambos os builders como servi√ßos

  • Nosso atendimento dever√° possuir diferentes filas que ser√£o definidas a partir do fluxo que o usu√°rio seguiu

Com isso, lembre-se que as configura√ß√Ķes referentes ao atendimento devem ser feitas no bot builder que ser√° realizado o atendimento. No nosso caso, o bot Bia - [Human Service] que √© nosso bot de atendimento e por isso √© a partir dele que devemos acessar a aba de Atendimento do portal.

Nossa estrutura ficou assim:

Ao construir um contato inteligente que possua essa estrutura, muitas vezes nos deparamos com alguns problemas que vou tentar esclarecer por aqui:

1¬į) O usu√°rio n√£o √© encaminhado para a fila correta e estou utilizando informa√ß√Ķes do contato:

Considerando que o extras ou o campo do contato seja atualizado corretamente, certifique-se que sempre antes de realizar o atendimento você atualize o campo avaliado para o contato do serviço de atendimento. Muitas vezes, o que ocorre é que o usuário no router possui o campo atualizado e no bot de atendimento não…

Para ficar mais claro, quando um usu√°rio est√° interagindo com um contato na estrutura roteadora, cada bot ir√° possuir o seu respectivo contato dentro do blip, isso porque o contato √© uma representa√ß√£o √ļnica daquele usu√°rio no contexto espec√≠fico daquele bot.

O caso abaixo evidencia o problema, mostrando que o contato no router possui o extras Time e o contato no bot de atendimento n√£o.

Router:

Bot de atendimento:

Quando isso acontece, possivelmente voc√™ est√° utilizando o comando MergeContact em nome do router e n√£o do bot de atendimento. No caso, eu fiz esse exemplo utilizando o pr√≥prio comando do blip, com o contexto do roteador ativo (fazendo com que as a√ß√Ķes do bot sejam em nome do router).

2¬į) O usu√°rio √© encaminhado corretamente apenas no primeiro atendimento:

Normalmente a causa raiz desse cenário é a mesma do anterior, mas como o primeiro atendimento do usuário funciona é mais difícil diagnosticar.

Como funciona o processo de criação dos contatos? À medida que o usuário interage com o bot, apenas na sua primeira mensagem com o serviço irá criar um um contato no blip e os contatos dos serviços são criados com base no contato do router em caso do contexto de router ativo.

3¬į) Quero segmentar o atendimento por canal:

Caso seja do seu interesse, ter filas de atendimento diferenciadas pelo canal que o usu√°rio est√° se comunicando, considere utilizar uma vari√°vel imut√°vel para identificar este canal.

Para isso, considere utilizar o identity do usu√°rio principal (atrelado ao router), que no caso de um bot com contexto do roteador ativo, ir√° corresponder ao contact.identity.

Esse campo do usuário é o seu identificador dentro do contato inteligente que se comunica com o canal trabalhado e por isso não é alterado e sempre terá a informação do canal que o usuário está comunicando. Um ponto negativo é que esse campo não é muito intuitivo, visto que é necessário analisar o domínio que o identity está atrelado.

Ex.:

Ao iniciar uma conversa pelo router, temos o nosso contato atrelado ao canal criado corretamente e é possível visualizar pelos logs do nosso bot ou pela própria aba de contatos.

Ao entrar no contato, conseguimos o seu identity pela url:

√Č poss√≠vel perceber que o contato criado [email protected], √© do dom√≠nio 0mn.io, que se refere ao canal Blipchat. No caso de outros canais, teremos outros dom√≠nios, como por exemplo, o canal Whatsapp possui o dom√≠nio wa.gw.msging.net.

Com isso, seria possível utilizar um script que diz qual o canal que o usuário se encontra:

const run = (contactIdentity) => {

const contactDomain = contactIdentity.split("@")[1];

switch (contactDomain) {

case "wa.gw.msging.net":

return "Whatsapp";

case "0mn.io":

return "Blipchat";

default:

return "Other";

}

}

Lembrando que esse script recebe contact.identity como vari√°vel de entrada.

Sobre o campo source

  • Algumas pessoas consideram utilizar o campo source para trabalhar a intera√ß√£o do contato com base no canal que o usu√°rio est√° comunicando. Esse campo, ajuda muito nesse prop√≥sito, por√©m, caso voc√™ utilize alguma ferramenta externa que manipule os dados dos contatos, voc√™ pode acidentalmente deletar esse campo e ele n√£o ser√° mais setado, visto que sua cria√ß√£o, at√© a data deste guia, ocorre somente na primeira intera√ß√£o do usu√°rio.

Sobre o tunnel

  • O tunnel permite o roteamento de mensagens entre diferentes bots do blip e quando criados a partir de um √ļnico canal de comunica√ß√£o, s√£o criados a partir do estado do identificador de origem criado na primeira intera√ß√£o do contato com o canal (quando compartilhado o contexto), que √© o contact.identity ou tunnel.originator. Dica: √© poss√≠vel descobrir o identificador do usu√°rio dado um router, utilizando o comando tunnel info.

Esse comando utiliza como Authorization a chave do bot router que você sabe que o contato interagiu e o tunnel trabalhado:

{  

  "id": "{{$guid}}",

  "to": "[email protected]",

  "method": "get",

  "uri": "/tunnels/{{guid}}@tunnel.msging.net"

}

Essas eram as dicas que eu tinha para hoje :hugs::hugs:

Muito obrigado por fazer parte da comunidade! Se voc√™ estiver com d√ļvida em como utilizar o blip, tenha certeza que aqui √© o lugar para compartilharmos conhecimento a respeito da plataforma!

Até a próxima!

8 curtidas

Aulas, @Arthur.Machado :sparkles: que dicas valiosas!!!

2 curtidas

Boa @Arthur.Machado.

2 curtidas

Fera demais! :heavy_heart_exclamation:

2 curtidas