def test_viewport_map_to_mobile_landscape_medium(self): viewport_state = ViewportState(shape=Shape.RECTANGLE, dpi=float(240), current_pixel_width=float(960), current_pixel_height=float(600)) test_request_env = RequestEnvelope(context=Context( viewport=viewport_state)) assert ( viewport.get_viewport_profile(test_request_env) is viewport.ViewportProfile.MOBILE_LANDSCAPE_MEDIUM), ( "Viewport profile couldn't resolve MOBILE_LANDSCAPE_MEDIUM")
def test_viewport_map_to_unknown(self): viewport_state = ViewportState(shape=Shape.ROUND, dpi=float(240), current_pixel_width=float(600), current_pixel_height=float(600)) test_request_env = RequestEnvelope(context=Context( viewport=viewport_state)) assert ( viewport.get_viewport_profile(test_request_env) is viewport.ViewportProfile.UNKNOWN_VIEWPORT_PROFILE), ( "Viewport profile couldn't resolve UNKNOWN_VIEWPORT_PROFILE")
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("Multiplica Intent") speech = "No entendí muy bien"+ ". ¿Qué más deseas realizar?" session_attributes = {} card_title = SKILL_NAME card_content = "No entendí muy bien" #num1 = random.randint(0,10) #num2 = random.randint(0,10) slots = handler_input.request_envelope.request.intent.slots try: num1 = int(slots["numero_uno"].value) num2 = int(slots["numero_dos"].value) op = int(slots["operacion"].resolutions.resolutions_per_authority[0].values[0].value.id) except: num1 = 1 num2 = 1 op = 0 if op == 0: card_content = "{} x {} = {} ".format(num1, num2, num1*num2) speech = "{} por {} es igual a {}. ¿Qué más deseas realizar?".format(num1, num2, num1*num2) elif op == 1: card_content = "{} + {} = {} ".format(num1, num2, num1+num2) speech = "{} más {} es igual a {}. ¿Qué más deseas realizar?".format(num1, num2, num1+num2) elif op == 2: card_content = "{} - {} = {} ".format(num1, num2, num1-num2) speech = "{} menos {} es igual a {}. ¿Qué más deseas realizar?".format(num1, num2, num1-num2) elif op == 3: card_content = "{} / {} = {} ".format(num1, num2, num1+num2) speech = "{} entre {} es igual a {}. ¿Qué más deseas realizar?".format(num1, num2, num1/num2) apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).ask(HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document(apl["json"]),datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak(speech).ask(HELP_REPROMPT).set_card(SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "",speech))).set_should_end_session(False) return handler_input.response_builder.response
def test_viewport_map_to_hub_round_small(self): viewport_state = ViewportState( shape=Shape.ROUND, dpi=float(160), current_pixel_width=float(300), current_pixel_height=float(300)) test_request_env = RequestEnvelope( context=Context( viewport=viewport_state)) assert (viewport.get_viewport_profile(test_request_env) is viewport.ViewportProfile.HUB_ROUND_SMALL), ( "Viewport profile couldn't resolve HUB_ROUND_SMALL")
def test_viewport_map_to_hub_landscape_small(self): viewport_state = ViewportState( shape=Shape.RECTANGLE, dpi=float(160), current_pixel_width=float(960), current_pixel_height=float(480)) test_request_env = RequestEnvelope( context=Context( viewport=viewport_state)) assert (viewport.get_viewport_profile(test_request_env) is viewport.ViewportProfile.HUB_LANDSCAPE_SMALL), ( "Viewport profile couldn't resolve HUB_LANDSCAPE_SMALL")
def test_viewport_map_to_mobile_portrait_small(self): viewport_state = ViewportState( shape=Shape.RECTANGLE, dpi=float(240), current_pixel_width=float(300), current_pixel_height=float(600)) test_request_env = RequestEnvelope( context=Context( viewport=viewport_state)) assert (viewport.get_viewport_profile(test_request_env) is viewport.ViewportProfile.MOBILE_PORTRAIT_SMALL), ( "Viewport profile couldn't resolve MOBILE_PORTRAIT_SMALL")
def test_viewport_map_to_tv_landscape_xlarge(self): viewport_state = ViewportState( shape=Shape.RECTANGLE, dpi=float(320), current_pixel_width=float(1920), current_pixel_height=float(960)) test_request_env = RequestEnvelope( context=Context( viewport=viewport_state)) assert (viewport.get_viewport_profile(test_request_env) is viewport.ViewportProfile.TV_LANDSCAPE_XLARGE), ( "Viewport profile couldn't resolve TV_LANDSCAPE_XLARGE")
def test_viewport_map_to_tv_portrait_medium(self): viewport_state = ViewportState( shape=Shape.RECTANGLE, dpi=float(320), current_pixel_width=float(300), current_pixel_height=float(1920)) test_request_env = RequestEnvelope( context=Context( viewport=viewport_state)) assert (viewport.get_viewport_profile(test_request_env) is viewport.ViewportProfile.TV_PORTRAIT_MEDIUM), ( "Viewport profile couldn't resolve TV_PORTRAIT_MEDIUM")
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("CalcularImc Intent") speech = "No entendí muy bien" + ". ¿Qué más deseas realizar?" card_title = SKILL_NAME card_content = "No entendí muy bien" session_attr = handler_input.attributes_manager.session_attributes session_attr['estatura'] = -1 session_attr['peso'] = -1 speech = "Muy bien, ¿Dime cuántos kilos pesas?" session_attr['pregunta_anterior'] = 'peso' card_content = speech apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL: apl = apl_img_title_text(card_title, card_content) handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) elif viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).set_card( SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "", speech))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In Device Intent") speech = 'This device is a ' if viewport.get_viewport_profile == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE: speech += 'hub landscape large' elif viewport.get_viewport_profile == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM: speech += 'hub landscape medium' elif viewport.get_viewport_profile == viewport.ViewportProfile.HUB_ROUND_SMALL: speech += 'hub round small' elif viewport.get_viewport_profile == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE: speech += 'tv landscape extra large' elif viewport.get_viewport_profile == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: speech += 'mobile landscape small' else: speech += 'echo device!' if _supports_apl(handler_input): handler_input.response_builder.speak(speech).add_directive( RenderDocumentDirective( document=_load_apl_document("devices.json"), datasources={ 'deviceTemplateData': { 'type': 'object', 'objectId': 'deviceSample', 'properties': { 'deviceName': viewport.get_viewport_profile( handler_input.request_envelope), 'hintString': 'try and buy more devices!' }, 'transformers': [{ 'inputPath': 'hintString', 'transformer': 'textToHint' }] } })) else: handler_input.response_builder.speak(speech) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In LaunchRequest") speech = WELCOME_MESSAGE apl = apl_img_title_text("Bienvenido", re.sub('<[^<]+>', "",WELCOME_MESSAGE)) if viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).add_directive( RenderDocumentDirective(document=_load_apl_document(apl["json"]),datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak(speech).ask(HELP_REPROMPT).set_card(SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "",speech))).set_should_end_session(False) #handler_input.response_builder.speak(speech).ask(speech).set_card( # SimpleCard(SKILL_NAME, speech)) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("Imc Intent") speech = "No entendí muy bien" + ". ¿Qué más deseas realizar?" card_title = SKILL_NAME card_content = "No entendí muy bien" speech = "El Índice de Masa Corporal (<sub alias=\"I M C\">IMC</sub>) es el resultado de la relación entre tu peso y tu estatura, es uno de los métodos más utilizados y prácticos para identificar el grado de riesgo asociado con la obesidad. Tu salud es una razón de peso, ¡te invitamos a calcular el tuyo!. ¿Qué más deseas realizar?" card_content = "El Índice de Masa Corporal IMC es el resultado de la relación entre tu peso y tu estatura, es uno de los métodos más utilizados y prácticos para identificar el grado de riesgo asociado con la obesidad. Tu salud es una razón de peso, ¡te invitamos a calcular el tuyo!. ¿Qué más deseas realizar?" apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL: apl = apl_img_title_text(card_title, card_content) handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) elif viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).set_card( SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "", speech))).set_should_end_session(False) return handler_input.response_builder.response
def picture_intent_handler(handler_input): """ Takes a picture and reads out the results 1) Get session ID 2) send an mqtt message 3) wait with time.sleep(x) 4) Query DDB for the results 5) APL to show the image (if on a supported device) """ session_id = handler_input.request_envelope.session.session_id send_mqtt_directive("/camera", "take a picture", data={"session_id": session_id}) time.sleep( 3 ) # Let's give the backend process a little time to 1) take a picture, 2) recognize people and objects, and 3) upload details to DDB dynamodb = boto3.resource("dynamodb") table = dynamodb.Table('TwitchRobot_Scenes') speech = "Got it. " try: response = table.get_item(Key={'session_id': session_id}) except ClientError as e: print(e.response['Error']['Message']) speech = "I had trouble getting anything back from the camera." if response and 'Item' in response: item = response['Item'] recognized_people = False recognized_labels = False if len(item['recognized_people']) > 0: recognized_people = True speech += "I recognized: " for person in item['recognized_people']: speech += person + ", " if len(item['labels']) > 0: if recognized_people: speech += "I also see: " else: speech += "I see: " for label in item['labels']: speech += label + ", " if not recognized_people and not recognized_labels: speech += "I didn't detect anything in the scene." else: speech += "I didn't detect anything in the scene." # See if APL is supported: if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.UNKNOWN_VIEWPORT_PROFILE: # Just return speech without any APL handler_input.response_builder.speak(speech).set_card( SimpleCard(SKILL_NAME, speech)).set_should_end_session(False) else: # Return speech and use APL to show the image handler_input.response_builder.speak(speech).set_card( SimpleCard(SKILL_NAME, speech)).add_directive( RenderDocumentDirective( token="pictureToken", document=_load_apl_document("./apl/document.json"), datasources=_load_apl_document( "./apl/data.json"))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("Topico") card_title = "Tópico de Cálculo" topico = '' topico_id = -1 topico_nombre = '' speech = "No tengo la definición" + ". ¿Qué más deseas realizar?" card_content = "No tengo la definición" #speech = "Definición de {} es {}".format(topico,"") #session_attributes = {} attribute_manager = handler_input.attributes_manager session_attr = attribute_manager.session_attributes try: #topico = str(intent_r['intent']['slots']['topico_text']['value']) if 'topico_text' in intent_r['intent']['slots'] else '' #topico_id = int(intent_r['intent']['slots']['topico_text']['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['id']) if 'values' in intent_r['intent']['slots']['topico_text']['resolutions']['resolutionsPerAuthority'][0] else -1 #topico_nombre = str(intent_r['intent']['slots']['topico_text']['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['name']) if 'values' in intent_r['intent']['slots']['topico_text']['resolutions']['resolutionsPerAuthority'][0] else -1 slots = handler_input.request_envelope.request.intent.slots topico = str( slots["topico_text"].value) if 'topico_text' in slots else '' session_attr["topico_text"] = topico try: topico_id = int( slots['topico_text'].resolutions. resolutions_per_authority[0].values[0].value.id ) # if 'values' in slots['topico_text'].resolutions.resolutions_per_authority[0] else -1 except: topico_id = -1 session_attr["id"] = topico_id try: topico_nombre = str( slots['topico_text'].resolutions. resolutions_per_authority[0].values[0].value.name ) # if 'values' in slots['topico_text'].resolutions.resolutions_per_authority[0] else "" except: topico_nombre = '' session_attr["name"] = topico_nombre card_content = "" if topico_id > -1: speech = "'" + topico_nombre.capitalize( ) + "': " + TOPICOS[topico_id] + ". ¿Qué más deseas realizar?" card_content = "'" + topico_nombre.capitalize( ) + "': " + TOPICOS[topico_id] else: speech = "No tengo la definición de " + topico + ". ¿Qué más deseas realizar?" card_content = "No tengo la definición de " + topico except: print("An exception occurred") apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).add_directive( RenderDocumentDirective( document=_load_apl_document(apl["json"]), datasources=apl["datasources"])).set_should_end_session( False) else: handler_input.response_builder.speak(speech).set_card( SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "", speech))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("PesoEstatura Intent") speech = "No entendí muy bien" + ". ¿Qué más deseas realizar?" card_title = SKILL_NAME card_content = "No entendí muy bien" slots = handler_input.request_envelope.request.intent.slots try: estatura = int(slots["cm"].value) except: estatura = -1 try: estatura_mts = int(slots["mt"].value) except: estatura_mts = 0 try: peso = int(slots["kg"].value) except: peso = -1 estatura = estatura + estatura_mts #attr = handler_input.attributes_manager.persistent_attributes session_attr = handler_input.attributes_manager.session_attributes session_attr['estatura'] = estatura session_attr['peso'] = peso if session_attr['estatura'] > -1 and session_attr['peso'] > -1: speech = "Mides " + str(estatura) + " cm y pesas " + str( peso) + " kg. " speech = speech + _imc(peso, estatura) + ". ¿Qué más deseas realizar?" session_attr['pregunta_anterior'] = '' session_attr['estatura'] = -1 session_attr['peso'] = -1 card_content = speech apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL: apl = apl_img_title_text(card_title, card_content) handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) elif viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak(speech).ask( HELP_REPROMPT).set_card( SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "", speech))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("Derivada") card_title = "Cálcular derivada a la n" x_valor = None x_exponente = None x_exponente_numero = None variable = "" slots = handler_input.request_envelope.request.intent.slots try: #variable = str(intent_r['intent']['slots']['variable']['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['name']) if 'values' in intent_r['intent']['slots']['variable']['resolutions']['resolutionsPerAuthority'][0] else "" variable = str(slots['variable'].resolutions. resolutions_per_authority[0].values[0].value.name) except: variable = "" try: #x_valor = int(intent_r['intent']['slots']['x_valor']['value']) if 'value' in intent_r['intent']['slots']['x_valor'] else None x_valor = int( slots["x_valor"].value ) # if 'value' in intent_r['intent']['slots']['x_valor'] else None except: x_valor = None try: #x_exponente = int(intent_r['intent']['slots']['x_exponente']['resolutions']['resolutionsPerAuthority'][0]['values'][0]['value']['id']) if 'values' in intent_r['intent']['slots']['x_exponente']['resolutions']['resolutionsPerAuthority'][0] else None x_exponente = int(slots['x_exponente'].resolutions. resolutions_per_authority[0].values[0].value.id) except: x_exponente = None try: #x_exponente_numero = int(intent_r['intent']['slots']['x_exponente_numero']['value']) if 'value' in intent_r['intent']['slots']['x_exponente_numero'] else None x_exponente_numero = int(slots['x_exponente_numero'].value) except: x_exponente_numero = None if x_exponente is None and x_exponente_numero is None: x_exponente = 1 elif x_exponente is None and x_exponente_numero is not None: x_exponente = x_exponente_numero resultado = ".." texto_elevado = "" texto_valor = "" card_content = "" if x_exponente is None: texto_elevado = "" elif x_exponente == 2: texto_elevado = " al cuadrado" elif x_exponente == 3: texto_elevado = " al cubo" elif x_exponente >= 4: texto_elevado = " elevado a la {} ".format(str(x_exponente)) if variable != "" and x_valor == 1: texto_valor = "" else: texto_valor = str(x_valor if x_valor is not None else 1) if variable != "" and x_valor is None: x_valor = 1 if x_exponente is not None and x_valor is None: x_valor = 1 if variable == "": speech = "La derivada de una constante es 0" + ". ¿Qué más deseas realizar?" card_content = "La derivada de una constante es 0" else: texto_elevado_resultado = "" variable_resultado = variable if x_exponente is None: texto_elevado_resultado = "" elif x_exponente - 1 == 2: texto_elevado_resultado = " al cuadrado" elif x_exponente - 1 == 3: texto_elevado_resultado = " al cubo" elif x_exponente - 1 >= 4: texto_elevado_resultado = " elevado a la {} ".format( str(x_exponente - 1)) if variable != "" and x_exponente == 1: variable_resultado = "" resultado = str( x_valor * x_exponente ) + " " + variable_resultado + texto_elevado_resultado if texto_valor == "1" and variable != "": texto_valor = "" speech = "La derivada de {} {} {} es : {} . ¿Qué más deseas realizar?".format( texto_valor, variable, texto_elevado, resultado) card_content = "La derivada de {} {} {} es : {}".format( texto_valor, variable, texto_elevado, resultado) session_attributes = { "texto_valor": texto_valor, "variable": variable, "texto_elevado": texto_elevado, "resultado": resultado } apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).add_directive( RenderDocumentDirective( document=_load_apl_document(apl["json"]), datasources=apl["datasources"])).set_should_end_session( False) else: handler_input.response_builder.speak(speech).set_card( SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "", speech))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("noticias_fuente_categoria") card_title = "Noticias" card_content = "Estas son las noticias" attribute_manager = handler_input.attributes_manager session_attr = attribute_manager.session_attributes #session_attributes = {"valor_anterior":MAX_NOTICIAS, "noticias":None} session_attr["valor_anterior"] = MAX_NOTICIAS session_attr["noticias"] = None slots = handler_input.request_envelope.request.intent.slots try: fuente_nombre = str( slots['fuente'].resolutions.resolutions_per_authority[0]. values[0].value.name) fuente_id = str(slots['fuente'].resolutions. resolutions_per_authority[0].values[0].value.id) except: fuente_nombre = None fuente_id = None if fuente_nombre is None: handler_input.response_builder.speak(HELP_MESSAGE).ask( HELP_REPROMPT).set_card( SimpleCard(SKILL_NAME, re.sub( '<[^<]+>', "", HELP_MESSAGE))).set_should_end_session(False) return handler_input.response_builder.response try: categoria_nombre = str( slots['categoria'].resolutions.resolutions_per_authority[0]. values[0].value.name) categoria_id = str(slots['categoria'].resolutions. resolutions_per_authority[0].values[0].value.id) except: categoria_nombre = None categoria_id = None if categoria_nombre is None: handler_input.response_builder.speak(HELP_MESSAGE).ask( HELP_REPROMPT).set_card( SimpleCard(SKILL_NAME, re.sub( '<[^<]+>', "", HELP_MESSAGE))).set_should_end_session(False) return handler_input.response_builder.response data = None try: resp = requests.get( 'http://observatoriotecnologico.org.mx:8111/rss/noticias/fuente/categoria/' + fuente_id + '/' + categoria_id) data = resp.json() tema = '"' + categoria_nombre + '" en "' + fuente_nombre + "'" accion = "" if len(data) <= MAX_NOTICIAS: session_attributes = {"valor_anterior": 0, "noticias": None} accion = "<s>Estas fueron las noticias de hoy. ¿Qué más deseas realizar?</s>" else: accion = "<s>¿Deseas seguir escuchando?</s>" speechSSML = "" card_content = "" for idx, noticia in enumerate(data): if idx < MAX_NOTICIAS: card_content = card_content + "<b>" + noticia[ 'title'] + "</b><br>" + noticia['summary'] + "<br><br>" speechSSML = speechSSML + ''' ''' + ('<s><say-as interpret-as="expletive">.</say-as></s>' if idx > 0 else '') + ''' <p>''' + noticia['title'] + ''' <s><emphasis level="reduced">''' + noticia['summary'] + '''</emphasis></s> </p>''' speechSSML = speechSSML + '''<audio src='soundbank://soundlibrary/ui/gameshow/amzn_ui_sfx_gameshow_neutral_response_03'/> ''' + accion if len(data) > MAX_NOTICIAS: del data[0:MAX_NOTICIAS] #session_attributes = {"valor_anterior": MAX_NOTICIAS, "noticias":data, "count":len(data)} session_attr["valor_anterior"] = MAX_NOTICIAS session_attr["noticias"] = data #session_attr["count"] = len(data) except: print("Ocurrio algo inesperado") speech = "<speak>No entendí la pregunta. ¿Qué más deseas realizar?</speak>" #session_attributes = {"valor_anterior": 0, "noticias":data} session_attr["valor_anterior"] = 0 session_attr["noticias"] = data speech = tema + "<audio src=\'soundbank://soundlibrary/ui/gameshow/amzn_ui_sfx_gameshow_outro_01\'/>" if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: apl = apl_img_title_text(tema, card_content) handler_input.response_builder.speak( "<speak>" + speech + speechSSML + "</speak>").add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak( "<speak>" + speech + speechSSML + "</speak>").set_card( SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "", speech))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("continuar") card_title = "Noticias" card_content = "Estas son las noticias" attribute_manager = handler_input.attributes_manager session_attr = attribute_manager.session_attributes #session_attributes = {"valor_anterior":MAX_NOTICIAS, "noticias":None} #session_attr["valor_anterior"] = MAX_NOTICIAS #session_attr["noticias"] = None data = None try: #resp = requests.get('http://observatoriotecnologico.org.mx:8111/rss/noticias/portada') #data = resp.json() data = session_attr["noticias"] tema = 'Continuamos..' accion = "" if len(data) <= MAX_NOTICIAS: session_attributes = {"valor_anterior": 0, "noticias": None} accion = "<s>Estas fueron las noticias de hoy. ¿Qué más deseas realizar?</s>" else: accion = "<s>¿Deseas seguir escuchando?</s>" speechSSML = "" card_content = "" for idx, noticia in enumerate(data): if idx < MAX_NOTICIAS: card_content = card_content + "<b>" + noticia[ 'title'] + "</b><br>" + noticia['summary'] + "<br><br>" speechSSML = speechSSML + ''' ''' + ('<s><say-as interpret-as="expletive">.</say-as></s>' if idx > 0 else '') + ''' <p>''' + noticia['title'] + ''' <s><emphasis level="reduced">''' + noticia['summary'] + '''</emphasis></s> </p>''' speechSSML = speechSSML + '''<audio src='soundbank://soundlibrary/ui/gameshow/amzn_ui_sfx_gameshow_neutral_response_03'/> ''' + accion if len(data) > MAX_NOTICIAS: del data[0:MAX_NOTICIAS] #session_attributes = {"valor_anterior": MAX_NOTICIAS, "noticias":data, "count":len(data)} session_attr["valor_anterior"] = MAX_NOTICIAS session_attr["noticias"] = data #session_attr["count"] = len(data) except: print("Ocurrio algo inesperado") speech = "<speak>No entendí la pregunta. ¿Qué más deseas realizar?</speak>" #session_attributes = {"valor_anterior": 0, "noticias":data} session_attr["valor_anterior"] = 0 session_attr["noticias"] = data speech = tema if viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile( handler_input.request_envelope ) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: apl = apl_img_title_text('En ' + tema, card_content) handler_input.response_builder.speak( "<speak>" + speech + speechSSML + "</speak>").add_directive( RenderDocumentDirective(document=_load_apl_document( apl["json"]), datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak( "<speak>" + speech + speechSSML + "</speak>").set_card( SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "", speech))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("Respuesta Intent") speech = "No entendí muy bien"+ ". ¿Qué deseas realizar?" card_title = SKILL_NAME card_content = "No entendí muy bien" correcto = False try: #attr = handler_input.attributes_manager.persistent_attributes session_attr = handler_input.attributes_manager.session_attributes nivel = session_attr['nivel'] contador = session_attr['contador'] respuesta = session_attr['respuesta'] slots = handler_input.request_envelope.request.intent.slots try: respuesta_usuario = int(slots["numero"].value) except: respuesta_usuario = 0 session_attr['nivel'] = nivel except: contador = -1 if int(respuesta_usuario) == int(session_attr['respuesta']): correcto = True session_attr['correctas'] = session_attr['correctas'] +1 if correcto: tu_respuesta = "¡Correcto!. ".format(respuesta_usuario , session_attr['respuesta']) else: tu_respuesta = "Incorrecto, la respuesta correcta de {} {} {} es {} . ".format(session_attr['num1'],session_attr['op'],session_attr['num2'],session_attr['respuesta']) if nivel == 1: max_num = 10 elif nivel == 2: max_num = 20 elif nivel == 3: max_num = 50 num1 = random.randint(0,max_num) num2 = random.randint(0,max_num) if contador <= 2: card_content = "{} + {} = ? ".format(num1, num2) speech = "¿cuánto es {} más {}? .".format(num1, num2) session_attr['op'] = "más" session_attr['respuesta'] = int(num1+num2) elif contador <= 5: if num1 < num2: num1 = num2 + random.randint(0,2) if num1 > max_num: num1 = max_num card_content = "{} - {} = ? ".format(num1, num2) speech = "¿cuánto es {} menos {} ? .".format(num1, num2) session_attr['op'] = "menos" session_attr['respuesta'] = int(num1-num2) elif contador <= 8: card_content = "{} x {} = ? ".format(num1, num2) speech = "¿cuánto es {} por {} ? .".format(num1, num2) session_attr['op'] = "por" session_attr['respuesta'] = int(num1*num2) else: while True: num1 = random.randint(1,max_num) num2 = random.randint(2,max_num) if num1 % num2 == 0 and num1 != num2: break card_content = "{} / {} = ? ".format(num1, num2, num1/num2) speech = "¿cuánto es {} entre {} ? .".format(num1, num2) session_attr['op'] = "entre" session_attr['respuesta'] = int(num1/num2) session_attr['num1'] = num1 session_attr['num2'] = num2 speech = tu_respuesta +" Siguiente: "+ speech card_content = tu_respuesta +"<br><br>Siguiente: "+ card_content if contador == 10: session_attr['contador'] = 0 if int(session_attr['correctas']) == 10: calif = "¡Excelente!" elif int(session_attr['correctas']) > 7: calif = "¡Muy bien!" elif int(session_attr['correctas']) > 5: calif = "¡Bien, sigue practicando!" else: calif = "¡Necesitas practicar más!" speech = tu_respuesta +"Tu calificación es de {} de {}, {}. ¿Qué más deseas realizar?".format( int(session_attr['correctas']),contador, calif) card_content = "Tu calificación es de {} de {}".format( int(session_attr['correctas']),contador) else: session_attr['contador'] = contador +1 apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).ask(HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document(apl["json"]),datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak(speech).ask(HELP_REPROMPT).set_card(SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "",speech))).set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("Practicar Intent") speech = "No entendí muy bien"+ ". ¿Qué más deseas realizar?" card_title = SKILL_NAME card_content = "No entendí muy bien" nivel = 1 #attr = handler_input.attributes_manager.persistent_attributes session_attr = handler_input.attributes_manager.session_attributes session_attr['nivel'] = 1 session_attr['correctas'] = 0 session_attr['contador'] = 1 slots = handler_input.request_envelope.request.intent.slots try: nivel = int(slots["practica"].resolutions.resolutions_per_authority[0].values[0].value.id) session_attr['nivel'] = nivel #if 'contador' in session_attr: # contador = session_attr['contador'] except: nivel = 1 if nivel == 1: max_num = 10 elif nivel == 2: max_num = 20 elif nivel == 3: max_num = 50 num1 = random.randint(0,max_num) num2 = random.randint(0,max_num) card_content = "{} + {} = ? ".format(num1, num2) speech = "Modo de práctica de 10 preguntas: ¿cuánto es {} más {} ? .".format(num1, num2) session_attr['op'] = "más" session_attr['respuesta'] = int(num1+num2) session_attr['num1'] = num1 session_attr['num2'] = num2 #session_attr['contador'] = contador +1 apl = apl_img_title_text(card_title, card_content) if viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_LARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.HUB_ROUND_SMALL or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.TV_LANDSCAPE_XLARGE or viewport.get_viewport_profile(handler_input.request_envelope) == viewport.ViewportProfile.MOBILE_LANDSCAPE_SMALL: handler_input.response_builder.speak(speech).ask(HELP_REPROMPT).add_directive( RenderDocumentDirective(document=_load_apl_document(apl["json"]),datasources=apl["datasources"]) ).set_should_end_session(False) else: handler_input.response_builder.speak(speech).ask(HELP_REPROMPT).set_card(SimpleCard(SKILL_NAME, re.sub('<[^<]+>', "",speech))).set_should_end_session(False) return handler_input.response_builder.response