Example #1
0
        public async Task OnTurn(ITurnContext turnContext)
        {
            // Get the current ActiveTopic from my persisted conversation state
            var context = new AlarmBotContext(turnContext);

            // Trace top intent
            // await turnContext.SendActivity(context.Activity.CreateTrace("conversationState", value: context.ConversationState));
            await turnContext.TraceActivity("context.ConversationState", value : context.ConversationState);

            var handled = false;

            // if we don't have an active topic yet
            if (context.ConversationState.ActiveTopic == null)
            {
                // use the default topic
                context.ConversationState.ActiveTopic = new DefaultTopic();
                handled = await context.ConversationState.ActiveTopic.StartTopic(context);
            }
            else
            {
                // we do have an active topic, so call it
                handled = await context.ConversationState.ActiveTopic.ContinueTopic(context);
            }

            // if activeTopic's result is false and the activeTopic is NOT already the default topic
            if (handled == false && !(context.ConversationState.ActiveTopic is DefaultTopic))
            {
                // Use DefaultTopic as the active topic
                context.ConversationState.ActiveTopic = new DefaultTopic();
                await context.ConversationState.ActiveTopic.ResumeTopic(context);
            }
        }
        public async Task OnTurn(ITurnContext context)
        {
            switch (context.Activity.Type)
            {
            // On "conversationUpdate"-type activities this bot will send a greeting message to users joining the conversation.
            case ActivityTypes.ConversationUpdate:
                var newUserName = context.Activity.MembersAdded.FirstOrDefault()?.Name;
                if (!string.IsNullOrWhiteSpace(newUserName) && newUserName != "Bot")
                {
                    await context.SendActivity($"Hallo {newUserName}, ich bin ein Bot. Zu welchem Thema kann ich weiterhelfen?");
                }

                break;

            case ActivityTypes.Message:

                var userInputGerman = context.Activity.Text;

                // Use translation for each message
                // Detect user language
                userNativeLanguage = await translatorClient.Detect(context.Activity.Text);

                // Just for tracing output
                var translationInfoOutput = await translatorClient.Translate($"Test der Übersetzung\nSprache der Eingabe: ", "de", userNativeLanguage);

                // Just translate if the text is in a laguage other than German
                if (!userNativeLanguage.Equals("de"))
                {
                    userInputGerman = await translatorClient.Translate(context.Activity.Text, userNativeLanguage, "de");

                    // Add tracing output
                    translationInfoOutput += $"{userNativeLanguage}\n";
                    translationInfoOutput += await translatorClient.Translate("Übersetzung der Eingabe", "de", userNativeLanguage);

                    translationInfoOutput += $": {userInputGerman}";
                }
                else
                {
                    translationInfoOutput += userNativeLanguage;
                }

                // Trace language and possible translation for debugging
                await context.TraceActivity(translationInfoOutput);

                // LUIS Start
                var(intents, entities) = await RecognizeAsync(botLUISModel, userInputGerman);

                var topIntent = intents.FirstOrDefault();
                switch ((topIntent != null) ? topIntent : null)
                {
                case null:
                    await context.SendActivity(await translatorClient.Translate("Ich konnte dich leider nicht verstehen.", "de", userNativeLanguage));

                    break;

                case "None":
                    await context.SendActivity(await translatorClient.Translate("Es tut mir leid, aber dabei kann ich leider nicht helfen.", "de", userNativeLanguage));

                    break;

                case "Help":
                    await context.SendActivity(await translatorClient.Translate("Ich kann gerne versuchen zu helfen.", "de", userNativeLanguage));

                    break;

                case "Weather":
                    await context.SendActivity(await translatorClient.Translate("Das Wetter ist großartig. Zumindest in meinem Rechenzentrum.", "de", userNativeLanguage));

                    break;

                case "TechnicalQuestion":
                    await askQnAService(context, userInputGerman);
                    await useAzureSearch(context);

                    break;

                case "Greeting":
                    await context.SendActivity(await translatorClient.Translate("Wie kann ich dir weiterhelfen?", "de", userNativeLanguage));

                    break;

                default:
                    // Received an intent we didn't expect, so send its name and score for debugging.
                    await context.SendActivity(await translatorClient.Translate($"War das dein Anliegen?", "de", userNativeLanguage) + $" Intent: {topIntent}");

                    break;
                }
                // LUIS End


                break;
            }
        }