def battle_log_intent_handler(handler_input): # type: (HandlerInput) -> Response session_attr = handler_input.attributes_manager.session_attributes if 'last_battle_log' in session_attr.keys(): speech_text = '.\n'.join(session_attr['last_battle_log']) logger.info('Telling battle info.' + speech_text) if supports_display(handler_input): item_list = session_attr['last_battle_log_vec'] handler_input.response_builder.add_directive( RenderTemplateDirective( ListTemplate1(title='Battle Review', list_items=item_list))) else: speech_text = 'Seems you don\'t have a battle.' logger.info('No battle info.') # TODO: set a readable card here handler_input.response_builder.speak(speech_text).set_should_end_session( False) return handler_input.response_builder.response
def handle(self, handler_input): attr = handler_input.attributes_manager.persistent_attributes height = attr.get('height', 0) speech = Speech() speech.add_text('次は水を上げて欲しいな。楽しみに待っています。') speech_text = speech.speak() cactus_image = utils.ImageGetter().get_image(utils.get_level(height), utils.select_scene()) ret_img = Image(sources=[ImageInstance(url=cactus_image)]) title = data.SKILL_NAME primary_text = get_plain_text_content(primary_text="") if utils.supports_apl(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2( back_button=BackButtonBehavior.VISIBLE, image=ret_img, title=title, text_content=primary_text))).set_should_end_session( True) handler_input.response_builder.set_card( ui.StandardCard(title=data.get_standard_card_title(height), text=data.get_standard_card_text(height), image=ui.Image(small_image_url=cactus_image, large_image_url=cactus_image))) return handler_input.response_builder.speak(speech_text).response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In LaunchRequestHandler") attr = handler_input.attributes_manager.session_attributes attr["state"] = "WELCOME" ### Fun stuff for display backgorund### if util.supports_display(handler_input): background_img = Image(sources=[ ImageInstance(url=util.get_image( ht=1024, wd=600, label=item["abbreviation"])) ]) response_builder.add_directive( RenderTemplateDirective( ListTemplate1(token="Hear-o", back_button=BackButtonBehavior.HIDDEN, background_image=background_img, title="Hear-o", list_items=item_list))) ################################################################### handler_input.response_builder.speak( util.speak_in_english(data.WELCOME_MESSAGE)).ask( util.speak_in_english(data.WELCOME_MESSAGE)) return handler_input.response_builder.response
def build_response(handler_input, card_title, card_text, speech_text, img_tuple=None, end_session=False): if handler_input.attributes_manager.session_attributes["drunk_mode_state"]: speech_text = '<prosody rate="slow"><emphasis level="strong">' + speech_text + '</emphasis></prosody>' if img_tuple and supports_display(handler_input): card = StandardCard(card_title, card_text, ui.Image(img_tuple[1], img_tuple[1])) img = Image('Meme', [ImageInstance(url=img_tuple[1])]) reddit_text = TextContent(primary_text=PlainText(img_tuple[0]), secondary_text=PlainText(img_tuple[2])) directive = RenderTemplateDirective( BodyTemplate2(back_button=BackButtonBehavior.VISIBLE, image=img, title=card_title, text_content=reddit_text)) handler_input.response_builder.speak(speech_text).set_card( card).add_directive(directive).set_should_end_session(end_session) else: card = SimpleCard(card_title, card_text) handler_input.response_builder.speak(speech_text).set_card( card).set_should_end_session(end_session) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response destinations_choice = handler_input.attributes_manager.session_attributes.get( 'destinations_choice') fof_sfn_input = { 'alexa_user_id': handler_input.request_envelope.context.system.user.user_id, 'IsPreResponse': False, 'state': 'Launch', 'destinations_choice': destinations_choice, 'env_type': util.get_env_type(handler_input) } response = sfn_ctl.execute(fof_sfn_input) if response.get('destinations_choice'): handler_input.attributes_manager.session_attributes[ 'destinations_choice'] = response['destinations_choice'] handler_input.attributes_manager.session_attributes['state'] = \ response['state'] if response.get('node'): handler_input.attributes_manager.session_attributes['node'] = \ response['node'] print(f'response: {response}, type: {type(response)}') speech_text = response["response_text"] image_url = response.get('image_url') bg_image_url = response.get('bg_image_url') image_title = response.get('image_title') image_text = response.get('image_text') if image_url: img_obj = Image(sources=[ImageInstance(url=image_url)]) bg_img_obj = Image(sources=[ImageInstance(url=bg_image_url)]) if util.is_support_display(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate7( back_button=BackButtonBehavior.VISIBLE, image=img_obj, background_image=bg_img_obj, title='') ) ) else: handler_input.response_builder.set_card( ui.StandardCard( title='', text='', image=ui.Image( small_image_url=image_url, large_image_url=image_url ) ) ) handler_input.response_builder.speak(speech_text).ask( speech_text).set_should_end_session( response.get('set_should_end_session', True)) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In DivisionHandler") attr = handler_input.attributes_manager.session_attributes attr["state"] = "QUIZ" if is_intent_name("DivisionIntent")(handler_input): attr["counter"] = 0 attr["quiz_score"] = 0 question = util.ask_division(handler_input) level = "division level 1" attr["type"] = "division" else: question = util.ask_division_levelUp(handler_input) level = "division level 2" attr["type"] = "division_1" response_builder = handler_input.response_builder response_builder.speak(data.START_QUIZ_MESSAGE.format(str(level)) + question) response_builder.ask(question) item_list = [] if util.supports_display(handler_input): item = attr["quiz_item"] item_attr = attr["quiz_attr"] title = "Question #{} Khan: {}".format(str(attr["counter"]),kahn.URL_generate(str(attr["type"]))) # title = "Khan URL: {}".format(kahn.URL_generate(str(attr["type"]))) if is_intent_name("DivisionIntent")(handler_input): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data.DIVISION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) else: background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data_1.DIVISION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) response_builder.add_directive( RenderTemplateDirective( ListTemplate1( token="Question", back_button=BackButtonBehavior.HIDDEN, background_image=background_img, title=title, list_items=item_list))) return response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In QuizHandler") attr = handler_input.attributes_manager.session_attributes attr["state"] = "QUIZ" attr["counter"] = 0 attr["quiz_score"] = 0 attr["score"] = 0 question = util.ask_question(handler_input) response_builder = handler_input.response_builder response_builder.speak(data.START_QUIZ_MESSAGE + ( "Here is your {} question. " ).format(util.get_ordinal_indicator(attr["counter"])) + question) response_builder.ask(question) logger.info("after question asked") if data.USE_CARDS_FLAG: item = attr["quiz_item"] response_builder.set_card( ui.StandardCard( title="Question #1", text=data.START_QUIZ_MESSAGE + question, image=ui.Image( small_image_url=util.get_small_image(item), large_image_url=util.get_large_image(item)))) logger.info("after USE_CARDS_FLAG") if util.supports_display(handler_input): item = attr["quiz_item"] item_attr = attr["quiz_attr"] title = "Question #{}".format(str(attr["counter"])) background_img = Image(sources=[ ImageInstance(url=util.get_image( ht=1024, wd=600, label=item["abbreviation"])) ]) item_list = [] for ans in util.get_multiple_choice_answers( item, item_attr, data.STATES_LIST): item_list.append( ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) response_builder.add_directive( RenderTemplateDirective( ListTemplate1(token="Question", back_button=BackButtonBehavior.HIDDEN, background_image=background_img, title=title, list_items=item_list))) logger.info("about to return") return response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info( "Improvement log: User request to get more info after initial lodging search" ) attribute_manager = handler_input.attributes_manager session_attr = attribute_manager.session_attributes slots = handler_input.request_envelope.request.intent.slots user_lodging_nr = slots["lodging_nr"].value lodgings_detail_list = session_attr["lodgings_detail_list"] lodging_details = lodgings_detail_list[int(user_lodging_nr) - 1] logger.info("Improvement log: User asked for more info on " + lodging_details[1]) # Format the final answer speech for the user final_speech = "" phone_nr = "" if (len(lodgings_detail_list) < int(user_lodging_nr)): final_speech += "I don't have any info on that because I didn't mention that number. \ Please try with one of the numbers I mentioned before" handler_input.response_builder.speak(final_speech) return handler_input.response_builder.response else: final_speech += "The address of <lang xml:lang='de-DE'> " + lodging_details[1] + "</lang> is <lang xml:lang='it-IT'>" \ + lodging_details[2] + "</lang>. Their phone number is " + lodging_details[3] + " . " card_info = "{}, {}.\nPhone number: {}\n".format( lodging_details[1], lodging_details[2], lodging_details[3]) if (dev_supports_display(handler_input)): primary_text = get_rich_text_content(card_info) final_speech += "Looks like you have a display, you can also check the details I just mentioned there. \ Have a good time and see you later." handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate1(title=data.SKILL_NAME, text_content=primary_text))) else: final_speech += "I'm sending you this info also on the Alexa app so you can check it there. Have a good time and see you later." handler_input.response_builder.set_card( SimpleCard(title=data.SKILL_NAME, content=card_info)) logger.info( "Improvement log: User got all the extra info for the lodging search" ) handler_input.response_builder.speak(final_speech) session_attr["lodgings_detail_list"] = None return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In LaunchRequestHandler") # handler_input.response_builder.speak(WELCOME_MESSAGE).ask( # HELP_MESSAGE) response_builder = handler_input.response_builder speech = PRIMARY_TEXT viewport_state = handler_input.request_envelope.context.viewport if not viewport_state: speech = "La Skill funziona solo sui device con schermo" response_builder.speak(speech) return response_builder.set_should_end_session(True).response response_builder.speak(speech) if USE_CARDS_FLAG: response_builder.set_card( ui.StandardCard(title=TITLE, text=PRIMARY_TEXT, image=ui.Image( small_image_url=IMG_PATH, large_image_url=IMG_PATH, ))) if supports_display(handler_input) and not supports_APL(handler_input): logger.info("Supports Display") title = TITLE fg_img7 = Image(content_description=PRIMARY_TEXT, sources=[ImageInstance(url=IMG_PATH)]) response_builder.add_directive( RenderTemplateDirective( BodyTemplate7(back_button=BackButtonBehavior.HIDDEN, image=fg_img7, title=title))) if supports_APL(handler_input): logger.info("Supports APL") response_builder.add_directive( RenderDocumentDirective( token=APP_NAME + "_Token", document=_load_apl_document("RadarMeteoAPL.json"), datasources={"param": { 'url': IMG_PATH }})).add_directive( ExecuteCommandsDirective( token=APP_NAME + "_Token", commands=[ IdleCommand(delay=5, description="wait_a_bit") ])).add_directive( ExecuteCommandsDirective( token=APP_NAME + "_Token", commands=[ IdleCommand(delay=5, description="last command") ])) return response_builder.set_should_end_session(True).response
def boss_info_intent_handler(handler_input): # type: (HandlerInput) -> Response query = get_slot_value(handler_input, 'bossname') if not query: attr = handler_input.attributes_manager.persistent_attributes cur_char = Character(attr['character']) query = data.BOSS_OF_FLOOR[cur_char.floor - 1] logger.info('query:' + query) if query and query in data.MOB_INFO: info = data.MOB_INFO[query] speech_text = 'Boss {}. It has attack of {}, defense of {}, and HP of {}. '.format( query.title(), info['attack'], info['defense'], info['hp']) if len(info['skill']): speech_text += 'Also, it can use {}'.format(info['skill']) title = 'Boss Info: ' + query.title() text = 'HP: {} \nAttack: {} Defense: {}\n Agility: {} Dexterity: {}'.format( info['hp'], info['attack'], info['defense'], info['speed'], info['cast_speed']) if len(info['skill']): text += '\n Skill: {}'.format(info['skill']) handler_input.response_builder.set_card( ui.StandardCard(title=title, text=text, image=ui.Image( small_image_url=data.MONSTER_AVATAR[query], large_image_url=data.MONSTER_AVATAR[query]))) if supports_display(handler_input): img = Image( sources=[ImageInstance(url=data.MONSTER_AVATAR[query])]) primary_text = 'HP: {} <br/>Attack: {} <br/>Defense: {}<br/> Agility: {} <br/>Dexterity: {}'.format( info['hp'], info['attack'], info['defense'], info['speed'], info['cast_speed']) if len(info['skill']): primary_text += '<br/> Skill: {}'.format(info['skill']) primary_text = get_rich_text_content(primary_text) handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2(back_button=BackButtonBehavior.VISIBLE, image=img, title=title, text_content=primary_text))) else: speech_text = "You can ask me the current floor's boss or any boss with a name " handler_input.response_builder.speak(speech_text).set_should_end_session( False) return handler_input.response_builder.response
def skill_info_intent_handler(handler_input): # type: (HandlerInput) -> Response query = get_slot_value(handler_input, 'skill') if not query: speech_text = "You can ask me a skill with a name. " elif query.title() in data.SKILL_INFO: info = data.SKILL_INFO[query.title()] speech_text = '{} has damage rate of {}. It needs {} time units to cast, and costs {} MP. '.format( query.title(), info['rate'], info['cast'], info['mp']) title = 'Skill Info: ' + query.title() text = 'Damage Rate: {}\n Cast Time: {}\n MP cost: {}'.format( info['rate'], info['cast'], info['mp']) if info['effect']: speech_text += 'Also, it can make the enemy into {}'.format( info['effect']) text += '\n Effect: {}'.format(info['effect']) handler_input.response_builder.set_card( ui.StandardCard(title=title, text=text, image=ui.Image( small_image_url=data.MONSTER_AVATAR['?'], large_image_url=data.MONSTER_AVATAR['?']))) if supports_display(handler_input): img = Image(sources=[ImageInstance(url=data.MONSTER_AVATAR['?'])]) primary_text = 'Damage Rate: {}<br/> Cast Time: {} MP cost: {}'.format( info['rate'], info['cast'], info['mp']) if info['effect']: primary_text += '<br/> Effect: {}'.format(info['effect']) primary_text = get_rich_text_content(primary_text) handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2(back_button=BackButtonBehavior.VISIBLE, image=img, title=title, text_content=primary_text))) else: speech_text = '{} is not a skill. '.format(query.title()) logger.info('query:' + query) handler_input.response_builder.speak(speech_text).set_should_end_session( False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response session_id = handler_input.request_envelope.session.session_id speech_text = get_next_item(session_id) # Build GUI current_post = get_current_post(session_id) template = get_gui_template(current_post) # Build response handler_input.response_builder \ .speak(speech_text) \ .add_directive(RenderTemplateDirective(template)) \ .set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): last_watered_date = utils.get_last_watered_date(handler_input) height = utils.get_cactus_height(handler_input) speech_text = LaunchResponseCreator().create_response( height, last_watered_date, handler_input) cactus_image = utils.ImageGetter().get_image(utils.get_level(height), utils.select_scene()) logger.info(f'launch_h, cactus_image: {cactus_image}') ret_img = Image(sources=[ImageInstance(url=cactus_image)]) primary_text = get_plain_text_content(primary_text="") if utils.supports_apl(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2(back_button=BackButtonBehavior.VISIBLE, image=ret_img, title=data.SKILL_NAME, text_content=primary_text))) handler_input.response_builder.set_card( ui.StandardCard(title=data.get_standard_card_title(height), text=data.get_standard_card_text(height), image=ui.Image(small_image_url=cactus_image, large_image_url=cactus_image))) should_end_session = True status = 'check_state' scene = get_scene(handler_input) if scene == 'water': should_end_session = False status = 'confirmation' elif scene == 'upsell': should_end_session = False status = 'isp_better_water' handler_input.attributes_manager.session_attributes['status'] = status if should_end_session: return handler_input.response_builder.speak( speech_text).set_should_end_session( should_end_session).response return handler_input.response_builder.speak(speech_text).ask( speech_text).set_should_end_session(should_end_session).response
def include_display(handler_input): #Display Template Code if supports_display(handler_input): img = Image(sources=[ ImageInstance( url="https://d1yy08fpd1djho.cloudfront.net/travel-large.jpeg") ]) title = "Adventure Guru" primary_text = get_plain_text_content( primary_text= "Echo Display Screen: RenderTemplateDirective with BodyTemplate2") handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2(back_button=BackButtonBehavior.VISIBLE, image=img, title=title, text_content=primary_text)))
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In RandomIntent") _ = handler_input.attributes_manager.request_attributes["_"] response_builder = handler_input.response_builder if supports_display(handler_input): img = Image(sources=[ImageInstance(url=_(data.IMAGE_URL))]) # https://developer.amazon.com/docs/custom-skills/display-template-reference.html response_builder.add_directive( RenderTemplateDirective( BodyTemplate7( token="Answer", back_button=BackButtonBehavior.HIDDEN, title=_(data.IMAGE_TITLE), image=img))) return response_builder.speak(_(data.ANSWER)).set_should_end_session(True).response
def handle(self, handler_input): # build VUI speech_text = data.WELCOME_PROMPT # build GUI template = BodyTemplate6( background_image=data.welcome_image, text_content=get_plain_text_content(primary_text="Welcome to " + data.SKILL_NAME)) print("LaunchRequest template: " + template.to_str()) # build response handler_input.response_builder \ .speak(speech_text) \ .add_directive(RenderTemplateDirective(template)) \ .set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In QuizHandler") attr = handler_input.attributes_manager.session_attributes attr["state"] = "QUIZ" attr["counter"] = 0 attr["quiz_score"] = 100 attr['ready'] = [] question = util.ask_question(handler_input) response_builder = handler_input.response_builder response_builder.speak(data.START_QUIZ_MESSAGE + question) response_builder.ask(question) if data.USE_CARDS_FLAG: item = attr["quiz_item"] response_builder.set_card( ui.StandardCard( title="Question #1", text=data.START_QUIZ_MESSAGE + question, )) if util.supports_display(handler_input): item = attr["quiz_item"] item_attr = attr["quiz_attr"] title = "Question #{}".format(str(attr["counter"])) item_list = [] for ans in util.get_multiple_choice_answers( item, item_attr, data.STATES_LIST): item_list.append( ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) response_builder.add_directive( RenderTemplateDirective( ListTemplate1(token="Question", back_button=BackButtonBehavior.HIDDEN, title=title, list_items=item_list))) return response_builder.response
def handle(self, handler_input): # Build VUI session_id = handler_input.request_envelope.session.session_id current_post = get_current_post(session_id) current_post_title = current_post.title if current_post is None: speech_text = data.SORRY_EMPTY_PROMPT else: speech_text = current_post_title # Build GUI template = get_gui_template(current_post) # Build response handler_input.response_builder\ .speak(speech_text)\ .add_directive(RenderTemplateDirective(template)) \ .set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In DefinitionHandler") response_builder = handler_input.response_builder item, is_resolved = util.get_item( slots=handler_input.request_envelope.request.intent.slots, states_list=data.STATES_LIST) if is_resolved: if data.USE_CARDS_FLAG: response_builder.set_card( ui.StandardCard( title=util.get_card_title(item), text=util.get_card_description(item), image=ui.Image( small_image_url=util.get_small_image(item), large_image_url=util.get_large_image(item) ))) if util.supports_display(handler_input): img = Image( sources=[ImageInstance(url=util.get_large_image(item))]) title = util.get_card_title(item) primary_text = get_plain_text_content( primary_text=util.get_card_description(item)) response_builder.add_directive( RenderTemplateDirective( BodyTemplate2( back_button=BackButtonBehavior.VISIBLE, image=img, title=title, text_content=primary_text))) response_builder.speak( util.get_speech_description(item)).ask(data.REPROMPT_SPEECH) else: response_builder.speak( util.get_bad_answer(item)).ask(util.get_bad_answer(item)) return response_builder.response
def render(handler_input, message): # Check for display if not handler_input.request_envelope.context.system.device.supported_interfaces.display: print('No display to render.') return if not message.get('display_text'): print('Render template without primary text!') text = message.get('display_text', '') if isinstance(text, list): text = settings.pick_random(text) subtext = message.get('display_subtext', '') if isinstance(subtext, list): subtext = settings.pick_random(subtext) background = ( message.get('bg_image') or settings.pick_random(settings.IMAGES['background']) ) data = { 'back_button': BackButtonBehavior('HIDDEN'), 'background_image': Image(sources=[ImageInstance(url=background)]), 'title': message['display_title'], 'text_content': TextContent(PlainText(text), PlainText(subtext)), } if message.get('image'): image = Image(sources=[ImageInstance(url=message['image'])]) template = BodyTemplate3(**data, image=image) else: template = BodyTemplate1(**data) directive = RenderTemplateDirective(template=template) handler_input.attributes_manager.request_attributes['directives'].append(directive)
def handle(self, handler_input): # type: (HandlerInput) -> Response session_id = handler_input.request_envelope.session.session_id current_post_id = get_current_post(session_id).id if not current_post_id: speech_text = data.UNABLE_TO_UPVOTE_PROMPT elif reddit_api.upvote_a_post(current_post_id): speech_text = data.UPVOTE_SUCCESSFUL_PROMPT else: speech_text = data.UNABLE_TO_UPVOTE_PROMPT # Build GUI current_post = get_current_post(session_id) template = get_gui_template(current_post) # Build response handler_input.response_builder \ .speak(speech_text) \ .add_directive(RenderTemplateDirective(template)) \ .set_should_end_session(False) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In LaunchRequestHandler") # handler_input.response_builder.speak(data.WELCOME_MESSAGE).ask( # data.HELP_MESSAGE) response_builder = handler_input.response_builder background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) response_builder.add_directive( RenderTemplateDirective( BodyTemplate3( title="", token="Question", background_image=background_img))) response_builder.speak(data.WELCOME_MESSAGE) # return handler_input.response_builder.response, return response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response intent = handler_input.request_envelope.request.intent sub_reddit_name = get_slot_value(intent) print("Resolving sub reddit name to ", sub_reddit_name) hot_trending_posts_posts = reddit_api.get_subreddit_posts_by_name( sub_reddit_name) speech_text = data.SORRY_EMPTY_PROMPT try: session_id = handler_input.request_envelope.session.session_id print("session_id here is", session_id) for i in range(len(hot_trending_posts_posts)): if hot_trending_posts_posts[i].title: speech_text = hot_trending_posts_posts[i].title session_index[session_id] = i session_posts[session_id] = hot_trending_posts_posts break except Exception as e: reddit_api.print_exception_details(e) print("SpeechText ", speech_text) # Build GUI session_id = handler_input.request_envelope.session.session_id current_post = get_current_post(session_id) template = get_gui_template(current_post) # Build response handler_input.response_builder \ .speak(speech_text) \ .add_directive(RenderTemplateDirective(template))\ .set_should_end_session(False) return handler_input.response_builder.response
def build_template( handler_input, response_dict={}, template_name="simple", end_session=False, ): """ Builds a jinja response template Args: handler_input response_dict (dict): speech card_type card_title onscreen_primary onscreen_secondary onscreen_tertiary reprompt image ... template_name (string) end_session (bool) """ try: speech_text = response_dict.get("speech", None) card_type = response_dict.get("card_type", "simple") card_title = response_dict.get("card_title", "Tidebreak") onscreen_primary = response_dict.get("onscreen_primary", speech_text) onscreen_secondary = response_dict.get("onscreen_secondary", "") onscreen_tertiary = response_dict.get("onscreen_tertiary", "") reprompt = response_dict.get("reprompt", None) image = response_dict.get("image", None) except Exception: logger.debug("Error getting response_dict") # data_map = { # "type": "APL", # "version": "1.2", # "description": "Tidebreak APL Response", # "settings": {}, # "theme": "dark", # "import": [{"name": "alexa-layouts", "version": "1.1.0"}], # "resources": [], # "styles": {}, # "onMount": [], # "graphics": {}, # "commands": {}, # "layouts": {}, # "mainTemplate": {"parameters": ["payload"]}, # "items": [], # } # data_map.get("items").append( # { # "type": "Text", # "height": "100vh", # "textAlign": "center", # "textAlignVertical": "center", # "text": onscreen_primary, # } # ) if speech_text: handler_input.response_builder.speak(speech_text) if card_type: card = StandardCard(title=card_title, text=onscreen_primary) handler_input.response_builder.set_card(card) if get_supported_interfaces( handler_input).alexa_presentation_apl is not None: datasources = _load_apl_document("tidebreak.json").get("datasources") datasources.get("bodyTemplate2Data")["title"] = "Tidebreak" datasources.get("bodyTemplate2Data").get("textContent").get( "title")["text"] = card_title datasources.get("bodyTemplate2Data").get("textContent").get( "primaryText")["text"] = onscreen_primary datasources.get("bodyTemplate2Data").get("textContent").get( "exits")["text"] = onscreen_tertiary datasources.get("bodyTemplate2Data").get("textContent").get( "contents")["text"] = onscreen_secondary handler_input.response_builder.add_directive( RenderDocumentDirective( document=_load_apl_document("tidebreak.json").get("document"), datasources=datasources, token="tidebreakToken", )) elif supports_display(handler_input): text = get_rich_text_content( primary_text=onscreen_primary, secondary_text=onscreen_secondary, tertiary_text=onscreen_tertiary, ) handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2(title=card_title, text_content=text))) else: pass if reprompt: handler_input.response_builder.ask(reprompt) handler_input.response_builder.set_should_end_session(end_session) return handler_input.response_builder.response
def handle(self, handler_input): status = handler_input.attributes_manager.session_attributes.get('status') attr = handler_input.attributes_manager.persistent_attributes if status == 'confirmation': before_height = attr.get('height') in_skill_response = utils.in_skill_product_resposne(handler_input) logger.info(f'in_skill_response: {in_skill_response}') grow_rate_of_up = 1.0 if utils.is_subscriptable(handler_input): grow_rate_of_up = 1.5 grow = utils.get_grow_value() * Decimal(grow_rate_of_up) grow_height = before_height + grow if before_height else grow attr['height'] = grow_height attr['last_watered_date'] = str(datetime.date.today()) handler_input.attributes_manager.persistent_attributes = attr handler_input.attributes_manager.save_persistent_attributes() speech = Speech() speech.audio(utils.get_sound_url(data.SOUND_FLOWER)) if not before_height: speech.add_text(f""" <say-as interpret-as="interjection">わ〜い</say-as>。 とっても可愛いですね! 全長は{grow_height}ミリメートルです。 明日の様子も楽しみですね。 """) else: speech.add_text(f""" 水やりが終わりました。 {grow}ミリ成長しました! 全長は{grow_height}ミリメートルです。 明日も成長が楽しみですね。 """) speech_text = speech.speak() cactus_image = utils.ImageGetter().get_image( utils.get_level(grow_height), utils.select_scene() ) ret_img = Image(sources=[ImageInstance(url=cactus_image)]) title = data.SKILL_NAME primary_text = get_plain_text_content( primary_text="") if utils.supports_apl(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2( back_button=BackButtonBehavior.VISIBLE, image=ret_img, title=title, text_content=primary_text ))).set_should_end_session(True) handler_input.response_builder.set_card( ui.StandardCard( title=data.get_standard_card_title(grow_height), text=data.get_standard_card_text(grow_height), image=ui.Image( small_image_url=cactus_image, large_image_url=cactus_image ) ) ) return handler_input.response_builder.speak(speech_text).response elif status == 'check_status': height = utils.get_cactus_height(handler_input) speech = Speech() speech.add_text(f'全長は{height}ミリメートルです。' f'明日も成長が楽しみですね。') speech_text = speech.speak() cactus_image = utils.ImageGetter().get_image( utils.get_level(height), utils.select_scene() ) ret_img = Image(sources=[ImageInstance(url=cactus_image)]) primary_text = get_plain_text_content(primary_text='') if utils.supports_apl(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate2( back_button=BackButtonBehavior.VISIBLE, image=ret_img, title=data.SKILL_NAME, text_content=primary_text ) ) ).set_should_end_session(True) handler_input.response_builder.set_card( ui.StandardCard( title=data.get_standard_card_title(height), text=data.get_standard_card_text(height), image=ui.Image( small_image_url=cactus_image, large_image_url=cactus_image ) ) ) return handler_input.response_builder.speak(speech_text).response elif status == 'isp_better_water': return BuyHandler().handle(handler_input) else: speech_text = data.ERROR_SESSION_END_MESSAGE handler_input.response_builder.speak(speech_text).set_card( SimpleCard(data.SKILL_NAME, speech_text)).set_should_end_session( True) return handler_input.response_builder.response
def handle(self, handler_input: HandlerInput) -> Optional[Response]: session = handler_input.attributes_manager.session_attributes destinations_choice = session.get('destinations_choice') fof_sfn_input = { 'alexa_user_id': handler_input.request_envelope.context.system.user.user_id, 'IsPreResponse': False, 'intent': 'GaneshaShopIntent', 'state': 'Ganesha', 'destinations_choice': destinations_choice, 'env_type': util.get_env_type(handler_input), } if 'node' in session: if session.get('state') == 'Ganesha': fof_sfn_input['node'] = session['node'] response = sfn_ctl.execute(fof_sfn_input) if 'state' in response: session['state'] = response['state'] if 'node' in response: session['node'] = response['node'] if 'turn_times' in response: session['turn_times'] = response['turn_times'] speech_text = response["response_text"] image_url = response.get('image_url') bg_image_url = response.get('bg_image_url') image_title = response.get('image_title') image_text = response.get('image_text') if image_url: img_obj = Image(sources=[ImageInstance(url=image_url)]) bg_img_obj = Image(sources=[ImageInstance(url=bg_image_url)]) if util.is_support_display(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate7( back_button=BackButtonBehavior.VISIBLE, image=img_obj, background_image=bg_img_obj, title='') ) ) else: handler_input.response_builder.set_card( ui.StandardCard( title='', text='', image=ui.Image( small_image_url=image_url, large_image_url=image_url ) ) ) handler_input.response_builder.speak(speech_text).ask( speech_text) return handler_input.response_builder.response
def handle(self, handler_input: HandlerInput) -> Response: session = handler_input.attributes_manager.session_attributes state = session.get('state') node = session.get('node') destinations_choice = session.get('destinations_choice') total_ticket_amount = session.get('total_ticket_amount') turn_times = session.get('turn_times') not_enough_gem = session.get('not_enough_gem') fof_sfn_input = { 'alexa_user_id': handler_input.request_envelope.context.system.user.user_id, 'IsPreResponse': False, 'intent': 'AMAZON.YesIntent', 'state': state, 'node': node, 'destinations_choice': destinations_choice, 'total_ticket_amount': total_ticket_amount, 'turn_times': turn_times, 'not_enough_gem': not_enough_gem, 'env_type': util.get_env_type(handler_input) } if node: fof_sfn_input['node'] = node if node == 'recommend_gem' or node == 'ask_gem_pack': in_skill_response = util.in_skill_product_response( handler_input) product_name = session.get('product_name') skill_product = util.get_skill_product( in_skill_response, product_name) return handler_input.response_builder.add_directive( SendRequestDirective( name='Buy', payload={ 'InSkillProduct': { 'productId': skill_product.product_id } }, token='correlationToken' ) ).response print(fof_sfn_input) response = sfn_ctl.execute(fof_sfn_input) if 'state' in response: session['state'] = response['state'] if 'node' in response: session['node'] = response['node'] if 'destinations_choice' in response: session['destinations_choice'] = response['destinations_choice'] if 'turn_times' in response: session['turn_times'] = response['turn_times'] if 'total_ticket_amount' in response: session['total_ticket_amount'] = response['total_ticket_amount'] if 'product_name' in response: session['product_name'] = response['product_name'] if 'not_enough_gem' in response: session['not_enough_gem'] = response['not_enough_gem'] image_url = response.get('image_url') bg_image_url = response.get('bg_image_url') image_title = response.get('image_title') image_text = response.get('image_text') if image_url: img_obj = Image(sources=[ImageInstance(url=image_url)]) bg_img_obj = Image(sources=[ImageInstance(url=bg_image_url)]) if util.is_support_display(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate7( back_button=BackButtonBehavior.VISIBLE, image=img_obj, background_image=bg_img_obj, title='') ) ) else: handler_input.response_builder.set_card( ui.StandardCard( title='', text='', image=ui.Image( small_image_url=image_url, large_image_url=image_url ) ) ) speech_text = response["response_text"] handler_input.response_builder.speak(speech_text).ask(speech_text) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In QuizAnswerHandler") attr = handler_input.attributes_manager.session_attributes response_builder = handler_input.response_builder item = attr["quiz_item"] item_attr = attr["quiz_attr"] is_ans_correct = util.compare_token_or_slots( handler_input=handler_input, value=item[item_attr]) if is_ans_correct: speech = util.get_speechcon(correct_answer=True) attr["quiz_score"] += 1 handler_input.attributes_manager.session_attributes = attr else: speech = util.get_speechcon(correct_answer=False) speech += util.get_answer(item_attr, item) if attr['counter'] < data.MAX_ALL_QUESTIONS: # Ask another question speech += util.get_current_score( attr["quiz_score"], attr["counter"]) if attr['counter'] < data.MAX_QUESTIONS: if(attr.get("type")=="addition"): question = util.ask_addition(handler_input) elif(attr.get("type")=="subtraction"): question = util.ask_subtraction(handler_input) elif(attr.get("type")=="multiplication"): question = util.ask_multiplication(handler_input) elif(attr.get("type")=="division"): question = util.ask_division(handler_input) else: question = util.ask_question(handler_input) speech += question reprompt = question elif attr['counter'] == data.MAX_QUESTIONS: speech += data.NEXT_LEVEL_MESSAGE return response_builder.speak(speech).response else: if(attr.get("type")=="addition_1"): question = util.ask_addition_levelUp(handler_input) elif(attr.get("type")=="subtraction_1"): question = util.ask_subtraction_levelUp(handler_input) elif(attr.get("type")=="multiplication_1"): question = util.ask_multiplication_levelUp(handler_input) elif(attr.get("type")=="division_1"): question = util.ask_division_levelUp(handler_input) else: question = util.ask_question(handler_input) speech += question reprompt = question # Update item and item_attr for next question item = attr["quiz_item"] item_attr = attr["quiz_attr"] item_list = [] if util.supports_display(handler_input): if(attr.get("type")=="subtraction"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data.SUBTRACTION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) elif(attr.get("type")=="subtraction_1"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data_1.SUBTRACTION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) elif(attr.get("type")=="multiplication"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data.MULTIPLICATION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) elif(attr.get("type")=="multiplication_1"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data_1.MULTIPLICATION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) elif(attr.get("type")=="division"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data.DIVISION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) elif(attr.get("type")=="division_1"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data_1.DIVISION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) elif(attr.get("type")=="addition"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data.ADDITION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) elif(attr.get("type")=="addition_1"): background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) for ans in util.get_multiple_choice_answers( item, item_attr, data_1.ADDITION_LIST): item_list.append(ListItem( token=ans, text_content=get_plain_text_content(primary_text=ans))) title = "Question #{}".format(str(attr["counter"])) response_builder.add_directive( RenderTemplateDirective( ListTemplate1( token="Question", back_button=BackButtonBehavior.HIDDEN, background_image=background_img, title=title, list_items=item_list))) return response_builder.speak(speech).ask(reprompt).response else: # Finished all questions. speech += util.get_final_score(attr["quiz_score"], attr["counter"]) if attr["quiz_score"] >= data.MAX_QUESTIONS: speech += data.JOKE_MESSAGE speech += util.get_joke() else: speech += data.MATH_MESSAGE speech += util.get_math() speech += data.EXIT_SKILL_MESSAGE # response_builder.set_should_end_session(True) if util.supports_display(handler_input): title = "Thank you for playing" primary_text = get_rich_text_content( primary_text=util.get_final_score( attr["quiz_score"], attr["counter"])) # response_builder.add_directive( # RenderTemplateDirective( # BodyTemplate1( # back_button=BackButtonBehavior.HIDDEN, # title=title, # text_content=primary_text # ))) background_img = Image( sources=[ImageInstance( url="https://ppt.cc/[email protected]")]) response_builder.add_directive( RenderTemplateDirective( BodyTemplate3( title="", token="Question", background_image=background_img))) return response_builder.speak(speech).response
def handle(self, handler_input: HandlerInput): in_skill_response = util.in_skill_product_response(handler_input) if not in_skill_response: return handler_input.response_builder.speak( '購入処理でエラーが発生しました。' 'もう一度試すか、カスタマーサービスにご連絡ください。' ).response purchase_result = handler_input.request_envelope.request.payload.get( 'purchaseResult') should_end_session = False speech = '購入フローにはいりませんでした。' if purchase_result == PurchaseResult.ACCEPTED.value: # ユーザーは製品の購入オファーを受け入れました # ex) amzn1.adg.product.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX product_id = handler_input.request_envelope.request.payload.get( 'productId') product = util.get_skill_product( in_skill_response, product_id=product_id) fof_sfn_input = { 'alexa_user_id': handler_input.request_envelope.context.system.user.user_id, 'IsPreResponse': True, 'intent': 'Connections.Response', 'product_reference_name': product.reference_name, 'env_type': util.get_env_type(handler_input) } response = sfn_ctl.execute(fof_sfn_input) session = handler_input.attributes_manager.session_attributes if 'state' in response: session['state'] = response['state'] if 'node' in response: session['node'] = response['node'] if 'destinations_choice' in response: session['destinations_choice'] = response[ 'destinations_choice'] if 'turn_times' in response: session['turn_times'] = response['turn_times'] if 'total_ticket_amount' in response: session['total_ticket_amount'] = response[ 'total_ticket_amount'] image_url = response.get('image_url') bg_image_url = response.get('bg_image_url') image_title = response.get('image_title') image_text = response.get('image_text') if image_url: img_obj = Image(sources=[ImageInstance(url=image_url)]) bg_img_obj = Image(sources=[ImageInstance(url=bg_image_url)]) if util.is_support_display(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate7( back_button=BackButtonBehavior.VISIBLE, image=img_obj, background_image=bg_img_obj, title='') ) ) else: handler_input.response_builder.set_card( ui.StandardCard( title='', text='', image=ui.Image( small_image_url=image_url, large_image_url=image_url ) ) ) speech = response["response_text"] elif purchase_result == PurchaseResult.DECLINED.value: session = handler_input.attributes_manager.session_attributes destinations_choice = session.get('destinations_choice') fof_sfn_input = { 'alexa_user_id': handler_input.request_envelope.context.system.user.user_id, 'IsPreResponse': False, 'state': 'Launch', 'destinations_choice': destinations_choice, 'env_type': util.get_env_type(handler_input) } response = sfn_ctl.execute(fof_sfn_input) if 'state' in response: session['state'] = response['state'] if 'node' in response: session['node'] = response['node'] speech = response["response_text"] image_url = response.get('image_url') bg_image_url = response.get('bg_image_url') image_title = response.get('image_title') image_text = response.get('image_text') if image_url: img_obj = Image(sources=[ImageInstance(url=image_url)]) bg_img_obj = Image(sources=[ImageInstance(url=bg_image_url)]) if util.is_support_display(handler_input): handler_input.response_builder.add_directive( RenderTemplateDirective( BodyTemplate7( back_button=BackButtonBehavior.VISIBLE, image=img_obj, background_image=bg_img_obj, title='') ) ) else: handler_input.response_builder.set_card( ui.StandardCard( title='', text='', image=ui.Image( small_image_url=image_url, large_image_url=image_url ) ) ) elif purchase_result == PurchaseResult.ERROR.value: # 内部エラーが発生しました speech = '内部エラーが発生しました' should_end_session = True elif purchase_result == PurchaseResult.ALREADY_PURCHASED.value: # ユーザーはすでに製品を購入しています speech = 'ユーザーはすでに製品を購入しています' elif purchase_result == PurchaseResult.NOT_ENTITLED.value: # ユーザーは資格のない製品をキャンセル/返品しようとしました speech = 'ユーザーは資格のない製品をキャンセルまたは返品しようとしました' handler_input.response_builder.speak(speech).ask( speech).set_should_end_session(should_end_session) return handler_input.response_builder.response
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In QuizAnswerHandler") attr = handler_input.attributes_manager.session_attributes response_builder = handler_input.response_builder item = attr["quiz_item"] item_attr = attr["quiz_attr"] is_ans_correct = util.compare_token_or_slots( handler_input=handler_input, value=item[item_attr]) if is_ans_correct: speech = util.get_speechcon(correct_answer=True) attr["quiz_score"] += 1 handler_input.attributes_manager.session_attributes = attr else: speech = util.get_speechcon(correct_answer=False) speech += util.get_answer(item_attr, item) if attr['counter'] < data.MAX_QUESTIONS: # Ask another question speech += util.get_current_score(attr["quiz_score"], attr["counter"]) question = util.ask_question(handler_input) speech += question reprompt = question # Update item and item_attr for next question item = attr["quiz_item"] item_attr = attr["quiz_attr"] if data.USE_CARDS_FLAG: response_builder.set_card( ui.StandardCard( title="Question #{}".format(str(attr["counter"])), text=question, image=ui.Image( small_image_url=util.get_small_image(item), large_image_url=util.get_large_image(item)))) if util.supports_display(handler_input): title = "Question #{}".format(str(attr["counter"])) background_img = Image(sources=[ ImageInstance( util.get_image(ht=1024, wd=600, label=attr["quiz_item"] ["abbreviation"])) ]) item_list = [] for ans in util.get_multiple_choice_answers( item, item_attr, data.STATES_LIST): item_list.append( ListItem(token=ans, text_content=get_plain_text_content( primary_text=ans))) response_builder.add_directive( RenderTemplateDirective( ListTemplate1(token="Question", back_button=BackButtonBehavior.HIDDEN, background_image=background_img, title=title, list_items=item_list))) return response_builder.speak(speech).ask(reprompt).response else: # Finished all questions. speech += util.get_final_score(attr["quiz_score"], attr["counter"]) speech += data.EXIT_SKILL_MESSAGE response_builder.set_should_end_session(True) if data.USE_CARDS_FLAG: response_builder.set_card( ui.StandardCard(title="Final Score".format( str(attr["counter"])), text=(util.get_final_score( attr["quiz_score"], attr["counter"]) + data.EXIT_SKILL_MESSAGE))) if util.supports_display(handler_input): title = "Thank you for playing" primary_text = get_rich_text_content( primary_text=util.get_final_score(attr["quiz_score"], attr["counter"])) response_builder.add_directive( RenderTemplateDirective( BodyTemplate1(back_button=BackButtonBehavior.HIDDEN, title=title, text_content=primary_text))) return response_builder.speak(speech).response