Articles → MICROSOFT BOT FRAMEWORK → Waterfall Model In Microsoft Bot Framework

Waterfall Model In Microsoft Bot Framework






What Is A Waterfall Model?





Implementation




  1. Create a new class "RootDialog" that implements "ComponentDialog".
  2. public class RootDialog : ComponentDialog{ 
    }


  3. In "Startup.cs", add the following code.
  4. services.AddSingleton<RootDialog>(); 
    services.AddTransient<IBot, Karan_EchoBot.Bots.EchoBot<RootDialog>>();


  5. Change the definition of “EchoBot”.
  6. public class EchoBot < T >: ActivityHandler where T: Microsoft.Bot.Builder.Dialogs.Dialog { 
        private IConfiguration _configuration;
        private UserState _userState;
        private ConversationState _conversationState;
     
        private Microsoft.Bot.Builder.Dialogs.Dialog _dialog;
     
        private IStatePropertyAccessor < UserData > _userData;
        private IStatePropertyAccessor < ConversationData > _conversationData;
     
        public EchoBot(IConfiguration configuration, UserState userState, ConversationState conversationState, T dialog) {
            _configuration = configuration;
            _userState = userState;
            _conversationState = conversationState;
     
            this._dialog = dialog;
     
            _userData = userState.CreateProperty < UserData > ("UserData");
            _conversationData = conversationState.CreateProperty < ConversationData > ("ConversationData");
        }
    }


  7. In the "OnMessageActivityAsync" method, call the "RootDialog" class.
  8. protected override async Task OnMessageActivityAsync(ITurnContext < IMessageActivity > turnContext, CancellationToken cancellationToken) { 
        await _dialog.RunAsync(turnContext, _conversationState.CreateProperty <DialogState> ("DialogState"), cancellationToken);
    }


  9. Implement a waterfall model in "RootDialog.cs".
  10. using Microsoft.Bot.Builder; 
    using Microsoft.Bot.Builder.Dialogs;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading;
    using System.Threading.Tasks;
     
    namespace Karan_EchoBot.Dialog {
        public class RootDialog: ComponentDialog {
            public RootDialog(): base(nameof(RootDialog)) {
                var steps = new WaterfallStep[] {
                    FirstStep,
                    SecondStep
                };
     
                AddDialog(new WaterfallDialog("WaterFallId", steps));
            }
     
            private async Task < DialogTurnResult > SecondStep(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
                await stepContext.Context.SendActivityAsync(MessageFactory.Text("This is the second message"), cancellationToken);
                return await stepContext.EndDialogAsync(null);
            }
     
            private async Task < DialogTurnResult > FirstStep(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
                await stepContext.Context.SendActivityAsync(MessageFactory.Text("This is the first message"), cancellationToken);
                return Microsoft.Bot.Builder.Dialogs.Dialog.EndOfTurn;
            }
        }
    }

Output


Picture showing the output of waterfall model in microsoft bot framework
Click to Enlarge


Posted By  -  Karan Gupta
 
Posted On  -  Sunday, December 27, 2020

Query/Feedback


Your Email Id
 
Subject
 
Query/FeedbackCharacters remaining 250