From 7afd0738ea2b39f3306e7494e829674c91e9aaf7 Mon Sep 17 00:00:00 2001 From: MarcTM01 <108792843+MarcTM01@users.noreply.github.com> Date: Fri, 31 May 2024 21:12:55 +0200 Subject: [PATCH] Added invocation to inquire about individual dishes --- alexa-skill/lambda-pdm/src/lambda_function.py | 8 +- .../src/locales/de-DE/LC_MESSAGES/skill.po | 58 ++++++- .../src/locales/en-US/LC_MESSAGES/skill.po | 61 ++++++- ...filtered_mensa_offerings_intent_handler.py | 130 +++++++++++++++ ...getarian_mensa_offerings_intent_handler.py | 69 -------- .../intent_handler_with_mensa_and_date.py | 10 +- .../lambda-pdm/src/src/utils/alexa_slots.py | 4 +- .../interactionModels/custom/de-DE.json | 156 ++++++++++++------ .../interactionModels/custom/en-US.json | 116 +++++++++---- 9 files changed, 440 insertions(+), 172 deletions(-) create mode 100644 alexa-skill/lambda-pdm/src/src/handler/get_filtered_mensa_offerings_intent_handler.py delete mode 100644 alexa-skill/lambda-pdm/src/src/handler/get_vegan_or_vegetarian_mensa_offerings_intent_handler.py diff --git a/alexa-skill/lambda-pdm/src/lambda_function.py b/alexa-skill/lambda-pdm/src/lambda_function.py index 9b1cb0d..ac73f01 100644 --- a/alexa-skill/lambda-pdm/src/lambda_function.py +++ b/alexa-skill/lambda-pdm/src/lambda_function.py @@ -9,12 +9,12 @@ CatchAllExceptionHandler, ) from src.handler.fallback_intent_handler import FallbackIntentHandler +from src.handler.get_filtered_mensa_offerings_intent_handler import ( + GetFilteredMensaOfferingsIntentHandler, +) from src.handler.get_mensa_offerings_intent_handler import ( GetMensaOfferingsIntentHandler, ) -from src.handler.get_vegan_or_vegetarian_mensa_offerings_intent_handler import ( - GetVeganOrVegetarianMensaOfferingsIntentHandler, -) from src.handler.help_intent_handler import ( HelpIntentHandler, ) @@ -38,7 +38,7 @@ sb.add_request_handler(SessionEndedRequestHandler()) sb.add_request_handler(FallbackIntentHandler()) -sb.add_request_handler(GetVeganOrVegetarianMensaOfferingsIntentHandler()) +sb.add_request_handler(GetFilteredMensaOfferingsIntentHandler()) sb.add_request_handler(GetMensaOfferingsIntentHandler()) sb.add_exception_handler(CatchAllExceptionHandler()) diff --git a/alexa-skill/lambda-pdm/src/locales/de-DE/LC_MESSAGES/skill.po b/alexa-skill/lambda-pdm/src/locales/de-DE/LC_MESSAGES/skill.po index 9729557..d8431b5 100644 --- a/alexa-skill/lambda-pdm/src/locales/de-DE/LC_MESSAGES/skill.po +++ b/alexa-skill/lambda-pdm/src/locales/de-DE/LC_MESSAGES/skill.po @@ -39,8 +39,8 @@ msgstr "Entschuldigung, ich kann diese Anfrage nicht verarbeiten. Dies kann dara msgid "NO_MENSA_SPECIFIED" msgstr "Entschuldigung, ich habe nicht verstanden, nach welcher Mensa Sie gefragt haben. Bitte versuchen Sie es erneut." -msgid "MULTIPLE_MENSAS_SPECIFIED" -msgstr "Bitte geben Sie genau eine Mensa an. Ich konnte mich nicht zwischen {0} entscheiden. Bitte versuchen Sie es erneut." +msgid "NO_DISH_TYPE_SPECIFIED" +msgstr "Entschuldigung, ich habe nicht verstanden, nach welchem Gericht Sie gefragt haben. Bitte versuchen Sie es erneut." msgid "NO_DATE_SPECIFIED" msgstr "Entschuldigung, ich habe nicht verstanden, nach welchem Datum Sie gefragt haben. Bitte versuchen Sie es erneut." @@ -94,13 +94,13 @@ msgid "vegan" msgstr "vegan" msgid "FILTERED_DISH_ANNOUNCEMENT_NO_DISHES" -msgstr "Es gibt leider keine {type}en Gerichte in der {mensa} am {date}." +msgstr "Es gibt leider keine {type} in der {mensa} am {date}." msgid "FILTERED_DISH_ANNOUNCEMENT_ONE_DISH" -msgstr "Es gibt ein {type}es Gericht in der {mensa} am {date}: {dish}." +msgstr "Es gibt ein {type} in der {mensa} am {date}: {dish}." msgid "FILTERED_DISH_ANNOUNCEMENT_MULTIPLE_DISHES" -msgstr "Es gibt {num} {type}e Gerichte in der {mensa} am {date}: {dishes}." +msgstr "Es gibt {num} {type} in der {mensa} am {date}: {dishes}." # Annoucement for dish types msgid "ANNOUNCEMENT_PREPOSITION_TABLE_DISH" @@ -193,3 +193,51 @@ msgstr "Samstag" msgid "DAY_6" msgstr "Sonntag" +# Dish Type Filter +msgid "FILTER_VEGETARIAN_SINGLE" +msgstr "vegetarisches Gericht" + +msgid "FILTER_VEGETARIAN_PLURAL" +msgstr "vegetarische Gerichte" + +msgid "FILTER_VEGAN_SINGLE" +msgstr "veganes Gericht" + +msgid "FILTER_VEGAN_PLURAL" +msgstr "vegane Gerichte" + +msgid "FILTER_CLASSICS_SINGLE" +msgstr "Klassiker" + +msgid "FILTER_CLASSICS_PLURAL" +msgstr "Klassiker" + +msgid "FILTER_PASTA_SINGLE" +msgstr "Nudelgericht" + +msgid "FILTER_PASTA_PLURAL" +msgstr "Nudelgerichte" + +msgid "FILTER_WOK_SINGLE" +msgstr "Wokgericht" + +msgid "FILTER_WOK_PLURAL" +msgstr "Wokgerichte" + +msgid "FILTER_PIZZA_SINGLE" +msgstr "Pizza" + +msgid "FILTER_PIZZA_PLURAL" +msgstr "Pizzen" + +msgid "FILTER_BURGER_SINGLE" +msgstr "Burger" + +msgid "FILTER_BURGER_PLURAL" +msgstr "Burger" + +msgid "FILTER_TABLE_DISH_SINGLE" +msgstr "Tellergericht" + +msgid "FILTER_TABLE_DISH_PLURAL" +msgstr "Tellergerichte" diff --git a/alexa-skill/lambda-pdm/src/locales/en-US/LC_MESSAGES/skill.po b/alexa-skill/lambda-pdm/src/locales/en-US/LC_MESSAGES/skill.po index 104ce6d..5b6e24e 100644 --- a/alexa-skill/lambda-pdm/src/locales/en-US/LC_MESSAGES/skill.po +++ b/alexa-skill/lambda-pdm/src/locales/en-US/LC_MESSAGES/skill.po @@ -39,8 +39,8 @@ msgstr "Sorry, I can't process this request. This may be because I don't yet kno msgid "NO_MENSA_SPECIFIED" msgstr "I'm sorry, I didn't understand which mensa you were asking about. Please try again." -msgid "MULTIPLE_MENSAS_SPECIFIED" -msgstr "Please specify exactly one mensa. I could not decide between {0}. Do Please try again." +msgid "NO_DISH_TYPE_SPECIFIED" +msgstr "I'm sorry, I didn't understand which dish you were asking about. Please try again." msgid "NO_DATE_SPECIFIED" msgstr "I'm sorry, I didn't understand which date you were asking about. Please try again." @@ -94,13 +94,13 @@ msgid "vegan" msgstr "vegan" msgid "FILTERED_DISH_ANNOUNCEMENT_NO_DISHES" -msgstr "Unfortunately, no {type} dishes are offered at {mensa} on {date}." +msgstr "Unfortunately, no {type} are offered at {mensa} on {date}." msgid "FILTERED_DISH_ANNOUNCEMENT_ONE_DISH" -msgstr "There is one {type} dish offered at {mensa} on {date}: {dish}." +msgstr "There is one {type} offered at {mensa} on {date}: {dish}." msgid "FILTERED_DISH_ANNOUNCEMENT_MULTIPLE_DISHES" -msgstr "There are {num} {type} dishes to choose from at {mensa} on {date}: {dishes}." +msgstr "There are {num} {type} to choose from at {mensa} on {date}: {dishes}." # Annoucement for dish types msgid "ANNOUNCEMENT_PREPOSITION_TABLE_DISH" @@ -191,4 +191,53 @@ msgid "DAY_5" msgstr "Saturday" msgid "DAY_6" -msgstr "Sunday" \ No newline at end of file +msgstr "Sunday" + +# Dish Type Filter +msgid "FILTER_VEGETARIAN_SINGLE" +msgstr "vegetarian dish" + +msgid "FILTER_VEGETARIAN_PLURAL" +msgstr "vegetarian dishes" + +msgid "FILTER_VEGAN_SINGLE" +msgstr "vegan dish" + +msgid "FILTER_VEGAN_PLURAL" +msgstr "vegan dishes" + +msgid "FILTER_CLASSICS_SINGLE" +msgstr "classical dish" + +msgid "FILTER_CLASSICS_PLURAL" +msgstr "classical dishes" + +msgid "FILTER_PASTA_SINGLE" +msgstr "pasta dish" + +msgid "FILTER_PASTA_PLURAL" +msgstr "pasta dishes" + +msgid "FILTER_WOK_SINGLE" +msgstr "Wok dish" + +msgid "FILTER_WOK_PLURAL" +msgstr "Wok dishes" + +msgid "FILTER_PIZZA_SINGLE" +msgstr "Pizza" + +msgid "FILTER_PIZZA_PLURAL" +msgstr "Pizzas" + +msgid "FILTER_BURGER_SINGLE" +msgstr "Burger" + +msgid "FILTER_BURGER_PLURAL" +msgstr "Burgers" + +msgid "FILTER_TABLE_DISH_SINGLE" +msgstr "Table dish" + +msgid "FILTER_TABLE_DISH_PLURAL" +msgstr "Table dishes" diff --git a/alexa-skill/lambda-pdm/src/src/handler/get_filtered_mensa_offerings_intent_handler.py b/alexa-skill/lambda-pdm/src/src/handler/get_filtered_mensa_offerings_intent_handler.py new file mode 100644 index 0000000..3e60f5d --- /dev/null +++ b/alexa-skill/lambda-pdm/src/src/handler/get_filtered_mensa_offerings_intent_handler.py @@ -0,0 +1,130 @@ +import datetime +from enum import Enum +from typing import Union, cast + +import ask_sdk_core.utils as ask_utils +from ask_sdk_core.handler_input import HandlerInput +from ask_sdk_model import Response + +from src.data.mensas import Mensa +from src.data.menu_model import DishType, MensaDayMenus, MensaMenu, NutritionFlag +from src.handler.intent_handler_with_mensa_and_date import IntentHandlerWithMensaAndDate +from src.utils import alexa_slots +from src.utils.localization import I18nFunction + + +class DishTypeFilter(str, Enum): + """Enum for the different types of dishes that can be filtered.""" + + VEGETARIAN = "VEGETARIAN" + VEGAN = "VEGAN" + CLASSICS = "CLASSICS" + PASTA = "PASTA" + WOK = "WOK" + PIZZA = "PIZZA" + BURGER = "BURGER" + TABLE_DISH = "TABLE_DISH" + + def matches(self, dish: MensaMenu) -> bool: + """Check if the dish matches the filter.""" + if self == DishTypeFilter.VEGETARIAN: + return NutritionFlag.VEGETARIAN in dish.nutrition_flags + if self == DishTypeFilter.VEGAN: + return NutritionFlag.VEGAN in dish.nutrition_flags + if self == DishTypeFilter.CLASSICS: + return dish.dish_type == DishType.CLASSICS + if self == DishTypeFilter.PASTA: + return dish.dish_type == DishType.PASTA + if self == DishTypeFilter.WOK: + return dish.dish_type == DishType.WOK + if self == DishTypeFilter.PIZZA: + return dish.dish_type in { + DishType.PIZZA_OF_THE_DAY, + DishType.PIZZA_CLASSICS, + } + if self == DishTypeFilter.BURGER: + return dish.dish_type in { + DishType.BURGER_CLASSICS, + DishType.BURGER_OF_THE_WEEK, + } + if self == DishTypeFilter.TABLE_DISH: + return dish.dish_type in { + DishType.TABLE_DISH, + DishType.VEGETARIAN_TABLE_DISH, + } + return False + + +def _get_dish_type_filter_from_request( + handler_input: HandlerInput, +) -> Union[Response, DishTypeFilter]: + _ = cast( + I18nFunction, + handler_input.attributes_manager.request_attributes["_"], + ) + dish_types = alexa_slots.get_slot_ids_from_custom_slot(handler_input, "dishType") + if dish_types is None or len(dish_types) == 0: + return handler_input.response_builder.speak( + _("NO_DISH_TYPE_SPECIFIED") + ).response + + dish_type = next(iter(dish_types)) + return DishTypeFilter(dish_type) + + +class GetFilteredMensaOfferingsIntentHandler(IntentHandlerWithMensaAndDate): + """Handler for GetFilteredMensaOfferingsIntentHandler.""" + + def can_handle(self, handler_input: HandlerInput) -> bool: + """Overwritten.""" + return ask_utils.is_intent_name("GetFilteredMensaOfferingsIntentHandler")( + handler_input + ) + + def handle_with_mensa_and_date( + self, + handler_input: HandlerInput, + mensa: Mensa, + date: datetime.date, + mensa_offerings: MensaDayMenus, + ) -> Response: + """Overwritten.""" + _ = cast( + I18nFunction, + handler_input.attributes_manager.request_attributes["_"], + ) + response_or_filter = _get_dish_type_filter_from_request(handler_input) + if isinstance(response_or_filter, Response): + return response_or_filter + + filtered_dishes = [ + menu for menu in mensa_offerings.menus if response_or_filter.matches(menu) + ] + if len(filtered_dishes) <= 0: + speak_output = _("FILTERED_DISH_ANNOUNCEMENT_NO_DISHES").format( + type=_(f"FILTER_{response_or_filter.value}_PLURAL"), + mensa=_(mensa.mensaId), + date=date, + ) + return handler_input.response_builder.speak(speak_output).response + elif len(filtered_dishes) == 1: + speak_output = _("FILTERED_DISH_ANNOUNCEMENT_ONE_DISH").format( + type=_(f"FILTER_{response_or_filter.value}_SINGLE"), + mensa=_(mensa.mensaId), + date=date, + dish=filtered_dishes[0].generate_full_announcement(_), + ) + return handler_input.response_builder.speak(speak_output).response + else: + speak_output = _("FILTERED_DISH_ANNOUNCEMENT_MULTIPLE_DISHES").format( + type=_(f"FILTER_{response_or_filter.value}_PLURAL"), + mensa=_(mensa.mensaId), + date=date, + num=len(filtered_dishes), + dishes=". ".join( + map( + lambda dish: dish.generate_full_announcement(_), filtered_dishes + ) + ), + ) + return handler_input.response_builder.speak(speak_output).response diff --git a/alexa-skill/lambda-pdm/src/src/handler/get_vegan_or_vegetarian_mensa_offerings_intent_handler.py b/alexa-skill/lambda-pdm/src/src/handler/get_vegan_or_vegetarian_mensa_offerings_intent_handler.py deleted file mode 100644 index d4b983d..0000000 --- a/alexa-skill/lambda-pdm/src/src/handler/get_vegan_or_vegetarian_mensa_offerings_intent_handler.py +++ /dev/null @@ -1,69 +0,0 @@ -import datetime -from typing import cast - -import ask_sdk_core.utils as ask_utils -from ask_sdk_core.handler_input import HandlerInput -from ask_sdk_model import Response - -from src.data.mensas import Mensa -from src.data.menu_model import MensaDayMenus, NutritionFlag -from src.handler.intent_handler_with_mensa_and_date import IntentHandlerWithMensaAndDate -from src.utils.localization import I18nFunction - - -class GetVeganOrVegetarianMensaOfferingsIntentHandler(IntentHandlerWithMensaAndDate): - """Handler for GetVegetarianMensaOfferingsIntent.""" - - def can_handle(self, handler_input: HandlerInput) -> bool: - """Overwritten.""" - return ask_utils.is_intent_name("GetVegetarianMensaOfferingsIntent")( - handler_input - ) or ask_utils.is_intent_name("GetVeganMensaOfferingsIntent")(handler_input) - - def handle_with_mensa_and_date( - self, - handler_input: HandlerInput, - mensa: Mensa, - date: datetime.date, - mensa_offerings: MensaDayMenus, - ) -> Response: - """Overwritten.""" - _ = cast( - I18nFunction, - handler_input.attributes_manager.request_attributes["_"], - ) - required_flag = NutritionFlag.VEGETARIAN - if ask_utils.is_intent_name("GetVeganMensaOfferingsIntent")(handler_input): - required_flag = NutritionFlag.VEGAN - - filtered_dishes = [ - menu - for menu in mensa_offerings.menus - if required_flag in menu.nutrition_flags - ] - if len(filtered_dishes) <= 0: - speak_output = _("FILTERED_DISH_ANNOUNCEMENT_NO_DISHES").format( - type=_(required_flag.value), mensa=_(mensa.mensaId), date=date - ) - return handler_input.response_builder.speak(speak_output).response - elif len(filtered_dishes) == 1: - speak_output = _("FILTERED_DISH_ANNOUNCEMENT_ONE_DISH").format( - type=_(required_flag.value), - mensa=_(mensa.mensaId), - date=date, - dish=filtered_dishes[0].generate_full_announcement(_), - ) - return handler_input.response_builder.speak(speak_output).response - else: - speak_output = _("FILTERED_DISH_ANNOUNCEMENT_MULTIPLE_DISHES").format( - type=_(required_flag.value), - mensa=_(mensa.mensaId), - date=date, - num=len(filtered_dishes), - dishes=". ".join( - map( - lambda dish: dish.generate_full_announcement(_), filtered_dishes - ) - ), - ) - return handler_input.response_builder.speak(speak_output).response diff --git a/alexa-skill/lambda-pdm/src/src/handler/intent_handler_with_mensa_and_date.py b/alexa-skill/lambda-pdm/src/src/handler/intent_handler_with_mensa_and_date.py index 920fa9f..2c29469 100644 --- a/alexa-skill/lambda-pdm/src/src/handler/intent_handler_with_mensa_and_date.py +++ b/alexa-skill/lambda-pdm/src/src/handler/intent_handler_with_mensa_and_date.py @@ -12,7 +12,7 @@ from src.data import dynamodb from src.data.mensas import Mensa from src.data.menu_model import MensaDayMenus -from src.utils import alexa_slots, localization +from src.utils import alexa_slots from src.utils.localization import I18nFunction @@ -28,14 +28,6 @@ def _require_exactly_one_mensa_specified( if mensas is None or len(mensas) == 0: return handler_input.response_builder.speak(_("NO_MENSA_SPECIFIED")).response - if len(mensas) != 1: - mensa_names = map(lambda mensa_obj: _(mensa_obj.mensaId), mensas) - return handler_input.response_builder.speak( - _("MULTIPLE_MENSAS_SPECIFIED").format( - localization.build_localized_list(_, mensa_names) - ) - ).response - mensa = next(iter(mensas)) return mensa diff --git a/alexa-skill/lambda-pdm/src/src/utils/alexa_slots.py b/alexa-skill/lambda-pdm/src/src/utils/alexa_slots.py index d8ccaf2..9ae6988 100644 --- a/alexa-skill/lambda-pdm/src/src/utils/alexa_slots.py +++ b/alexa-skill/lambda-pdm/src/src/utils/alexa_slots.py @@ -16,7 +16,7 @@ def get_mensas_from_slot( :param slot_name: The name of the slot :return: The mensa(s) that were found in the slot or None if no mensa was found """ - identified_slot_ids = _get_slot_ids_from_custom_slot(handler_input, slot_name) + identified_slot_ids = get_slot_ids_from_custom_slot(handler_input, slot_name) if identified_slot_ids is None: return None @@ -53,7 +53,7 @@ def get_date_from_slot( return parsed_date.date() -def _get_slot_ids_from_custom_slot( +def get_slot_ids_from_custom_slot( handler_input: HandlerInput, slot_name: str ) -> Optional[Set[str]]: """Get the slot IDs from the custom slot. diff --git a/alexa-skill/skill-package/interactionModels/custom/de-DE.json b/alexa-skill/skill-package/interactionModels/custom/de-DE.json index 0af6f3a..87456ef 100644 --- a/alexa-skill/skill-package/interactionModels/custom/de-DE.json +++ b/alexa-skill/skill-package/interactionModels/custom/de-DE.json @@ -63,59 +63,34 @@ { "name": "mensa", "type": "MensaName" - } - ], - "name": "GetVegetarianMensaOfferingsIntent", - "samples": [ - "was gibt es am {date} in {mensa} vegetarisches zu essen", - "was steht am {date} für vegetarisches auf dem Speiseplan in {mensa}", - "was steht am {date} in {mensa} für vegetarier auf dem Speiseplan", - "welche vegetarischen kulinarischen Genüsse erwarten uns am {date} in {mensa}", - "über das vegetarische Menü in {mensa} am {date}", - "über die verfügbaren vegetarischen Gerichte in {mensa} am {date}", - "für die vegetarische Speiseauswahl in {mensa} am {date}", - "was wird am {date} in {mensa} vegetarisches gekocht", - "was wird am {date} in {mensa} vegetarisches serviert", - "könntest du nach dem vegetarischen Menü in {mensa} am {date} fragen", - "für die vegetarischen Angebote am {date} in {mensa}", - "was steht am {date} im {mensa} vegetarisches auf dem Speiseplan", - "was es am {date} in {mensa} vegetarisches zu essen gibt", - "was gibt es am {date} in {mensa} für vegetarische Gerichte", - "nach dem {date} vegetarischen Speiseplan der {mensa}", - "was es {date} in der {mensa} vegetarisches zu essen gibt", - "was am {date} in der {mensa} vegetarisches auf dem Speiseplan steht" - ] - }, - { - "slots": [ - { - "name": "date", - "type": "AMAZON.DATE" }, { - "name": "mensa", - "type": "MensaName" + "name": "dishType", + "type": "MensaDishType" } ], - "name": "GetVeganMensaOfferingsIntent", + "name": "GetFilteredMensaOfferingsIntentHandler", "samples": [ - "was gibt es am {date} in {mensa} veganes zu essen", - "was steht am {date} für veganes auf dem Speiseplan in {mensa}", - "was steht am {date} in {mensa} für vegetarier auf dem Speiseplan", - "welche veganen kulinarischen Genüsse erwarten uns am {date} in {mensa}", - "über das veganen Menü in {mensa} am {date}", - "über die verfügbaren veganenen Gerichte in {mensa} am {date}", - "für die veganene Speiseauswahl in {mensa} am {date}", - "was wird am {date} in {mensa} veganes gekocht", - "was wird am {date} in {mensa} veganes serviert", - "könntest du nach dem veganen Menü in {mensa} am {date} fragen", - "für die veganen Angebote am {date} in {mensa}", - "was steht am {date} im {mensa} veganes auf dem Speiseplan", - "was es am {date} in {mensa} veganes zu essen gibt", - "was gibt es am {date} in {mensa} für vegane Gerichte", - "nach dem {date} veganen Speiseplan der {mensa}", - "was es {date} in der {mensa} veganes zu essen gibt", - "was am {date} in der {mensa} veganes auf dem Speiseplan steht" + "was gibt es am {date} in {mensa} {dishType} zu essen", + "was steht am {date} für {dishType} auf dem Speiseplan in {mensa}", + "was steht am {date} in {mensa} für {dishType} auf dem Speiseplan", + "welche {dishType} kulinarischen Genüsse erwarten uns am {date} in {mensa}", + "welche {dishType} gerichte es am {date} in {mensa} gibt", + "über das {dishType} Menü in {mensa} am {date}", + "über die verfügbaren {dishType} Gerichte in {mensa} am {date}", + "für die {dishType} Speiseauswahl in {mensa} am {date}", + "was wird am {date} in {mensa} {dishType} gekocht", + "was wird am {date} in {mensa} {dishType} serviert", + "könntest du nach dem {dishType} Menü in {mensa} am {date} fragen", + "für die {dishType} Angebote am {date} in {mensa}", + "was steht am {date} im {mensa} {dishType} auf dem Speiseplan", + "was es am {date} in {mensa} {dishType} zu essen gibt", + "was gibt es am {date} in {mensa} für {dishType} Gerichte", + "nach dem {date} {dishType} Speiseplan der {mensa}", + "was es {date} in der {mensa} {dishType} zu essen gibt", + "was am {date} in der {mensa} {dishType} auf dem Speiseplan steht", + "was es am {date} in der {mensa} im {dishType} gibt", + "was es für {dishType} am {date} in der {mensa} gibt" ] } ], @@ -210,6 +185,91 @@ } ], "name": "MensaName" + }, + { + "values": [ + { + "name": { + "synonyms": [ + "vegetarische Gerichte", + "vegetarische Speisen", + "vegetarisches" + ], + "value": "vegetarisch" + }, + "id": "VEGETARIAN" + }, + { + "name": { + "synonyms": [ + "vegane Gerichte", + "vegane Speisen", + "veganes" + ], + "value": "vegan" + }, + "id": "VEGAN" + }, + { + "name": { + "synonyms": [ + "klassisches Gericht" + ], + "value": "klassiker" + }, + "id": "CLASSICS" + }, + { + "name": { + "synonyms": [ + "Nudelgericht" + ], + "value": "pasta" + }, + "id": "PASTA" + }, + { + "name": { + "synonyms": [ + "Wokgericht" + ], + "value": "wok" + }, + "id": "WOK" + }, + { + "name": { + "synonyms": [ + "Pizzen", + "Pizza des tages", + "Pizza classics" + ], + "value": "Pizza" + }, + "id": "PIZZA" + }, + { + "name": { + "synonyms": [ + "Burger classics", + "Burger der Woche" + ], + "value": "Burger" + }, + "id": "BURGER" + }, + { + "name": { + "synonyms": [ + "Suppe", + "Vegetarisches Tellergericht" + ], + "value": "Tellergericht" + }, + "id": "TABLE_DISH" + } + ], + "name": "MensaDishType" } ], "invocationName": "r. w. t. h. mensa" diff --git a/alexa-skill/skill-package/interactionModels/custom/en-US.json b/alexa-skill/skill-package/interactionModels/custom/en-US.json index 1872d3a..6fc7c97 100644 --- a/alexa-skill/skill-package/interactionModels/custom/en-US.json +++ b/alexa-skill/skill-package/interactionModels/custom/en-US.json @@ -58,9 +58,13 @@ { "name": "mensa", "type": "MensaName" + }, + { + "name": "dishType", + "type": "MensaDishType" } ], - "name": "GetVegetarianMensaOfferingsIntent", + "name": "GetFilteredMensaOfferingsIntentHandler", "samples": [ "what\u0027s on {date} vegetarian menu at {mensa}", "what\u0027s on the vegetarian menu {date} at {mensa}", @@ -73,34 +77,9 @@ "what vegetarian options they\u0027re serving at {mensa} {date}", "could you inquire about the vegetarian menu at {mensa} for {date}", "for {date} vegetarian offerings at {mensa}", - "what\u0027s on the vegetarian menu at {mensa} for {date}" - ] - }, - { - "slots": [ - { - "name": "date", - "type": "AMAZON.DATE" - }, - { - "name": "mensa", - "type": "MensaName" - } - ], - "name": "GetVegeanMensaOfferingsIntent", - "samples": [ - "what\u0027s on {date} vegan menu at {mensa}", - "what\u0027s on the vegan menu {date} at {mensa}", - "what\u0027s on the vegan menu at {mensa} {date}", - "what vegan culinary delights await at {mensa} for {date}", - "about {mensa} s vegan menu for {date}", - "about the vegan dishes available at {mensa} for {date}", - "for the vegan menu lineup at {mensa} for {date}", - "what vegan dishes are cooking at {mensa} on {date}", - "what vegan options they\u0027re serving at {mensa} {date}", - "could you inquire about the vegan menu at {mensa} for {date}", - "for {date} vegan offerings at {mensa}", - "what\u0027s on the vegan menu at {mensa} for {date}" + "what\u0027s on the vegetarian menu at {mensa} for {date}", + "what\u0027s the {dishType} dish at {mensa} for {date}", + "what {dishType} are offered at {mensa} {date}" ] } ], @@ -193,6 +172,85 @@ } ], "name": "MensaName" + },{ + "values": [ + { + "name": { + "synonyms": [ + "vegetarian dishes", + "veggie", + "vegetarian food" + ], + "value": "vegetarian" + }, + "id": "VEGETARIAN" + }, + { + "name": { + "synonyms": [ + "vegan dishes", + "vegan food" + ], + "value": "vegan" + }, + "id": "VEGAN" + }, + { + "name": { + "synonyms": [ + "classical dish" + ], + "value": "classics" + }, + "id": "CLASSICS" + }, + { + "name": { + "synonyms": [], + "value": "pasta" + }, + "id": "PASTA" + }, + { + "name": { + "synonyms": [], + "value": "wok" + }, + "id": "WOK" + }, + { + "name": { + "synonyms": [ + "Pizzas", + "Pizza of the day", + "Pizza classics" + ], + "value": "Pizza" + }, + "id": "PIZZA" + }, + { + "name": { + "synonyms": [ + "Burger classics", + "Burger of the week" + ], + "value": "Burger" + }, + "id": "BURGER" + }, + { + "name": { + "synonyms": [ + "soup", + "vegetarian table dish" + ], + "value": "able dish" + }, + "id": "TABLE_DISH" + } + ], + "name": "MensaDishType" } ], "invocationName": "r. w. t. h. mensa"