예제 #1
0
        public GetUserInfoDialog(
            BotServices services,
            IStatePropertyAccessor <OnTurnState> onTurnAccessor,
            IStatePropertyAccessor <CartState> cartStateAccessor,
            IStatePropertyAccessor <CustomerState> customerStateAccessor,
            IPimbotServiceProvider provider)
            : base(Name)
        {
            _services              = services;
            _onTurnAccessor        = onTurnAccessor;
            _cartStateAccessor     = cartStateAccessor;
            _customerStateAccessor = customerStateAccessor;
            _itemService           = provider.ItemService;

            // Add dialogs
            var waterfallSteps = new WaterfallStep[]
            {
                InitializeStateStepAsync,
                PromptForNameAsync,
                PromptForEmailAdress,
                PromptForPhone,
                PromptForNameAdress,
                PromptForPostCode,
                PromptForCity,
                PromptForShipping,
                ResolveShipping,

                PromptForShippingName,
                PromptForShippingAddress,
                PromptForShippingPostCode,
                PromptForShippingCity,
                ResolveShippingCity,

                ConfirmCustomerInfo,
                ResolveConfirmCustomerInfo,
                ResolveIsEverythingOk,
                ConfirmOrder,
            };

            AddDialog(new WaterfallDialog(
                          "start",
                          waterfallSteps));
            AddDialog(new TextPrompt(NamePrompt));
            AddDialog(new TextPrompt(EmailPrompt, ValidateEmail));
            AddDialog(new TextPrompt(PhonePrompt));
            AddDialog(new TextPrompt(AdressPrompt));
            AddDialog(new TextPrompt(PostCodePrompt));
            AddDialog(new TextPrompt(CityPrompt));
            AddDialog(new ChoicePrompt(IsShippingAdressMatchPrompt));
            AddDialog(new TextPrompt(ShippingNamePrompt));
            AddDialog(new TextPrompt(ShippingAdressPrompt));
            AddDialog(new TextPrompt(ShippingPostCodePrompt));
            AddDialog(new ChoicePrompt(CorrectValuePrompt));
            AddDialog(new TextPrompt(ShippingCityPrompt));
            AddDialog(new ChoicePrompt(ConfirmUserInfoPrompt));
            AddDialog(new ConfirmPrompt(ConfirmOrderPrompt));
        }
예제 #2
0
        public MainDispatcher(
            BotServices services,
            IStatePropertyAccessor <OnTurnState> onTurnAccessor,
            UserState userState,
            ConversationState conversationState,
            ILoggerFactory loggerFactory,
            IPimbotServiceProvider provider)
            : base(nameof(MainDispatcher))
        {
            _services               = services ?? throw new ArgumentNullException(nameof(services));
            _logger                 = loggerFactory.CreateLogger <MainDispatcher>();
            _onTurnAccessor         = onTurnAccessor;
            _mainDispatcherAccessor = conversationState.CreateProperty <DialogState>(MainDispatcherStateProperty);
            _userState              = userState;
            _conversationState      = conversationState;
            _customerStateAccessor  = conversationState.CreateProperty <CustomerState>("customerProperty");

            if (conversationState == null)
            {
                throw new ArgumentNullException(nameof(conversationState));
            }

            if (userState == null)
            {
                throw new ArgumentNullException(nameof(userState));
            }

            _cartStateAccessor = userState.CreateProperty <CartState>(nameof(CartState));
            _dialogs           = new DialogSet(_mainDispatcherAccessor);
            AddDialog(new AddItemDialog(services, onTurnAccessor, _cartStateAccessor, provider));
            AddDialog(new RemoveItemDialog(services, onTurnAccessor, _cartStateAccessor));
            AddDialog(new GetUserInfoDialog(services, onTurnAccessor, _cartStateAccessor, _customerStateAccessor, provider));
            AddDialog(new FindItemDialog(services, onTurnAccessor, _cartStateAccessor, provider));
            AddDialog(new ShowCartDialog(services, onTurnAccessor, _cartStateAccessor, provider));
            AddDialog(new ShowOrdersDialog(services, onTurnAccessor, provider));
            AddDialog(new ShowCategoriesDialog(services, onTurnAccessor, provider));
            AddDialog(new DetailItemDialog(services, onTurnAccessor, provider));
        }
