예제 #1
0
        public async override Task <SpeechletResponse> OnIntentAsync(IntentRequest request, Session session)
        {
            // Get intent from the request object.
            AlexaSkillsKit.Slu.Intent intent = request.Intent;
            string intentName = (intent != null) ? intent.Name : null;

            // Get user phrase
            var userPhrase = string.Empty;

            if (request != null)
            {
                if (request.Intent.Name == Helpers.Constants.Intents.AmazonHelpIntent)
                {
                    userPhrase = Helpers.Constants.Messages.Help;
                }
                else
                {
                    AlexaSkillsKit.Slu.Slot slotValue;
                    if (request.Intent.Slots.TryGetValue(Constants.Slots.Phrase, out slotValue))
                    {
                        userPhrase = slotValue.Value;
                    }
                }
            }

            EnsureServiceCreated(session.User.Id);

            // Ensure conversation is already started
            if (!_botFrameworkService.IsConversationStarted)
            {
                if (!await _botFrameworkService.StartConversationAsync())
                {
                    return(BuildSpeechletResponse(intent.Name, Constants.Messages.ConversationFailed, false));
                }
            }

            // Send activity and receive response
            var shouldEndSession = false;
            var response         = string.Empty;
            var success          = await _botFrameworkService.SendActivityAsync(userPhrase);

            if (success)
            {
                var directLineActivity = (await _botFrameworkService.ReceiveActivityAsync()).First();
                shouldEndSession = directLineActivity.EndConversation;
                if (shouldEndSession)
                {
                    await _botFrameworkService.EndConversationAsync();
                }
                response = directLineActivity.Message;
            }
            else
            {
                response = Constants.Messages.ActivityFailed;
            }

            return(BuildSpeechletResponse(intent.Name, response, shouldEndSession));
        }
예제 #2
0
        public override SpeechletResponse OnIntent(IntentRequest request, Session session)
        {
            AlexaSkillsKit.Slu.Intent intent = request.Intent;

            string intentName = (intent != null) ? intent.Name : null;

            switch (intentName)
            {
            case "Exit":
                return(BuildSpeechletResponse("Peter Ludwig", "Dann machs gut", true, null, request, session));

            case "PeterWhoLove":
                return(BuildSpeechletResponse("Peter Ludwig", "Natürlich Caro, die schönste und tollste Frau auf der ganzen Welt", true, null, request, session));

            case "PeterWhenMarried":
                return(BuildSpeechletResponse("Peter Ludwig", "Ich habe am 16.08.2016 geheiratet. Das war der schönste Tag in meinem Leben.", true, null, request, session));

            case "SkillStatus":
                string skillStatus = "";
                using (AlexaSkillEntities db = new AlexaSkillEntities())
                {
                    List <Context.Skill> skills = db.Skills.ToList();
                    skillStatus = "Ich habe aktuell " + skills.Count() + " Skills.,,,,,";

                    List <Context.RequestLog> logs = db.RequestLogs.ToList();
                    skillStatus = skillStatus + "Alle Skills zusammen, wurden insgesamt, " + logs.Count() + " mal, von " + logs.Select(x => x.UserId).Distinct().Count() + " verschiedenen User, aufgerufen., Nun zu den einzelnen Skills.,,,,,";

                    foreach (Context.Skill skill in skills)
                    {
                        List <Context.RequestLog> skillLog = logs.Where(x => x.ApplicationId == skill.ApplicationID).ToList();

                        skillStatus = skillStatus + " Der Skill " + skill.Name + " wurde insgesamt " + skillLog.Count() + " mal, von " + skillLog.Select(x => x.UserId).Distinct().Count() + " verschiedenen Usern, aufgerufen.,,,,,";
                    }
                }
                return(BuildSpeechletResponse("Peter Ludwig", skillStatus, true, null, request, session));
            }

            return(BuildSpeechletResponse("Peter Ludwig", "Ich weis nicht was du meinst.", true, null, request, session));
        }
