protected override async Task OnStartAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken)) { var view = new MainResponses(); await view.ReplyWith(innerDc.Context, MainResponses.Intro); var onboardingAccessor = _userState.CreateProperty <OnboardingState>(nameof(OnboardingState)); var onboardingState = await onboardingAccessor.GetAsync(innerDc.Context, () => new OnboardingState()); if (string.IsNullOrEmpty(onboardingState.Name)) { // This is the first time the user is interacting with the bot, so gather onboarding information. await innerDc.BeginDialogAsync(nameof(OnboardingDialog)); } }
private async Task <InterruptionAction> OnCancel(DialogContext dc) { if (dc.ActiveDialog != null && dc.ActiveDialog.Id != nameof(CancelDialog)) { // Don't start restart cancel dialog await dc.BeginDialogAsync(nameof(CancelDialog)); // Signal that the dialog is waiting on user response var view1 = new MainResponses(); await view1.ReplyWith(dc.Context, MainResponses.ResponseIds.MainMenuGreeting); return(InterruptionAction.StartedDialog); } var view = new CancelResponses(); await view.ReplyWith(dc.Context, CancelResponses.ResponseIds.NothingToCancelMessage); return(InterruptionAction.StartedDialog); }
protected override async Task OnStartAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken)) { // send a greeting if we're in local mode await _responder.ReplyWith(dc.Context, MainResponses.Intro); }
protected override async Task RouteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken)) { // Check dispatch result var dispatchResult = await _services.DispatchRecognizer.RecognizeAsync <Dispatch>(dc, true, CancellationToken.None); var intent = dispatchResult.TopIntent().intent; if (intent == Dispatch.Intent.l_general) { // If dispatch result is general luis model _services.LuisServices.TryGetValue("general", out var luisService); if (luisService == null) { throw new Exception("The specified LUIS Model could not be found in your Bot Services configuration."); } else { var result = await luisService.RecognizeAsync <General>(dc, true, CancellationToken.None); var generalIntent = result?.TopIntent().intent; // switch on general intents switch (generalIntent) { case General.Intent.Cancel: { // send cancelled response await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Cancelled); // Cancel any active dialogs on the stack await dc.CancelAllDialogsAsync(); break; } case General.Intent.Escalate: { // start escalate dialog await dc.BeginDialogAsync(nameof(EscalateDialog)); break; } case General.Intent.Help: { // send help response await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Help); break; } case General.Intent.None: default: { // No intent was identified, send confused message await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Confused); break; } } } } else if (intent == Dispatch.Intent.q_faq) { _services.QnAServices.TryGetValue("faq", out var qnaService); if (qnaService == null) { throw new Exception("The specified QnA Maker Service could not be found in your Bot Services configuration."); } else { var answers = await qnaService.GetAnswersAsync(dc.Context); if (answers != null && answers.Count() > 0) { await dc.Context.SendActivityAsync(answers[0].Answer); } } } else if (intent == Dispatch.Intent.q_chitchat) { _services.QnAServices.TryGetValue("chitchat", out var qnaService); if (qnaService == null) { throw new Exception("The specified QnA Maker Service could not be found in your Bot Services configuration."); } else { var answers = await qnaService.GetAnswersAsync(dc.Context); if (answers != null && answers.Count() > 0) { await dc.Context.SendActivityAsync(answers[0].Answer); } } } else { // If dispatch intent does not map to configured models, send "confused" response. await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Confused); } }
protected override async Task OnStartAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken)) { var view = new MainResponses(); await view.ReplyWith(dc.Context, MainResponses.ResponseIds.Intro); }
protected override async Task RouteAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken)) { // Get cognitive models for locale var locale = CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; var cognitiveModels = _services.CognitiveModelSets[locale]; // Check dispatch result var dispatchResult = await cognitiveModels.DispatchService.RecognizeAsync <DispatchLuis>(dc.Context, CancellationToken.None); var intent = dispatchResult.TopIntent().intent; // Identify if the dispatch intent matches any Action within a Skill if so, we pass to the appropriate SkillDialog to hand-off var identifiedSkill = SkillRouter.IsSkill(_settings.Skills, intent.ToString()); if (identifiedSkill != null) { // We have identiifed a skill so initialize the skill connection with the target skill await dc.BeginDialogAsync(identifiedSkill.Id); // Pass the activity we have var result = await dc.ContinueDialogAsync(); if (result.Status == DialogTurnStatus.Complete) { await CompleteAsync(dc); } } else if (intent == DispatchLuis.Intent.l_general) { // If dispatch result is general luis model cognitiveModels.LuisServices.TryGetValue("general", out var luisService); if (luisService == null) { throw new Exception("The general LUIS Model could not be found in your Bot Services configuration."); } else { var result = await luisService.RecognizeAsync <GeneralLuis>(dc.Context, CancellationToken.None); var generalIntent = result?.TopIntent().intent; // switch on general intents switch (generalIntent) { case GeneralLuis.Intent.Escalate: { // start escalate dialog await dc.BeginDialogAsync(nameof(EscalateDialog)); break; } case GeneralLuis.Intent.None: default: { // No intent was identified, send confused message await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Confused); break; } } } } else if (intent == DispatchLuis.Intent.q_faq) { cognitiveModels.QnAServices.TryGetValue("faq", out var qnaService); if (qnaService == null) { throw new Exception("The specified QnA Maker Service could not be found in your Bot Services configuration."); } else { var answers = await qnaService.GetAnswersAsync(dc.Context, null, null); if (answers != null && answers.Count() > 0) { await dc.Context.SendActivityAsync(answers[0].Answer, speak : answers[0].Answer); } else { await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Confused); } } } else if (intent == DispatchLuis.Intent.q_chitchat) { cognitiveModels.QnAServices.TryGetValue("chitchat", out var qnaService); if (qnaService == null) { throw new Exception("The specified QnA Maker Service could not be found in your Bot Services configuration."); } else { var answers = await qnaService.GetAnswersAsync(dc.Context, null, null); if (answers != null && answers.Count() > 0) { await dc.Context.SendActivityAsync(answers[0].Answer, speak : answers[0].Answer); } else { await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Confused); } } } else { // If dispatch intent does not map to configured models, send "confused" response. await _responder.ReplyWith(dc.Context, MainResponses.ResponseIds.Confused); } }