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 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 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 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 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("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 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 log_move(self, is_player, p_hp, m_hp, move, dmg, p_st, m_st): ret = ListItem(token=self.seq) self.seq += 1 if is_player: ret.image = Image(sources=[ImageInstance(url=data.PLAYER_AVATAR)]) else: ret.image = Image(sources=[ ImageInstance(url=data.MONSTER_AVATAR[self.mob.name.lower()]) ]) p_st = [data.EMOJI_STATUS[x] for x in p_st] m_st = [data.EMOJI_STATUS[x] for x in m_st] primary_text = "<div align='center'><font size='5'>{} DMG: {}</font></div>".format( move, str(dmg)) secondary_text = "<div align='center'>Your HP:{} {}".format( p_hp, ''.join(p_st)) + "Monster HP:{} {}</div>".format( m_hp, ''.join(m_st)) ret.text_content = get_rich_text_content(primary_text=primary_text, secondary_text=secondary_text) self.log_vec.append(ret)
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): 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 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 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 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 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: 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: 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): # 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
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): 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_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