예제 #3
0
        public AddItemDialog(BotServices services,
                             IStatePropertyAccessor <OnTurnState> onTurnAccessor,
                             IStatePropertyAccessor <CartState> cartStateAccessor,
                             IPimbotServiceProvider provider)
            : base(Name)
        {
            _services          = services;
            _onTurnAccessor    = onTurnAccessor;
            _cartStateAccessor = cartStateAccessor;
            _itemService       = provider.ItemService;

            // Add dialogs
            var waterfallSteps = new WaterfallStep[]
            {
                InitializeStateStepAsync,
                PromptForCountStepAsync,
                ResolveCountAsync,
            };

            AddDialog(new WaterfallDialog(
                          "start",
                          waterfallSteps));
            AddDialog(new TextPrompt(CountPrompt, ValidateCount));
        }
예제 #4
0
        public DetailItemDialog(BotServices services, IStatePropertyAccessor <OnTurnState> onTurnAccessor, IPimbotServiceProvider provider)
            : base(Name)
        {
            _services       = services;
            _onTurnAccessor = onTurnAccessor;
            _itemService    = provider.ItemService;
            _featureService = provider.FeatureService;

            // Add dialogs
            var waterfallSteps = new WaterfallStep[]
            {
                InitializeStateStepAsync,
            };

            AddDialog(new WaterfallDialog(
                          "start",
                          waterfallSteps));
        }
예제 #5
0
        public FindItemDialog(BotServices services, IStatePropertyAccessor <OnTurnState> onTurnAccessor, IStatePropertyAccessor <CartState> cartStateAccessor, IPimbotServiceProvider provider)
            : base(Name)
        {
            _services          = services;
            _onTurnAccessor    = onTurnAccessor;
            _cartStateAccessor = cartStateAccessor;
            _itemService       = provider.ItemService;
            _categoryService   = provider.CategoryService;
            _featureService    = provider.FeatureService;

            // Add dialogs
            var waterfallSteps = new WaterfallStep[]
            {
                InitializeStateStepAsync,
                ResolveShowItemDialog,
                AskByAttributesDialog,
                ResolveAttributeFiltering,
                AskWhatNext,
                ResolveShowItems,
                PrintItems,
            };

            AddDialog(new WaterfallDialog(
                          "start",
                          waterfallSteps));
            AddDialog(new ChoicePrompt(ShowAllItemsPrompt));
            AddDialog(new ChoicePrompt(DidYouMeanPrompt));
            AddDialog(new ChoicePrompt(AskForPropertyPrompt));
            AddDialog(new ShowCategoriesDialog(services, onTurnAccessor, provider));
        }
예제 #6
0
        public PimBot(BotServices services, UserState userState, ConversationState conversationState, ILoggerFactory loggerFactory, IPimbotServiceProvider provider)
        {
            _services          = services ?? throw new ArgumentNullException(nameof(services));
            _userState         = userState ?? throw new ArgumentNullException(nameof(userState));
            _conversationState = conversationState ?? throw new ArgumentNullException(nameof(conversationState));

            _onTurnAccessor      = conversationState.CreateProperty <OnTurnState>("onTurnStateProperty");
            _dialogStateAccessor = _conversationState.CreateProperty <DialogState>(nameof(DialogState));

            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }

            _logger = loggerFactory.CreateLogger <PimBot>();
            _logger.LogTrace("Pimbot turn start.");

            // Verify LUIS configuration.
            if (!_services.LuisServices.ContainsKey(LuisConfiguration))
            {
                throw new InvalidOperationException($"The bot configuration does not contain a service type of `luis` with the id `{LuisConfiguration}`.");
            }

            Dialogs = new DialogSet(_dialogStateAccessor);
            Dialogs.Add(new MainDispatcher(services, _onTurnAccessor, userState, conversationState, loggerFactory, provider));
        }