public async Task HandleUnrecognizedIntent(IDialogContext context, LuisResult result) { var userData = context.GetUserData(); var detectedLanguage = await MessageTranslator.IdentifyLangAsync(result.Query); if (!detectedLanguage.Equals(userData.NativeLanguageIsoCode) && !detectedLanguage.Equals(MessageTranslator.DEFAULT_LANGUAGE)) { context.UserData.SetValue(Constants.Shared.UserLanguageCodeKey, detectedLanguage); await SwitchLanguage(context, userData, detectedLanguage); } else { await context.PostTranslatedAsync(BotPersonality.BotResponseUnrecognizedIntent); await EngageWithUser(context); } }
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> result) { var userText = context.Activity.From.Name; try { userText = (await result).Text; } catch (Exception) { // Swallow exception for the demo purpose // TODO log the exception } string detectedLanguageIsoCode = await MessageTranslator.IdentifyLangAsync(userText); var userData = _userDataRepository.GetUserData(context.Activity.From.Id); if (userData == null) { userData = new UserData(); userData.UserId = context.Activity.From.Id; userData.NativeLanguageIsoCode = detectedLanguageIsoCode; } _userDataRepository.UpdateUserData(userData); if (MessageTranslator.DEFAULT_LANGUAGE.Equals(detectedLanguageIsoCode)) { await context.PostAsync(BotPersonality.UserNameQuestion); // detected it's english language context.Wait(this.UserNameReceivedAsync); } else { // detected user language CultureInfo[] allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures); CultureInfo detectedCulture = allCultures .Where(cultureInfo => (detectedLanguageIsoCode.Contains(cultureInfo.TwoLetterISOLanguageName))) .FirstOrDefault(); string detectedLanguageName = CultureInfo.GetCultureInfo(MessageTranslator.DEFAULT_LANGUAGE).DisplayName; if (detectedCulture != null) { detectedLanguageName = detectedCulture.DisplayName; } string translatedSwitchQuestion = await MessageTranslator.TranslateTextAsync($"Do you want to switch to {detectedLanguageName}", detectedLanguageIsoCode); string translatedDontUnderstand = await MessageTranslator.TranslateTextAsync(Shared.DoNotUnderstand, detectedLanguageIsoCode); PromptDialog.Choice( context, this.AfterChoosingLanguageSwitch, await MessageTranslator.TranslatedChoices(YesNoChoices, detectedLanguageIsoCode), translatedSwitchQuestion, translatedDontUnderstand, attempts: Shared.MaxAttempt ); } }