コード例 #1
0
        protected async Task <DialogTurnResult> BeginChildDialogAsync(DialogContext dc, OnTurnState onTurnState)
        {
            var context = dc.Context;

            // Continue outstanding dialogs.
            var dialogTurnResult = await dc.ContinueDialogAsync();

            switch (onTurnState.Intent)
            {
            case Intents.FindItem:
                return(await dc.BeginDialogAsync(FindItemDialog.Name));

            case Intents.ShowCategories:
                return(await dc.BeginDialogAsync(ShowCategoriesDialog.Name));

            case Intents.AddItem:
                return(await dc.BeginDialogAsync(AddItemDialog.Name));

            case Intents.RemoveItem:
                return(await dc.BeginDialogAsync(RemoveItemDialog.Name));

            case Intents.Confirm:
                var customerState =
                    await _customerStateAccessor.GetAsync(context, () => new CustomerState());

                return(await dc.BeginDialogAsync(GetUserInfoDialog.Name));

            case Intents.ShowCart:
                return(await dc.BeginDialogAsync(ShowCartDialog.Name));

            case Intents.ShowOrders:
                return(await dc.BeginDialogAsync(ShowOrdersDialog.Name));

            case Intents.DetailItem:
                return(await dc.BeginDialogAsync(DetailItemDialog.Name));

            case Intents.SmallTalk:
                var inputMessage = context.Activity.Text;
                var result       = await _smallTalkService.GetSmalltalkAnswer(inputMessage);

                var customerState1 =
                    await _customerStateAccessor.GetAsync(context, () => new CustomerState());

                await context.SendActivityAsync(result);

                // If user have smalltalk 3 times, show help
                if (customerState1.SmallTalkCount == 3)
                {
                    customerState1.SmallTalkCount = 0;
                    await context.SendActivityAsync(Messages.SuggestHelp);
                }
                else
                {
                    customerState1.SmallTalkCount += 1;
                }

                await _customerStateAccessor.SetAsync(context, customerState1);

                break;

            case Intents.None:
                await context.SendActivityAsync(Messages.NotUnderstand);

                await context.SendActivityAsync(Messages.SuggestHelp);

                break;

            case Intents.Help:
                await context.SendActivityAsync(Messages.HelpMessage);

                break;

            case Intents.Cancel:
                await context.SendActivityAsync(Messages.InteruptionCancelNotConfirm);

                break;

            default:
                await context.SendActivityAsync(Messages.NotUnderstand);

                await context.SendActivityAsync(Messages.SuggestHelp);

                break;
            }

            return(dialogTurnResult);
        }
コード例 #2
0
ファイル: PimBot.cs プロジェクト: Mironiny/pimics-chatbot
        public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
        {
            // If user come from webchat bot should get user info
            if (turnContext.Activity.Name == "webchat/join")
            {
                await turnContext.SendActivityAsync(
                    $"{Messages.Greetings}, {turnContext.Activity.From.Id}. {Environment.NewLine} {Messages.IntroducingMessage}",
                    cancellationToken : cancellationToken);

                await turnContext.SendActivityAsync(Messages.HelpMessage, cancellationToken : cancellationToken);

                await turnContext.SendActivityAsync(Messages.WhatCanIDo, cancellationToken : cancellationToken);
            }

            // Classic reaction to message
            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                // Found intent from the input
                var luisResults = await _services.LuisServices[LuisConfiguration]
                                  .RecognizeAsync(turnContext, cancellationToken);
                var entities         = luisResults.Entities.ToString();
                var topScoringIntent = luisResults?.GetTopScoringIntent();
                var topIntent        = topScoringIntent.Value.intent;

                var onTurnState = new OnTurnState(topIntent, luisResults.Entities);

                await _onTurnAccessor.SetAsync(turnContext, onTurnState);

                // Create dialog context.
                var dc = await Dialogs.CreateContextAsync(turnContext);

                // Continue outstanding dialogs.
                await dc.ContinueDialogAsync();

                // Begin main dialog if no outstanding dialogs/ no one responded.
                if (!dc.Context.Responded)
                {
                    await dc.BeginDialogAsync(nameof(MainDispatcher));
                }
            }
            else if (turnContext.Activity.ChannelId == "emulator" && turnContext.Activity.Type == ActivityTypes.ConversationUpdate)
            {
                if (turnContext.Activity.MembersAdded != null)
                {
                    // Iterate over all new members added to the conversation
                    foreach (var member in turnContext.Activity.MembersAdded)
                    {
                        // Greet anyone that was not the target (recipient) of this message
                        // the 'bot' is the recipient for events from the channel,
                        // turnContext.Activity.MembersAdded == turnContext.Activity.Recipient.Id indicates the
                        // bot was added to the conversation.
                        if (member.Id != turnContext.Activity.Recipient.Id)
                        {
                            await turnContext.SendActivityAsync(
                                $"{Messages.Greetings}, {turnContext.Activity.From.Id}. {Environment.NewLine} {Messages.IntroducingMessage}",
                                cancellationToken : cancellationToken);

                            await turnContext.SendActivityAsync(Messages.HelpMessage, cancellationToken : cancellationToken);

                            await turnContext.SendActivityAsync(Messages.WhatCanIDo, cancellationToken : cancellationToken);
                        }
                    }
                }
            }

            await _conversationState.SaveChangesAsync(turnContext);

            await _userState.SaveChangesAsync(turnContext);
        }