예제 #1
0
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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
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
예제 #6
0
 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
예제 #7
0
    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
예제 #10
0
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
예제 #11
0
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
예제 #12
0
    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
예제 #13
0
    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
예제 #14
0
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)))
예제 #15
0
    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
예제 #16
0
    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
예제 #17
0
    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
예제 #18
0
    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
예제 #19
0
    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
예제 #20
0
    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)
예제 #21
0
    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
예제 #22
0
 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
예제 #23
0
    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
예제 #24
0
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
예제 #28
0
    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
예제 #30
0
    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