public AdapterWithErrorHandler(BotFrameworkAuthentication auth, ILogger <IBotFrameworkHttpAdapter> logger, ConversationState conversationState = null) : base(auth, logger) { Dictionary <string, string> lgFilesPerLocale = new Dictionary <string, string>() { { "", Path.Combine(".", "Resources", "AdapterWithErrorHandler.lg") }, { "fr", Path.Combine(".", "Resources", "AdapterWithErrorHandler.fr-fr.lg") } }; _lgManager = new MultiLanguageLG(lgFilesPerLocale); OnTurnError = async(turnContext, exception) => { // Log any leaked exception from the application. logger.LogError($"Exception caught : {exception.Message}"); // Send a catch-all apology to the user. await turnContext.SendActivityAsync(ActivityFactory.FromObject(_lgManager.Generate("SomethingWentWrong", exception, turnContext.Activity.Locale))); if (conversationState != null) { try { // Delete the conversationState for the current conversation to prevent the // bot from getting stuck in a error-loop caused by being in a bad state. // ConversationState should be thought of as similar to "cookie-state" in a Web pages. await conversationState.DeleteAsync(turnContext); } catch (Exception e) { logger.LogError($"Exception caught on attempting to Delete ConversationState : {e.Message}"); } } }; }
private Activity InternalGenerateActivity(string templateName, object data, string locale) { var iLocale = locale == null ? "" : locale; if (TemplateEnginesPerLocale.ContainsKey(iLocale)) { return(ActivityFactory.FromObject(TemplateEnginesPerLocale[locale].Evaluate(templateName, data))); } var locales = new string[] { string.Empty }; if (!LangFallBackPolicy.TryGetValue(iLocale, out locales)) { if (!LangFallBackPolicy.TryGetValue(string.Empty, out locales)) { throw new Exception($"No supported language found for {iLocale}"); } } foreach (var fallBackLocale in locales) { if (TemplateEnginesPerLocale.ContainsKey(fallBackLocale)) { return(ActivityFactory.FromObject(TemplateEnginesPerLocale[fallBackLocale].Evaluate(templateName, data))); } } return(new Activity()); }
public AdapterWithErrorHandler(ICredentialProvider credentialProvider, ILogger <BotFrameworkHttpAdapter> logger, IStorage storage, UserState userState, ConversationState conversationState, IConfiguration configuration) : base(credentialProvider, logger: logger) { this.Use(new RegisterClassMiddleware <IConfiguration>(configuration)); this.UseStorage(storage); this.UseBotState(userState); this.UseBotState(conversationState); _lgFile = Templates.ParseFile(Path.Combine(".", "AdapterWithErrorHandler.lg")); OnTurnError = async(turnContext, exception) => { // Log any leaked exception from the application. logger.LogError($"Exception caught : {exception.Message}"); await turnContext.SendActivityAsync(ActivityFactory.FromObject(_lgFile.Evaluate("SomethingWentWrong", exception))); if (conversationState != null) { try { // Delete the conversationState for the current conversation to prevent the // bot from getting stuck in a error-loop caused by being in a bad state. // ConversationState should be thought of as similar to "cookie-state" in a Web pages. await conversationState.DeleteAsync(turnContext); } catch (Exception e) { logger.LogError($"Exception caught on attempting to Delete ConversationState : {e.Message}"); } } }; }
public AdapterWithErrorHandler(BotFrameworkAuthentication auth, ILogger <IBotFrameworkHttpAdapter> logger, ConversationState conversationState = null) : base(auth, logger) { // combine path for cross platform support string[] paths = { ".", "Resources", "AdapterWithErrorHandler.lg" }; string fullPath = Path.Combine(paths); _templates = Templates.ParseFile(fullPath); OnTurnError = async(turnContext, exception) => { // Log any leaked exception from the application. logger.LogError($"Exception caught : {exception.Message}"); // Send a catch-all apology to the user. await turnContext.SendActivityAsync(ActivityFactory.FromObject(_templates.Evaluate("SomethingWentWrong", exception))); if (conversationState != null) { try { // Delete the conversationState for the current conversation to prevent the // bot from getting stuck in a error-loop caused by being in a bad state. // ConversationState should be thought of as similar to "cookie-state" in a Web pages. await conversationState.DeleteAsync(turnContext); } catch (Exception e) { logger.LogError($"Exception caught on attempting to Delete ConversationState : {e.Message}"); } } }; }
/// <summary> /// Given the turn context bind to the data to create the object of type <see cref="Activity"/>. /// </summary> /// <param name="dialogContext">The <see cref="DialogContext"/> for the current turn of conversation.</param> /// <param name="data">Optional, data to bind to. If Null, then dc.State will be used.</param> /// <param name="cancellationToken">Optional, the <see cref="CancellationToken"/> for this task.</param> /// <returns>Instance of <see cref="Activity"/>.</returns> public virtual async Task <Activity> BindAsync(DialogContext dialogContext, object data = null, CancellationToken cancellationToken = default) { if (dialogContext == null) { throw new ArgumentNullException(nameof(dialogContext)); } if (data is CancellationToken) { throw new ArgumentException($"{nameof(data)} cannot be a cancellation token"); } if (!string.IsNullOrEmpty(this.Template)) { var languageGenerator = dialogContext.Services.Get <LanguageGenerator>(); if (languageGenerator != null) { var lgStringResult = await languageGenerator.GenerateAsync(dialogContext, this.Template, data ?? dialogContext.State, cancellationToken).ConfigureAwait(false); var result = ActivityFactory.FromObject(lgStringResult); return(result); } else { var message = Activity.CreateMessageActivity(); message.Text = this.Template; message.Speak = this.Template; return(message as Activity); } } return(null); }
protected override async Task OnMembersAddedAsync(IList <ChannelAccount> membersAdded, ITurnContext <IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { // Actions to include in the welcome card. These are passed to LG and are then included in the generated Welcome card. var actions = new { actions = new List <Object>() { new { title = "Get an overview", url = "https://docs.microsoft.com/en-us/azure/bot-service/?view=azure-bot-service-4.0" }, new { title = "Ask a question", url = "https://stackoverflow.com/questions/tagged/botframework" }, new { title = "Learn how to deploy", url = "https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-deploy-azure?view=azure-bot-service-4.0" } } }; foreach (var member in membersAdded) { // Greet anyone that was not the target (recipient) of this message. // To learn more about Adaptive Cards, see https://aka.ms/msbot-adaptivecards for more details. if (member.Id != turnContext.Activity.Recipient.Id) { await turnContext.SendActivityAsync(ActivityFactory.FromObject(_templates.Evaluate("WelcomeCard", actions))); } } }
public AdapterWithErrorHandler(ICredentialProvider credentialProvider, ILogger <BotFrameworkHttpAdapter> logger, IStorage storage, UserState userState, ConversationState conversationState, IConfiguration configuration) : base(credentialProvider) { this.UseStorage(storage); this.UseBotState(userState); this.UseBotState(conversationState); string[] paths = { ".", $"{nameof(AdapterWithErrorHandler)}.lg" }; string fullPath = Path.Combine(paths); _templates = Templates.ParseFile(fullPath); OnTurnError = async(turnContext, exception) => { logger.LogError($"Exception caught : {exception.Message}"); await turnContext.SendActivityAsync(ActivityFactory.FromObject(_templates.Evaluate("SomethingWentWrong", exception))); if (conversationState != null) { try { await conversationState.DeleteAsync(turnContext); } catch (Exception e) { logger.LogError($"Exception caught on attempting to Delete ConversationState : {e.Message}"); } } }; }
private static async Task <DialogTurnResult> NameStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { stepContext.Values["transport"] = ((FoundChoice)stepContext.Result).Value; return(await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions { Prompt = ActivityFactory.FromObject(_lgGenerator.Generate("AskForName", null, stepContext.Context.Activity.Locale)) }, cancellationToken)); }
public void TestAnimationCardTemplate() { dynamic data = new JObject(); var lgResult = templates.Evaluate("AnimationCardTemplate", data); var activity = ActivityFactory.FromObject(lgResult); AssertAnimationCardActivity(activity); }
public void TestCustomizedCardTemplate() { dynamic data = new JObject(); var lgResult = templates.Evaluate("customizedCardActionActivity", data); var activity = ActivityFactory.FromObject(lgResult); AssertCustomizedCardActivity(activity); }
private async Task <DialogTurnResult> ResolveAndSendQnAAnswer(DialogContext dc, System.Object options) { var exp1 = Expression.Parse("@answer").TryEvaluate(dc.State).value; var resVal = await this._deleteToDoDialog.Generator.GenerateAsync(dc, exp1.ToString(), dc.State); await dc.Context.SendActivityAsync(ActivityFactory.FromObject(resVal)); return(await dc.EndDialogAsync(options)); }
public virtual Activity GenerateActivity(string templateName, object data = null) { if (string.IsNullOrEmpty(templateName)) { throw new ArgumentNullException(nameof(templateName)); } return(ActivityFactory.FromObject(Generate(templateName, data, null))); }
public void TestNotSupportStructuredType() { // fallback to text activity var lgResult = templates.Evaluate("notSupport"); var activity = ActivityFactory.FromObject(lgResult); Assert.Equal(0, activity.Attachments.Count); Assert.Equal("{\"lgType\":\"Acti\",\"key\":\"value\"}", activity.Text.Replace("\r\n", string.Empty).Replace("\n", string.Empty).Replace(" ", string.Empty)); }
public void TestHandoffActivity() { dynamic data = new JObject(); data.text = "textContent"; var lgResult = templates.Evaluate("handoffActivity", data); var activity = ActivityFactory.FromObject(lgResult); AssertHandoffActivity(activity); }
public void TestAdaptivecardActivity() { dynamic data = new JObject(); data.adaptiveCardTitle = "test"; var lgResult = GetNormalStructureLGFile().Evaluate("adaptivecardActivity", data); var activity = ActivityFactory.FromObject(lgResult); AssertAdaptiveCardActivity(activity); }
public void TestAudioCardTemplate() { dynamic data = new JObject(); data.type = "audiocard"; var lgResult = GetNormalStructureLGFile().Evaluate("AudioCardTemplate", data); var activity = ActivityFactory.FromObject(lgResult); AssertAudioCardActivity(activity); }
public void TestActivityWithMultiStringSuggestionActions() { dynamic data = new JObject(); data.text = "textContent"; var lgResult = templates.Evaluate("activityWithMultiStringSuggestionActions", data); var activity = ActivityFactory.FromObject(lgResult); AssertActivityWithMultiStringSuggestionActions(activity); }
public void TestAdaptivecardActivityWithAttachmentStructure() { dynamic data = new JObject(); data.adaptiveCardTitle = "test"; var lgResult = templates.Evaluate("adaptivecardActivityWithAttachmentStructure", data); var activity = ActivityFactory.FromObject(lgResult); AssertAdaptiveCardActivity(activity); }
public void TestSuggestedActionsReference() { dynamic data = new JObject(); data.text = "textContent"; var lgResult = templates.Evaluate("SuggestedActionsReference", data); var activity = ActivityFactory.FromObject(lgResult); AssertSuggestedActionsReferenceActivity(activity); }
public void TestExternalAdaptiveCardActivity() { dynamic data = new JObject(); data.adaptiveCardTitle = "test"; var lgResult = templates.Evaluate("externalAdaptiveCardActivity", data); var activity = ActivityFactory.FromObject(lgResult); AssertAdaptiveCardActivity(activity); }
public void TestVideoCardTemplate() { dynamic data = new JObject(); data.type = "videocard"; var lgResult = templates.Evaluate("VideoCardTemplate", data); var activity = ActivityFactory.FromObject(lgResult); AssertVideoCardActivity(activity); }
public void TestHandoffActivity() { dynamic data = new JObject(); data.text = "textContent"; var lgResult = GetNormalStructureLGFile().Evaluate("handoffActivity", data); var activity = ActivityFactory.FromObject(lgResult); AssertHandoffActivity(activity); }
public void TestActivityWithMultiStructuredSuggestionActions() { dynamic data = new JObject(); data.text = "textContent"; var lgResult = GetNormalStructureLGFile().Evaluate("activityWithMultiStructuredSuggestionActions", data); var activity = ActivityFactory.FromObject(lgResult); AssertActivityWithMultiStructuredSuggestionActions(activity); }
public void TestActivityWithHeroCardAttachment() { dynamic data = new JObject(); data.title = "titleContent"; data.text = "textContent"; var lgResult = GetNormalStructureLGFile().Evaluate("activityWithHeroCardAttachment", data); var activity = ActivityFactory.FromObject(lgResult); AssertActivityWithHeroCardAttachment(activity); }
public void TestHerocardWithCardAction() { dynamic data = new JObject(); data.title = "titleContent"; data.text = "textContent"; var lgResult = templates.Evaluate("HerocardWithCardAction", data); var activity = ActivityFactory.FromObject(lgResult); AssertCardActionActivity(activity); }
public void TestHerocardWithCardAction() { dynamic data = new JObject(); data.title = "titleContent"; data.text = "textContent"; var lgResult = GetNormalStructureLGFile().Evaluate("HerocardWithCardAction", data).ToString(); var activity = ActivityFactory.FromObject(lgResult); AssertCardActionActivity(activity); }
public void TestSigninCardTemplate() { dynamic data = new JObject(); data.signinlabel = "Sign in"; data.url = "https://login.microsoftonline.com/"; var lgResult = templates.Evaluate("SigninCardTemplate", data); var activity = ActivityFactory.FromObject(lgResult); AssertSigninCardActivity(activity); }
public void TestMessageActivityAll() { dynamic data = new JObject(); data.title = "titleContent"; data.text = "textContent"; var lgResult = templates.Evaluate("messageActivityAll", data); var activity = ActivityFactory.FromObject(lgResult); AssertMessageActivityAll(activity); }
public void TestHerocardActivityWithAttachmentStructure() { dynamic data = new JObject(); data.title = "titleContent"; data.text = "textContent"; var lgResult = templates.Evaluate("activityWithMultiAttachments", data); var activity = ActivityFactory.FromObject(lgResult); AssertActivityWithMultiAttachments(activity); }
public void TestHerocardAttachment() { dynamic data = new JObject(); data.type = "imBack"; data.title = "taptitle"; data.value = "tapvalue"; var lgResult = templates.Evaluate("herocardAttachment", data); var activity = ActivityFactory.FromObject(lgResult); AssertActivityWithHeroCardAttachment(activity); }