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);
            }
        }
Ejemplo n.º 2
0
        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
                    );
            }
        }