예제 #3
0
        public override SpeechletResponse OnIntent(IntentRequest request, Session session)
        {
            string speechOutput = null;

            AlexaSkillsKit.Slu.Intent intent = request.Intent;

            string intentName = (intent != null) ? intent.Name : null;

            switch (intentName)
            {
            case "GetTemperature":
                string meatSearchTerm = request.Intent.Slots.First().Value.Value;
                if (String.IsNullOrWhiteSpace(meatSearchTerm))
                {
                    return(BuildSpeechletResponse("Kerntemperaturen", "Das habe ich leider nicht verstanden", true, null, request, session));
                }

                switch (meatSearchTerm.ToLower())
                {
                case "stopp":
                case "abbrechen":
                    return(BuildSpeechletResponse("Kerntemperaturen", "", true, null, request, session));
                }

                switch (meatSearchTerm.ToLower())
                {
                case "hilfe":
                    return(BuildSpeechletResponse("Kerntemperaturen", "Du kannst hier nach Kerntemperaturen für Fleisch und Fisch fragen, sage jetzt z.B. Rinderfilet", false, null, request, session));
                }

                using (var db = new AlexaSkillEntities())
                {
                    Meat   meat = null;
                    string sessionIntentParam = "";
                    if (session.Attributes.ContainsKey("sessionIntentParam"))
                    {
                        sessionIntentParam = session.Attributes["sessionIntentParam"];
                    }

                    meat = db.Meats.FirstOrDefault(x => x.Name == sessionIntentParam + meatSearchTerm);

                    if (meat == null)
                    {
                        meat = db.Meats.FirstOrDefault(x => x.Name == meatSearchTerm + sessionIntentParam);
                    }

                    if (meat == null)
                    {
                        meat = db.Meats.FirstOrDefault(x => x.Name == meatSearchTerm);
                    }
                    if (meat == null)
                    {
                        foreach (string searchterm in meatSearchTerm.Split(' '))
                        {
                            meat = db.Meats.FirstOrDefault(x => x.Name == searchterm);
                            if (meat != null)
                            {
                                continue;
                            }
                        }
                    }

                    if (meat == null)
                    {
                        return(BuildSpeechletResponse("Kerntemperaturen", "Für " + meatSearchTerm + " habe ich leider keine Informationen", true, null, request, session));
                    }

                    if (meat.AnswerId != null)
                    {
                        string sessionIntentParamValue = meatSearchTerm;

                        if (!String.IsNullOrEmpty(meat.Answer.SessionTerm))
                        {
                            sessionIntentParamValue = meat.Answer.SessionTerm;
                        }

                        if (session.Attributes.ContainsKey("sessionIntentParam"))
                        {
                            session.Attributes["sessionIntentParam"] = sessionIntentParamValue;
                        }
                        else
                        {
                            session.Attributes.Add("sessionIntentParam", sessionIntentParamValue);
                        }
                        return(BuildSpeechletResponse("Kerntemperaturen", meat.Answer.Answert, meat.Answer.ShouldEndSession, null, request, session));
                    }

                    if (meat.CoreTemperatureId != null)
                    {
                        string delimiter          = "";
                        string termperatureResult = "";

                        if (meat.CoreTemperature.DefaultDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + meat.CoreTemperature.DefaultDegree + " Grad";
                            delimiter          = ", ";
                        }

                        if (meat.CoreTemperature.DefaultMinDegree != null && meat.CoreTemperature.DefaultMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " zwischen " + meat.CoreTemperature.DefaultMinDegree + " und " + meat.CoreTemperature.DefaultMaxDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.DefaultMinDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " ab " + meat.CoreTemperature.DefaultMinDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.DefaultMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " bis " + meat.CoreTemperature.DefaultMaxDegree + " Grad";
                            delimiter          = ", ";
                        }

                        if (meat.CoreTemperature.RareDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Blutig, " + meat.CoreTemperature.RareDegree + " Grad";
                            delimiter          = ", ";
                        }

                        if (meat.CoreTemperature.RareMinDegree != null && meat.CoreTemperature.RareMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Blutig, zwischen " + meat.CoreTemperature.RareMinDegree + " und " + meat.CoreTemperature.RareMaxDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.RareMinDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Blutig, ab " + meat.CoreTemperature.RareMinDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.RareMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Blutig, bis " + meat.CoreTemperature.RareMaxDegree + " Grad";
                            delimiter          = ", ";
                        }

                        if (meat.CoreTemperature.MediumDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Medium, " + meat.CoreTemperature.MediumDegree + " Grad";
                            delimiter          = ", ";
                        }

                        if (meat.CoreTemperature.MediumMinDegree != null && meat.CoreTemperature.MediumMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Medium, zwischen " + meat.CoreTemperature.MediumMinDegree + " und " + meat.CoreTemperature.MediumMaxDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.MediumMinDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Medium, ab " + meat.CoreTemperature.MediumMinDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.MediumMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Medium, bis " + meat.CoreTemperature.MediumMaxDegree + " Grad";
                            delimiter          = ", ";
                        }

                        if (meat.CoreTemperature.DoneDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Durch, " + meat.CoreTemperature.DoneDegree + " Grad";
                            delimiter          = ", ";
                        }

                        if (meat.CoreTemperature.DoneMinDegree != null && meat.CoreTemperature.DoneMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Durch, zwischen " + meat.CoreTemperature.DoneMinDegree + " und " + meat.CoreTemperature.DoneMaxDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.DoneMinDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Durch, ab " + meat.CoreTemperature.DoneMinDegree + " Grad";
                            delimiter          = ", ";
                        }
                        else if (meat.CoreTemperature.DoneMaxDegree != null)
                        {
                            termperatureResult = termperatureResult + delimiter + " für Durch, bis " + meat.CoreTemperature.DoneMaxDegree + " Grad";
                            delimiter          = ", ";
                        }


                        return(BuildSpeechletResponse("Kerntemperaturen", "Die Kerntemperatur für " + meat.Name + " beträgt " + termperatureResult, true, null, request, session));
                    }


                    break;
                }
            }

            return(BuildSpeechletResponse(intent.Name, speechOutput, true, null, request, session));
        }