public dynamic Alexa([FromBody] SkillRequest request)
        {
            if (request.Context.System.ApiAccessToken == null)
            {
                return(new BadRequestResult());
            }

            var response    = AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Error, FehlerTypen.FehlerAnfrage.ToDescription(), "", null, DateTime.Now, null);
            var requestType = request.GetRequestType();

            if (requestType == typeof(LaunchRequest))
            {
                response = LaunchRequestHandler(request);
            }

            else if (requestType == typeof(IntentRequest))
            {
                response = IntentRequestHandler(request);
            }

            else if (requestType == typeof(SessionEndedRequest))
            {
                response = SessionEndedRequestHandler(request);
            }

            return(response);
        }
        // ##############################################################################################################
        /// <summary>
        /// Gibt die richtige Antwort auf eine Anfrage vom Typ SpeiseplanKommando
        /// </summary>
        /// <param name="anfrage">Enthält die Anfrage vom Amazon Alexa Server vom Typ SpeiseplanKommando</param>
        /// <returns></returns>
        private SkillResponse SpeisePlanKommando(SkillRequest anfrage)
        {
            var tag      = anfrage.GetDateTime(SlotValues.Tag.ToString());
            var kw       = DateTime.Now.GetWeekOfYear();
            var year     = DateTime.Now.Year;
            var numberKW = DateTime.Now.GetNumberOfWeeks();

            if (tag == null)
            {
                tag = DateTime.Now;
            }
            if (tag.Value.DayOfWeek < DateTime.Now.DayOfWeek)
            {
                kw++;
            }
            if (kw > numberKW)
            {
                kw = 1;
                year++;
            }

            var speisePlan = GetSpeisePlaene(kw, year).Result;

            if (speisePlan != null)
            {
                return(SpeisePlanAntwortHelfer.GetSpeisePlanResponse(anfrage, speisePlan, tag));
            }
            else
            {
                return(AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Error, FehlerTypen.NoSpeisePlan.ToDescription(), "", null, tag.Value.Date, false));
            }
        }
        // ##############################################################################################################
        /// <summary>
        /// Entscheidet welche Art des Kommandos gesprochen wurde
        /// </summary>
        /// <param name="anfrage">Enthält die Anfrage vom Amazon Alexa Server vom Typ Kommando</param>
        /// <returns></returns>
        private SkillResponse KommandoVerwalter(SkillRequest anfrage)
        {
            var antwort       = AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Error, FehlerTypen.FehlerAnfrage.ToDescription(), "", null, DateTime.Now, false);
            var intentRequest = (IntentRequest)anfrage.Request;

            if (intentRequest.Intent.Name.Equals("SpeisePlanKommando"))
            {
                antwort = SpeisePlanKommando(anfrage);
            }
            else if (intentRequest.Intent.Name.Equals("TagUndKategorieKommando"))
            {
                antwort = TagUndKategorieKommando(anfrage);
            }
            else if (intentRequest.Intent.Name.Equals("WocheNachKategorieKommando"))
            {
                antwort = WocheNachKategorieKommando(anfrage);
            }
            else if (intentRequest.Intent.Name.Equals("PreisKommando"))
            {
                antwort = PreisIntent(anfrage);
            }
            else if (intentRequest.Intent.Name.Equals("AMAZON.CancelIntent"))
            {
                antwort = SitzungBeendenVerwalter(anfrage);
            }
            else if (intentRequest.Intent.Name.Equals("AMAZON.StopIntent"))
            {
                antwort = AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Stop, SkillTypen.Stop.ToDescription(), "", null, DateTime.Now, false);
            }

            return(antwort);
        }
        // ##############################################################################################################
        /// <summary>
        /// Enthält die Antwort des Alexa Skills welche beim Starten des Skills gegeben wird
        /// </summary>
        /// <param name="anfrage">Enthält die Anfrage vom Amazon Alexa Server vom Typ Start</param>
        /// <returns></returns>
        private SkillResponse StartVerwalter(SkillRequest anfrage)
        {
            string text   = "Herzlich Willkommen!";
            string title  = "Connext Campus";
            string speech = "Willkommen beim Connext Campus. Was kann ich für Sie tun?";

            return(AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Willkommen, text, title, speech, DateTime.Now, false));
        }
        private SkillResponse IntentRequestHandler(SkillRequest request)
        {
            var response      = AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Error, FehlerTypen.FehlerAnfrage.ToDescription(), "", null, DateTime.Now, null);
            var intentRequest = (IntentRequest)request.Request;

            if (intentRequest.Intent.Name.Equals("FarbeMischenIntent"))
            {
                response = FarbeMischenIntent(request);
            }

            return(response);
        }
        // ##############################################################################################################
        /// <summary>
        ///
        /// </summary>
        /// <param name="anfrage">Enthält die Anfrage vom Amazon Alexa Server</param>
        /// <returns></returns>
        private SkillResponse TagUndKategorieKommando(SkillRequest anfrage)
        {
            var intentRequest = (IntentRequest)anfrage.Request;

            if (intentRequest.DialogState.Equals("STARTED"))
            {
                return(ResponseBuilder.DialogDelegate(anfrage.Session, intentRequest.Intent));
            }
            else if (!intentRequest.DialogState.Equals("COMPLETED"))
            {
                return(ResponseBuilder.DialogDelegate(anfrage.Session));
            }
            else
            {
                var numberKW  = DateTime.Now.GetNumberOfWeeks();
                var kw        = DateTime.Now.GetWeekOfYear();
                var year      = DateTime.Now.Year;
                var kategorie = anfrage.GetSlotValueInt(SlotValues.Kategorie.ToString(), defaultValue);
                var tag       = anfrage.GetDateTime(SlotValues.Tag.ToString());

                if (tag == null)
                {
                    tag = DateTime.Now;
                }
                if (tag.Value.DayOfWeek < DateTime.Now.DayOfWeek)
                {
                    kw++;
                }
                if (kw > numberKW)
                {
                    kw = 1;
                    year++;
                }

                var speisePlan = GetSpeisePlaene(kw, year).Result;
                if (kategorie != defaultValue)
                {
                    return(EssenDetailsResponseHelper.GetEssenDetailsResponse(anfrage, speisePlan, kategorie, tag, 0));
                }
                else
                {
                    return(AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Error, FehlerTypen.FehlerAnfrage.ToDescription(), "", null, tag.Value.Date, false));
                }
            }
        }
        // ##############################################################################################################
        private SkillResponse WocheNachKategorieKommando(SkillRequest anfrage)
        {
            var intentRequest = (IntentRequest)anfrage.Request;

            if (intentRequest.DialogState.Equals("STARTED"))
            {
                return(ResponseBuilder.DialogDelegate(anfrage.Session, intentRequest.Intent));
            }
            else if (!intentRequest.DialogState.Equals("COMPLETED"))
            {
                return(ResponseBuilder.DialogDelegate(anfrage.Session));
            }
            else
            {
                var numberKW  = DateTime.Now.GetNumberOfWeeks();
                var kw        = DateTime.Now.GetWeekOfYear();
                var year      = DateTime.Now.Year;
                var kategorie = anfrage.GetSlotValueInt(SlotValues.Kategorie.ToString(), defaultValue);
                var nextWeek  = anfrage.GetSlotValueInt(SlotValues.NextWeek.ToString(), defaultValue) == defaultValue;

                if (!nextWeek)
                {
                    kw++;
                }
                if (kw > numberKW)
                {
                    kw = 1;
                    year++;
                }

                var speisePlan = GetSpeisePlaene(kw, year).Result;
                if (kategorie != defaultValue)
                {
                    return(WocheNachKategorieAntwortHelfer.GetWocheNachKategorieResponse(anfrage, speisePlan, kategorie, kw));
                }
                else
                {
                    return(AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Error, FehlerTypen.FehlerAnfrage.ToDescription(), "", null, DateTime.Now, false));
                }
            }
        }
        public dynamic Alexa([FromBody] SkillRequest anfrage)
        {
            try
            {
                if (anfrage.Context.System.ApiAccessToken == null)
                {
                    return(new BadRequestResult());
                }

                var antwort     = AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Error, FehlerTypen.FehlerAnfrage.ToDescription(), "", null, DateTime.Now, false);
                var requestType = anfrage.GetRequestType();

                if (requestType == typeof(LaunchRequest))
                {
                    antwort = StartVerwalter(anfrage);
                }

                else if (requestType == typeof(IntentRequest))
                {
                    antwort = KommandoVerwalter(anfrage);
                }

                else if (requestType == typeof(SessionEndedRequest))
                {
                    antwort = SitzungBeendenVerwalter(anfrage);
                }

                else if (requestType == typeof(DisplayElementSelectedRequest))
                {
                    antwort = ElementKlickVerwalter(anfrage);
                }

                return(antwort);
            }
            catch (Exception e)
            {
                CreateErrorLog(e);
                return(null);
            }
        }
        private SkillResponse FarbeMischenIntent(SkillRequest request)
        {
            var response      = AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Error, FehlerTypen.FehlerAnfrage.ToDescription(), "", null, DateTime.Now, null);
            var intentRequest = (IntentRequest)request.Request;

            if (intentRequest.DialogState.Equals("STARTED"))
            {
                return(ResponseBuilder.DialogDelegate(request.Session, intentRequest.Intent));
            }
            else if (!intentRequest.DialogState.Equals("COMPLETED"))
            {
                return(ResponseBuilder.DialogDelegate(request.Session));
            }
            else
            {
                var text   = "Daraus ergibt sich";
                var farbe1 = request.GetSlotValueInt("FarbeEins", -1);
                var farbe2 = request.GetSlotValueInt("FarbeZwei", -1);

                if (farbe1 == 1 && farbe2 == 2 || farbe1 == 2 && farbe2 == 1)
                {
                    response = AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Error, $"{text} lila.", "", null, DateTime.Now, null);
                }
                else if (farbe1 == 1 && farbe2 == 3 || farbe1 == 3 && farbe2 == 1)
                {
                    response = AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Error, $"{text} orange.", "", null, DateTime.Now, null);
                }
                else if (farbe1 == 3 && farbe2 == 2 || farbe1 == 2 && farbe2 == 3)
                {
                    response = AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Error, $"{text} grün.", "", null, DateTime.Now, null);
                }
                else if (farbe1 == farbe2)
                {
                    response = AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Error, "<s>Hey</s>, die gleiche Farbe zu mischen ist witzlos.", "", null, DateTime.Now, null);
                }

                return(response);
            }
        }
 private SkillResponse SessionEndedRequestHandler(SkillRequest request)
 {
     return(AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Ended, "Alles klar, machs gut.", "", null, DateTime.Now, true));
 }
 private SkillResponse LaunchRequestHandler(SkillRequest request)
 {
     return(AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Ended, "Hi. Mit diesem Skill kannst du zwei Farben mischen.", "", null, DateTime.Now, false));
 }
        // ##############################################################################################################
        /// <summary>
        /// Konvertiert die Daten der DB in verarbeitbare Elemente
        /// </summary>
        /// <param name="anfrage"></param>
        /// <returns></returns>
        private SkillResponse FalschesKommando(SkillRequest anfrage)
        {
            string speech = "Ich konnte Sie leider nicht verstehen. Um den heutigen Speiseplan zu erfahren, sagen sie: Was gibt es heute zu essen?";

            return(AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Error, speech, "", speech, DateTime.Now, false));
        }
        // ##############################################################################################################
        /// <summary>
        /// Gibt die richtige Antwort auf die Frage nach den preisen
        /// </summary>
        /// <param name="anfrage">Enthält die Anfrage vom Amazon Alexa Server vom Typ PreisIntent</param>
        /// <returns></returns>
        private SkillResponse PreisIntent(SkillRequest anfrage)
        {
            string speech = "Die Vorspeise kostet 2 Euro. Menü 1 kostet 7,90 Euro. Menü 2 kostet 6,90 Euro. Das vegetarische Menü kostet 4,90 Euro.";

            return(AlexaAntwortHelfer.GibEinfacheAntwort(anfrage, SkillTypen.Preis, speech, "Preise", speech, DateTime.Now, false));
        }
 // ##############################################################################################################
 /// <summary>
 /// Regelt die Antwort beim Beenden des Alexa Skills
 /// </summary>
 /// <param name="request">Enthält die Anfrage vom Amazon Alexa Server vom Typ SitzungBeenden</param>
 /// <returns></returns>
 private SkillResponse SitzungBeendenVerwalter(SkillRequest request)
 {
     return(AlexaAntwortHelfer.GibEinfacheAntwort(request, SkillTypen.Ended, AlexaAntwortHelfer.Ended, FehlerTypen.Ended.ToDescription(), null, DateTime.Now, true));
 }