// Runs on every turn of the conversation to check if the conversation should be interrupted. protected async Task <DialogTurnResult> InterruptDialogAsync(DialogContext innerDc, CancellationToken cancellationToken) { DialogTurnResult interrupted = null; var activity = innerDc.Context.Activity; if (activity.Type == ActivityTypes.Message && !string.IsNullOrEmpty(activity.Text)) { // Get connected LUIS result from turn state. var generalResult = innerDc.Context.TurnState.Get <General>(StateProperties.GeneralLuisResult); (var generalIntent, var generalScore) = generalResult.TopIntent(); if (generalScore > 0.5) { switch (generalIntent) { case General.Intent.Cancel: { var state = await _conversationStateAccessor.GetAsync(innerDc.Context, () => new RestaurantBookingState(), cancellationToken); state.Clear(); await innerDc.Context.SendActivityAsync(_localeTemplateManager.GenerateActivity(RestaurantBookingSharedResponses.CancellingMessage), cancellationToken); await innerDc.CancelAllDialogsAsync(cancellationToken); if (innerDc.Context.IsSkill()) { interrupted = await innerDc.EndDialogAsync(state.IsAction?new ActionResult { ActionSuccess = false } : null, cancellationToken); } else { interrupted = await innerDc.BeginDialogAsync(InitialDialogId, cancellationToken : cancellationToken); } break; } case General.Intent.Help: { await innerDc.Context.SendActivityAsync(_localeTemplateManager.GenerateActivity(RestaurantBookingMainResponses.HelpMessage), cancellationToken); await innerDc.RepromptDialogAsync(cancellationToken); interrupted = EndOfTurn; break; } } } } return(interrupted); }
private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception) { try { _telemetryClient.TrackException(exception); // Send a message to the user. await turnContext.SendActivityAsync(_templateManager.GenerateActivity(SharedResponses.ErrorMessage)); // Send a trace activity, which will be displayed in the Bot Framework Emulator. // Note: we return the entire exception in the value property to help the developer; // this should not be done in production. await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); } catch (Exception ex) { _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); } }
private async Task SendErrorMessageAsync(ITurnContext turnContext, Exception exception) { try { // Send a message to the user. CultureInfo.CurrentUICulture = new CultureInfo(turnContext.Activity.Locale ?? "en-us"); await turnContext.SendActivityAsync(_templateManager.GenerateActivity(PhoneSharedResponses.ErrorMessage)); await turnContext.SendActivityAsync(new Activity(type : ActivityTypes.Trace, text : $"Phone Skill Error: {exception.Message} | {exception.StackTrace}")); _telemetryClient.TrackException(exception); // Send a trace activity, which will be displayed in the Bot Framework Emulator. // Note: we return the entire exception in the value property to help the developer; // this should not be done in production. await turnContext.TraceActivityAsync("OnTurnError Trace", exception.ToString(), "https://www.botframework.com/schemas/error", "TurnError"); } catch (Exception ex) { _logger.LogError(ex, $"Exception caught in SendErrorMessageAsync : {ex}"); } }
protected override async Task OnMembersAddedAsync(IList <ChannelAccount> membersAdded, ITurnContext <IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { await turnContext.SendActivityAsync(_templateManager.GenerateActivity(MainResponses.WelcomeMessage), cancellationToken); await _dialog.RunAsync(turnContext, _dialogStateAccessor, cancellationToken); }
public static Activity GenerateActivity(this LocaleTemplateManager manager, string templateId, IDictionary <string, object> tokens = null) { return(manager.GenerateActivity(templateId, Array.Empty <Card>(), tokens)); }
public static Activity GenerateActivity(this LocaleTemplateManager manager, string templateId, Card card, IDictionary <string, object> tokens = null) { return(manager.GenerateActivity(templateId, new Card[] { card }, tokens)); }
public static Activity GenerateActivity(this LocaleTemplateManager manager, IEnumerable <Card> cards, string attachmentLayout = "carousel") { return(manager.GenerateActivity(CardsOnly, cards, null, attachmentLayout)); }
public static Activity GenerateActivity(this LocaleTemplateManager manager, Card card) { return(manager.GenerateActivity(new Card[] { card })); }
// Runs on every turn of the conversation to check if the conversation should be interrupted. protected async Task <DialogTurnResult> InterruptDialogAsync(DialogContext innerDc, CancellationToken cancellationToken) { DialogTurnResult interrupted = null; var activity = innerDc.Context.Activity; if (activity.Type == ActivityTypes.Message && !string.IsNullOrEmpty(activity.Text)) { // Get connected LUIS result from turn state. var generalResult = innerDc.Context.TurnState.Get <GeneralLuis>(StateProperties.GeneralLuisResult); (var generalIntent, var generalScore) = generalResult.TopIntent(); if (generalScore > 0.5) { switch (generalIntent) { case GeneralLuis.Intent.Cancel: { await innerDc.Context.SendActivityAsync(_templateManager.GenerateActivity(MainResponses.CancelMessage), cancellationToken); await innerDc.CancelAllDialogsAsync(cancellationToken); if (innerDc.Context.IsSkill()) { var state = await _stateAccessor.GetAsync(innerDc.Context, () => new HospitalitySkillState(), cancellationToken); interrupted = await innerDc.EndDialogAsync(state.IsAction?new ActionResult(false) : null, cancellationToken : cancellationToken); } else { interrupted = await innerDc.BeginDialogAsync(InitialDialogId, cancellationToken : cancellationToken); } break; } case GeneralLuis.Intent.Help: { await innerDc.Context.SendActivityAsync(_templateManager.GenerateActivity(MainResponses.HelpMessage), cancellationToken); await innerDc.RepromptDialogAsync(cancellationToken); interrupted = EndOfTurn; break; } case GeneralLuis.Intent.Logout: { // Log user out of all accounts. await LogUserOutAsync(innerDc, cancellationToken); await innerDc.Context.SendActivityAsync(_templateManager.GenerateActivity(MainResponses.LogOut), cancellationToken); await innerDc.CancelAllDialogsAsync(cancellationToken); if (innerDc.Context.IsSkill()) { var state = await _stateAccessor.GetAsync(innerDc.Context, () => new HospitalitySkillState(), cancellationToken); interrupted = await innerDc.EndDialogAsync(state.IsAction?new ActionResult(false) : null, cancellationToken : cancellationToken); } else { interrupted = await innerDc.BeginDialogAsync(InitialDialogId, cancellationToken : cancellationToken); } break; } } } } return(interrupted); }
// Runs on every turn of the conversation to check if the conversation should be interrupted. protected async Task <DialogTurnResult> InterruptDialogAsync(DialogContext innerDc, CancellationToken cancellationToken) { DialogTurnResult interrupted = null; var activity = innerDc.Context.Activity; if (activity.Type == ActivityTypes.Message && !string.IsNullOrEmpty(activity.Text)) { // Get connected LUIS result from turn state. // Get cognitive models for the current locale. var localizedServices = _services.GetCognitiveModels(); // Run LUIS recognition on General model and store result in turn state. localizedServices.LuisServices.TryGetValue("General", out var generalLuisService); if (generalLuisService == null) { throw new Exception("The general LUIS Model could not be found in your Bot Services configuration."); } var generalResult = await generalLuisService.RecognizeAsync <General>(innerDc.Context, cancellationToken); (var generalIntent, var generalScore) = generalResult.TopIntent(); if (generalScore > 0.5) { switch (generalIntent) { case General.Intent.Cancel: { await innerDc.Context.SendActivityAsync(_templateManager.GenerateActivity(MainResponses.CancelMessage), cancellationToken); await innerDc.CancelAllDialogsAsync(cancellationToken); if (innerDc.Context.IsSkill()) { var state = await _stateAccessor.GetAsync(innerDc.Context, () => new SkillState(), cancellationToken : cancellationToken); interrupted = await innerDc.EndDialogAsync(state.IsAction?new ActionResult(false) : null, cancellationToken : cancellationToken); } else { interrupted = await innerDc.BeginDialogAsync(InitialDialogId, cancellationToken : cancellationToken); } break; } case General.Intent.Help: { await innerDc.Context.SendActivityAsync(_templateManager.GenerateActivity(MainResponses.HelpMessage), cancellationToken); await innerDc.RepromptDialogAsync(cancellationToken); interrupted = EndOfTurn; break; } } } } return(interrupted); }