bots


C# Bot Framework : Form flow set value for the field based on previous Answer [duplicate]


Hello I'm new to Microsoft Bot Framework and I have a question that I couldn't find an answer to.
I have a FormFlow that ask the user for some question, after a specific question I want the bot to do some logic and show messages accordingly (for example if the user selected option 1 then show message X and if the user selected option 2 show message Y).
Here is my code:
using Microsoft.Bot.Builder.FormFlow;
using Microsoft.Bot.Builder.Dialogs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Bot_CRM.FormFlow
{
public enum RequestOptions { Unknown, CheckStatus, CreateCase };
[Serializable]
public class CaseFormFlow
{
public RequestOptions RequestType;
[Prompt("What is your first name?")]
public string FirstName;
public string LastName;
public string ContactNumber;
[Prompt("Please enter your id")]
public string Id;
public static IForm<CaseFormFlow> BuildForm()
{
OnCompletionAsyncDelegate<CaseFormFlow> processRequest = async (context, state) =>
{
await context.PostAsync($#"Thanks for your request");
};
return new FormBuilder<CaseFormFlow>()
.Message("Hello and welcom to my service desk bot")
.Field(nameof(FirstName))
.Message("hello {FirstName}")
.Field(nameof(Id))
.Field(nameof(RequestType)) =>
//here if user select 1 start flow of check status and if user select 2 start flow of create case
.AddRemainingFields()
.Message("Thank you request. Our help desk team will get back to you shortly.")
.OnCompletion(processRequest)
.Build();
}
}
}
Updated code after Ezequiel's suggestion:
return new FormBuilder<CaseFormFlow>()
.Message("Hello and welcom to my service desk bot")
.Field(nameof(FirstName))
.Message("hello {FirstName}")
.Field(new FieldReflector<CaseFormFlow>(nameof(RequestType))
.SetActive(state => state.AskUserForRequestType)
.SetNext((value, state) =>
{
var selection = (RequestOptions)value;
if (selection == RequestOptions.CheckStatus)
{
return new NextStep(new[] { nameof(Id) });
}
else
{
return new NextStep();
}
}))
Thanks in advance for the help
This is a great question.The key thing is to use the SetActive and SetNext methods of the Field<T> class. You should consider using the FieldReflector class; though you can implement your own IField.
SetActive is described in the Dynamic Fields section of the FormFlow documentation. Basically it provides a delegate that enables the field based on a condition.
SetNext will allow you to decide what step of the form should come next based on your custom logic.
You can take a look to the ContosoFlowers sample. In the Order form; something similar is being done.
public static IForm<Order> BuildOrderForm()
{
return new FormBuilder<Order>()
.Field(nameof(RecipientFirstName))
.Field(nameof(RecipientLastName))
.Field(nameof(RecipientPhoneNumber))
.Field(nameof(Note))
.Field(new FieldReflector<Order>(nameof(UseSavedSenderInfo))
.SetActive(state => state.AskToUseSavedSenderInfo)
.SetNext((value, state) =>
{
var selection = (UseSaveInfoResponse)value;
if (selection == UseSaveInfoResponse.Edit)
{
state.SenderEmail = null;
state.SenderPhoneNumber = null;
return new NextStep(new[] { nameof(SenderEmail) });
}
else
{
return new NextStep();
}
}))
.Field(new FieldReflector<Order>(nameof(SenderEmail))
.SetActive(state => !state.UseSavedSenderInfo.HasValue || state.UseSavedSenderInfo.Value == UseSaveInfoResponse.Edit)
.SetNext(
(value, state) => (state.UseSavedSenderInfo == UseSaveInfoResponse.Edit)
? new NextStep(new[] { nameof(SenderPhoneNumber) })
: new NextStep()))
.Field(nameof(SenderPhoneNumber), state => !state.UseSavedSenderInfo.HasValue || state.UseSavedSenderInfo.Value == UseSaveInfoResponse.Edit)
.Field(nameof(SaveSenderInfo), state => !state.UseSavedSenderInfo.HasValue || state.UseSavedSenderInfo.Value == UseSaveInfoResponse.Edit)
.Build();
}
}
}

Related Links

Rich text format for response text in facebook chatbot
Wit.ai stories with branch
How to do a decision tree on MS Bot Framework?
How can we refresh the skype bot token
get recently posts on vbulltein and send to Telegram bot
How to get skype bot id using access token
How can I integrate my Bot (created with the Bot Framework) with Spark?
Microsoft Bot says “The process cannot access the file because it is being used by another process.”
When should we use all three (trait, free-text and keywords) search strategies in a user-defined entity?
alternative to wit.ai merge since it is deprecated now
my telegram bot keeps sending messages endlessly
Telegram: don't search my bot to start conversation
How to add MS bot to slack?
How to get the last executed command in a Telegram bot?
How can i customize answer of Bot Framework Help Command?
How can I identify the particular attachments when I click on a button in cards?

Categories

HOME
google-chrome
applescript
loopbackjs
theano
iverilog
semantic-web
turbojpeg
navigation
ipv6
video-streaming
firebase-dynamic-links
phpseclib
tup
dhcp
pywinauto
nose
cpu-usage
multiple-tables
unity-container
sharedpreferences
exchange-server-2010
adapter
basic-authentication
copy-protection
d3.js-v4
progid
windows2012
argv
xcrun
quickcheck
java-stream
polyml
autoencoder
xerces-c
love2d
aurelia-http-client
praat
flowchart
hypothesis-test
haar-classifier
contactless-smartcard
httphandler
cyanogenmod
ssi
nothing
nusoap
lightning-workbench
jgrapht
maven-jaxb2-plugin
skip-lists
wikimapia
apache-modules
ltrace
email-injection
system.web.optimization
fuzzer
livecycle
svnserve
conan
eclemma
adp
timestamping
android-async-http
seadragon
flask-security
mousehover
artisan
web-api
python-c-extension
directorysearcher
juttle
producer
qt5.4
visual-c++-2012
webmethod
full-text-indexing
maven-central
nachos
oxygene
principalcontext
proxy-server
mousemotionlistener
insertonsubmit
codahale-metrics
quickgraph
.net-remoting
statechart
jquery-lazyload
eager-loading
dojo-1.9
xcode4.5
telerik-ajax
monocross
glassfish-esb
canonicalization
regression-testing
formal-semantics
ccl
asdoc
dm
jboss-mdb

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App