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); }
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); }