Dados do subbot não são propagados para o Desk


Bom dia!

Tenho uma estrutura de 1 router e 2 subbots, direcionando para o Messenger e para o Chat.

Em ambos os subbots defino os contatos e informações extras e cada canal tem seu atendimento.


Eu publiquei o Router e utilizei a opção de contexto de roteador nos subbots para que as variáveis sejam propagadas pelos bots. Porém, quando um cliente solicita atendimento humano e esse cliente vai para o Desk, os dados não são salvos no contato.


Quando eu utilizo diretamente o subbot, os dados vão corretamente para o desk, mas pelo router não. Os dados não deveriam ser compartilhados entre bots?


22 comentários

Reputação 7

Olá @Artur_Lunardi_Di_Fan de fato, o ideal é que fosse compartilhado entre os subbots, no entanto o Desk está com este problema.


Você conseguiu alguma atualização em relação a isso?

Olá, @BrunoC


Não, sem sucesso no compartilhamento de dados entre subbots pro Desk

Tivemos que desmarcar a opção de contexto do roteador para que os dados chegassem corretamente e criar um modelo de IA para cada subbot.

Passei pelo mesmo problema, resolvi de outra forma.

No bloco de redirecionamento do serviço pro Desk

Criei um script que armazenar uma variavel chamado “contato” um json com todos os dados do usuario, mais ou menos assim:


function run() {

return {

“name”:"{{contact.name}}",

“email”:"{{contact.email}}",

“phoneNumber”:"{{contact.phoneNumber}}",

“city”:"{{contact.city}}",

“gender”:"{{contact.gender}}",

“cliente”:"{{contact.extras.cliente}}"

};

}


Ai no bloco de redirecionamento do serviço para Desk eu passo essa variavel {{contato}} na opção de enviar a mensagem.


E no bloco Inicio do Desk eu recebo essa variavel e atualizo as informações do usuario do Desk.


Achei melhor solução pq senão vc vai criar uma base de contato para cada bot e vai ficar mais espalhado as informações do contato.


Espero ter ajudado.

@Artur_Lunardi_Di_Fan.


Por experiencia, não da para usar a opção “utilizar contexto de roteador” nos sub-bots que você terá atendimento humano.


Tanto não aparecerá os dados no DESK, quanto a regra de negócio ( redirecionar a times com base em algum parâmetro do contact.extras .?).


O que é uma pena porque realmente seria muito útil centralizar os dados do cliente em somente um BOT (no caso o Router).

@Artur_Lunardi_Di_Fan @Olivia_Orthodontic_B

Realmente, o Desk utiliza o contato do subbot para iniciar o atendimento e o contexto do usuário salva todas as informações no contato do roteador.


Uma alternativa para esse cenário seria, antes de enviar para o bloco de atendimento, atualizar o contato do subbot com todas as informações do contato do roteador.


Você pode fazer isso através de uma ação HTTP para atualizar o contato


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


Headers:

Content-Type: application/json

Authorization: Key {AUTHORIZATION KEY DO SEU SUBBOT}


{  
"id": "{{random.guid}}",
"method": "set",
"uri": "/contacts",
"type": "application/vnd.lime.contact+json",
"resource": {{contactSerialized}}
}

A variável {{contactSerialized}} já retorna todo o contato serializado, então já facilita esse processo! 🙂

Ops, na verdade a variável do resource é {{contact.serialized}}, e não {{contactSerialized}}

Reputação 7
Crachá +2

oi eu gostaria de entender melhor como atualizar por requisição consegue me ajudar ?

Opa, claro @Pedro_Lucas!


Basicamente você precisa adicionar uma ação Requisição HTTP a um bloco anterior ao bloco de atendimento humano, com os seguintes campos preenchidos:



.



  • Corpo


{  
"id": "{{random.guid}}",
"method": "set",
"uri": "/contacts",
"type": "application/vnd.lime.contact+json",
"resource": {{contact.serialized}}
}

O que essa requisição faz é, como falamos acima no tópico, atualizar o contato do seu bot filho com as informações do contato do seu router, pois o Desk pega as informações do contato do bot filho.

Reputação 7
Crachá +2

nisso ele já atualiza tudo ???

Sim! Se vc prestar atenção o que esse comando faz é setar o contato no bot filho (pois está utilizando a chave de autorização do bot filho) com as informações do contato atual (obtidas na variável {{contactSerialized}}).


Nisso o Desk pega o contato que acabou de ser atualizado! 😃

Reputação 7
Crachá +2

então eu venho atualizo tudo que quero, e depois faço a ação da api certo ?

isso, @Pedro_Lucas!

Reputação 7
Crachá +2

ei bom dia, estou tentando, mas não está atualizando o contato, eu tenho que usar a chave do router, e fazer a requisição no bot filho né ?

Não, a chave da requisição também precisa ser do bot filho. Recomendo ler de novo essa thread de dúvida pra vc conferir se tem mais algum valor trocado! 😉

Reputação 7
Crachá +2

eu mantenho ele no contexto roteador ???

Reputação 7
Crachá +2

por que já tentei usando o o código do bot filho, mar não foi

Reputação 7
Crachá +2

agora que vi você tem o sobrenome igual o meu kkj, tava tentando ver a lógica aqui mas não ta rodando mesmo assim


Olá, bom dia,


Eu consegui redirecionar para equipe(time) de acordo com a escolha do usuário. E ainda verifica se existe atendente disponível na equipe em que foi cadastrado.

Reputação 7

Lembrando que o resource também deve estar com aspas duplas!

Desculpa ressuscitar esse tópico antigo, mas acredito que essa seja a solução que o tópico pediu inicialmente.


Ao rodar esse comando, que vai ser atualizado é o contato do Router.


{


  "id": "{{random.guid}}",
"method": "set",
"uri": "/contacts",
"type": "application/vnd.lime.contact+json",
"resource": "{{contact.serialized}}"

}


Solução:

Se nos sub bots, você utiliza a configuração “Utilizar contexto do roteador”, o identity que vem no {{contact.identity}} é contato do Router, por isso o comando acima atualiza os dados do contato no Router, para vocẽ atualizar o contato no sub bot é preciso utilizar o {{tunnel.identity}} no lugar.


{


  "id": "{{random.guid}",
"method": "set",
"uri": "/contacts",
"type": "application/vnd.lime.contact+json",
"resource": {
"identity": "{{tunnel.identity}}",
"name": "{{contact.name}}",
"address": "{{contact.address}}",
"city": "{{contact.city}}",
"email": "{{contact.email}}",
"phoneNumber": "{{contact.phoneNumber}}",
"photoUri": "{{contact.photoUri}}",
"cellPhoneNumber": "{{contact.cellPhoneNumber}}",
"gender":"{{contact.gender}}",
"group":"{{contact.group}}"
}

}


@Pedro_Lucas faz o teste com esse exemplo que eu falei pra ver se funciona.


Obs: Pra eu não ter que escrever tudo de novo, pega a requisição HTTP que o Matheus falou lá em cima e só muda o body pra o que eu falei.

Reputação 7
Crachá +2

migo no fim eu acabei resolvendo e nem voltei aqui JA DEU kkk mas é isso memu

Reputação 7

Obrigada por compartilhar, @Bruno_Felix1!

Não precisa se desculpar. É super importante fomentar discussões que podem receber contribuições e a sua foi super válida 😊

Comente