Possível bug no retorno do menu do tipo application/vnd.lime.select+json


Ao longo do meu chatbot eu monto alguns menus com dados variados.

Ao usuário clicar em um item do menu o texto clicado aparece na tela como resposta do usuário.

Quando eu armazeno a resposta do usuário em uma variável, o valor dessa variável é, o mesmo texto do menu e o mesmo que aparece na tela como resposta do usuário.


No caso que pretendo relatar, montei um menu que tem mais de 54 opções e como aconteceu com os demais, ao clicar na opção do menu, aparece na tela o texto clicado como resposta do usuário, então eu armazeno essa resposta em uma variável.

Para minha surpresa ao checar o valor dessa variável não continha o texto como de costume, mas sim o índice do menu.

Posso facilmente utilizar o índice no lugar do texto, mas tem que ter uma explicação para isto, pois esse fato saiu do padrão de retorno dos menus anteriores, logo não tem como prever quando retorna o texto e quando retorna o índice podendo gerar erro em toda aplicação que já está pronta e funcionando.


Alguém pode me explicar porque isso está acontecendo?


Desde já agradeço a atenção.


7 comentários

Olá @Marcelo_Collares,


Você está construindo seu bot através do Builder? Se sim, verifique por favor se o item do seu menu possui payload.

O payload serve para enviar para o bot um valor diferente daquele que será exibido na tela do cliente.


Caso esteja utilizando um dos SDKs ou a API HTTP, verifique se você está enviando a propriedade value do item do seu menu. Caso esse valor e o texto do botão não existam o BLiP envia por padrão o índice do elemento no Menu.

Olá @rafaelpa,

Estou utilizando o Builder, e não estou usando payload.

Faço uma requisição HTTP e o retorno eu coloco como entrada de um script, dentro do script eu monto o JSON conforme documentação para preenchimento automático do menu. Uso o mesmo script, apenas trocando a entrada. A resposta do usuário eu utilizo para montar outra requisição HTTP e assim por diante. Todos os menus retornam o texto clicado pelo usuário, mas nesse especifico retorna o indice da palavra clicada.

@Marcelo_Collares,


poderia me enviar o código utilizado para montar o menu e um print da sua tela de log quando o usuário clica no botão e o valor do índice chega para o cliente?

Vou mandar 2 menus, um que retorna a string correta e outro que retorna o índice.


Esse primeiro é o menu que retorna a string que eu espero.


Este segundo é o menu que retorna o índice. Notem que eu utilizo o mesmo objeto, apenas trocando os itens do menu, pois utilizo o mesmo script para a montagem.


Lembrando que estou usando o Builder e estou gerando o conteúdo do menu dentro de um script igual para ambos, e retornando uma variável que alimenta um “conteúdo dinâmico” do tipo “application/vnd.lime.select+json” sem qualquer metadata extra.


Segue abaixo o script que eu utilizo para a montagem do menu.

Olá @Marcelo_Collares,


agora entendi 🙂

Você está utilizando o Builder mas construindo o menu como um conteúdo dinâmico.


O tipo de conteúdo Select (convertido para o popular Menu em canais como Facebook Messenger, por exemplo) tem algumas regras para definir o que será enviado para o cliente.


Em resumo:



  • Se seu item do menu possui a propriedade value ela é enviada;

  • Se seu item do menu não possui value mas possui a propriedade order então está é enviada

  • Se seu item do menu não possui value e order, então a propriedade text é enviada


Para forçar o envio do texto exibido no botão, altere sua função menuItemCreation para criar um item de acordo com o JSON abaixo:


  {
"order":parseInt(ordem, 10),
"text":texto,
"type":"text/plain",
"value": texto
}

Para mais detalhes veja o link abaixo:


https://docs.blip.ai/?http#select


Obs: Ainda não entendi porque um dos seus menus retorna o order e o outro apenas o label, afinal os dois são criados da mesma forma. Vou investigar mais a fundo e te aviso por aqui. 😉

Bom dia @rafaelpa, funcionou.


Não sabia que tinha essa ordem para envio de conteúdo relacionada a ausência ou omissão de propriedades, pelo menos não tinha visto isso na documentação…

É interessante que alguma coisa sempre seja enviada, só não é legar a ferramenta agir de duas formas diferentes para a mesma implementação, é um caso a se investigar assim como você colocou nas observações de sua mensagem.


Obrigado pelo atenção.

Olá @Marcelo_Collares,


a regra está descrita na documentação: 😉


https://docs.blip.ai/?http#select

Comente