FormFlow com Json

Pedro Jesus
3 min readApr 1, 2018

Bem até então foi visto que é possível criar um formulário a partir de uma classe, dentro do seu projeto de bot. Porém isso torna as coisas um pouco “rígidas” demais, afinal se quiser fazer alguma alteração, apenas no formulário, você teria que fazer a publicação do bot novamente, o que é muito custoso para uma alteração minima. Sendo assim é possível utilizar um formulário a partir de um Json. Daí quando quiser fazer uma alteração, apenas no(s) formulário(s), basta alterar o Json. Muito menos trabalhoso, não?

Se você está perdido clique aqui para ir ao inicio dessa série.

Para este projeto irei utilizar o Json da documentação da Microsoft, por questão de comodidade. O link do Json que eu utilizo é este:

https://gist.githubusercontent.com/pictos/70aa4fcc4fad5e48d28c933f42fd3a12/raw/d32457662a06fbff87625eb9e61bf7f89a909f69/teste.json

Configurando o ambiente

Para fazer uso deste recurso, vamos precisar instalar o seguinte pacote nuget, como mostrado na figura 1.

Microsoft.Bot.Builder.FormFlow.Json

Figura 1 -Pacote Nuget

Se seu projeto precisa de atualização(como o meu) sugiro que atualize, hehe. Feito isso, basta montar a estrutura do projeto. Pode montar do jeito que mais te agrada, a figura 2 mostra a minha estrutura.

Figura 2 -Organização do projeto

Criando o Formulário

O próximo passo é criar nossa classe que ira ser responsável pela construção do formulário. No gist abaixo está o código da classe Form.cs, como mostra o Gist 1.

Gist1 -Form.cs

Para esta demonstração coloquei a string que obtém o json(MessagesController.json) dentro da minha classe Controller, muito provavelmente, para produção isso vai estar em outro lugar, mas por questão de praticidade coloquei direto na Controller, assim que o dialogo é iniciado. Como mostrado no Gist 2.

Gist 2 — Controller

Assim que o usuário digitar uma mensagem o bot fará download do Json e irá armazená-lo em uma string. Como ela é estática e publica é possível acessá-la diretamente em qualquer parte do nosso programa. E para chamar o formulário, nossa já conhecida return Chain.From(); . Na figura 1 podemos ver o formulário rodando.

Figura 1 -Formulário do Json.

Capturando o retorno do Formulário

Depois que o usuário responder ao formulário pode ser necessário pegar as respostas dele. Como estamos usando um Json e não temos uma classe de modelo o jeito de pegar os valores e as propriedades é um pouco diferente, no gist 3.

Gist 3 -Obtendo as respostas do usuário

Para fins de demonstração estou apenas exibindo os valores, de duas formas distintas. Na linha 22 eu retorno a propriedade e a resposta do usuário(Value), na linha 23 eu apenas retorno a resposta do usuário.

Também é possível obter esse retorno através da classe MessagesController, como mostro no gist 4.

Gist 4 — Obtendo o retorno do formulário pela Controller

Além de obter a resposta do usuário, da mesma forma que mostrado no gist 3, aqui eu implemento o try/catch para pegar uma possível exceção, caso o usuário cancele o pedido ou ocorra algum outro erro.

Espero que tenha ajudado vocês a trabalharem o formulário no formato de Json, qualquer dúvida só postar! Até a próxima.

--

--