Пример #1
0
        private async Task <DialogTurnResult> ConfirmDeclineOrChangeOrderStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var order = await conversationState.GetOrder(stepContext.Context);

            var result = await recognizer.RecognizeAsync(stepContext.Context, cancellationToken);

            if (result.IsConfirmOrderIntent)
            {
                return(await stepContext.EndDialogAsync(order, cancellationToken));
            }

            if (result.IsSpecifyOrderIntent)
            {
                order.MergeWith(result.ToOrder());
                return(await stepContext.ReplaceDialogAsync(nameof(OrderingDialog), order, cancellationToken));
            }

            if (result.IsDeclineOrderIntent)
            {
                return(await stepContext.ReplaceDialogAsync(changeOrderDialog.Id, order, cancellationToken));
            }

            var message = MessageFactory.Text(Resource.IDidNotUnderstandYou, Resource.IDidNotUnderstandYou, InputHints.IgnoringInput);
            await stepContext.Context.SendActivityAsync(message, cancellationToken);

            return(await stepContext.ReplaceDialogAsync(nameof(OrderingDialog), order, cancellationToken));
        }
        private async Task <DialogTurnResult?> InterruptAsync(DialogContext innerDc, CancellationToken cancellationToken)
        {
            if (innerDc.Context.Activity.Type != ActivityTypes.Message)
            {
                return(null);
            }

            var result = await recognizer.RecognizeAsync(innerDc.Context, cancellationToken);

            if (result.IsGetMenuInformationIntent)
            {
                var message = MessageFactory.Text(Resource.MenuInformation, Resource.MenuInformation, InputHints.ExpectingInput);
                await innerDc.Context.SendActivityAsync(message, cancellationToken);

                return(new DialogTurnResult(DialogTurnStatus.Waiting));
            }

            if (result.IsCancelOrderIntent)
            {
                var cancelMessage = MessageFactory.Text(Resource.CancelOrderConfirmation, Resource.CancelOrderConfirmation, InputHints.IgnoringInput);
                await innerDc.Context.SendActivityAsync(cancelMessage, cancellationToken);

                await conversationState.ClearStateAsync(innerDc.Context, cancellationToken);

                return(await innerDc.CancelAllDialogsAsync(cancellationToken));
            }

            return(null);
        }
        private async Task <DialogTurnResult> ProceedWithOrderingStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var result = await recognizer.RecognizeAsync(stepContext.Context, cancellationToken);

            var order = await conversationState.GetOrder(stepContext.Context);

            if (result.IsSpecifyOrderIntent)
            {
                order.MergeWith(result.ToOrder());
            }

            return(await stepContext.BeginDialogAsync(orderingDialog.Id, order, cancellationToken));
        }
        private async Task <DialogTurnResult> GetSausageKindAndSauceStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var result = await recognizer.RecognizeAsync(stepContext.Context, cancellationToken);

            if (!result.IsSpecifyOrderIntent)
            {
                var message = MessageFactory.Text(Resource.IDidNotUnderstandYou, Resource.IDidNotUnderstandYou, InputHints.IgnoringInput);
                await stepContext.Context.SendActivityAsync(message, cancellationToken);

                return(await stepContext.ReplaceDialogAsync(nameof(ChooseSausageKindAndSauceDialog), (Order)stepContext.Options, cancellationToken));
            }

            var order = await conversationState.GetOrder(stepContext.Context);

            order.MergeWith(result.ToOrder());

            if (!order.IsSausageKindAndSauceDefined)
            {
                return(await stepContext.ReplaceDialogAsync(nameof(ChooseSausageKindAndSauceDialog), order, cancellationToken));
            }

            return(await stepContext.EndDialogAsync(order, cancellationToken));
        }