Articles → MICROSOFT BOT FRAMEWORK → Prompts in Microsoft Bot Framework

Prompts in Microsoft Bot Framework






What are prompts?













Example




using Karan_EchoBot.Models;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.Dialogs.Choices;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace Karan_EchoBot.Dialogs {
  //C# we need to make it as Dialog
  public class RootDialog: ComponentDialog {
    private IStatePropertyAccessor < UserData > _userData;
    public RootDialog(UserState userState, ConversationState conversationState): base(nameof(RootDialog)) {

      _userData = userState.CreateProperty < UserData > ("UserData");

      var steps = new WaterfallStep[] {

        AskUserNameAsync,
        AskOfficeTypeAsync,
        AskPhoneNumberAsync,
        AskUserConfirmationAsync,
      };

      AddDialog(new WaterfallDialog("UserDetailsWaterfall", steps));
      AddDialog(new TextPrompt("AskUserNamePrompt", null));
      AddDialog(new ChoicePrompt("AskTypeOfAdressPrompt"));
      AddDialog(new ConfirmPrompt("ConfirmUserDetialsPrompt"));
      AddDialog(new NumberPrompt < long > ("AskPhoneNumberPrompt", ValidatePhoneNumberAsync));
    }

    private async Task < DialogTurnResult > AskUserNameAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
      return await stepContext.PromptAsync("AskUserNamePrompt", new PromptOptions {
        Prompt = MessageFactory.Text("What's your Name?"), RetryPrompt = MessageFactory.Text("Can I know your name?")
      }, cancellationToken);
    }

    private async Task < bool > ValidatePhoneNumberAsync(PromptValidatorContext < long > promptContext, CancellationToken cancellationToken) {
      long phoneNumber;

      long.TryParse(promptContext.Recognized.Value.ToString(), out phoneNumber);

      if (phoneNumber.ToString().Length == 10) {
        return await Task.FromResult(true);
      } else {
        return await Task.FromResult(false);
      }
    }

    private async Task < DialogTurnResult > AskPhoneNumberAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
      var userData = await _userData.GetAsync(stepContext.Context, () => new UserData(), cancellationToken);

      //setting the Address.
      userData.Address = stepContext.Context.Activity.Text;

      await _userData.SetAsync(stepContext.Context, userData, cancellationToken);

      return await stepContext.PromptAsync("AskPhoneNumberPrompt", new PromptOptions {
        Prompt = MessageFactory.Text("What is your phone number?"), RetryPrompt = MessageFactory.Text("Incorrect Phone Number! Please provide your valid number..")
      }, cancellationToken);
    }

    private async Task < DialogTurnResult > AskUserConfirmationAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
      //you need to save all answers using bot state and summarize the user information in the confirm state and show information in confirmStatement using C# string interpolation.
      var confirmStatement = $ "";

      return await stepContext.PromptAsync("ConfirmUserDetialsPrompt", new PromptOptions {
        Prompt = MessageFactory.Text(confirmStatement)
      }, cancellationToken);
    }

    private async Task < DialogTurnResult > AskOfficeTypeAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) {
      var officeTypes = new List < Choice > ();

      officeTypes.Add(new Choice() {

        Value = "Home",

      });

      officeTypes.Add(new Choice() {
        Value = "Office",
      });

      return await stepContext.PromptAsync("AskTypeOfAdressPrompt", new PromptOptions {
        Prompt = MessageFactory.Text("Ok, What type of address is this?"), RetryPrompt = MessageFactory.Text("Sorry, Which type of address is this?"), Choices = officeTypes
      }, cancellationToken);
    }
  }
}



Output


Picture showing the output of prompts in microsoft bot framework

Click to Enlarge

Picture showing the output of prompts in microsoft bot framework

Click to Enlarge


Posted By  -  Karan Gupta
 
Posted On  -  Wednesday, December 30, 2020

Query/Feedback


Your Email Id  
 
Subject 
 
Query/FeedbackCharacters remaining 250