def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = '' attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes exists_santa = True person_id = '' if 'santa' not in persistence_attr or 'id' not in persistence_attr[ 'santa']: #初回起動 exists_santa = False persistence_attr['santa'] = {} return AnswerClassIntentHandler(AbstractRequestHandler).handle( handler_input) if request_envelope.context.system.person is not None: person_id = request_envelope.context.system.person.person_id santa = is_santa(persistence_attr['santa'], person_id) subscription = is_skill_product(handler_input) if 'msg' in persistence_attr['session']: speak_output = _(data.WISH_ADD_NO_MSG) else: speak_output = _(data.NO_MSG) persistence_attr['session'] = {'dt': datetime.now().strftime('%s')} attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)
def test_set_request_attributes(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) attributes_manager.request_attributes = {"key": "value"} assert attributes_manager.request_attributes == {"key": "value"}, ( "AttributesManager fails to set the request attributes")
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = '' attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes exists_santa = True person_id = None if 'santa' not in persistence_attr or 'id' not in persistence_attr[ 'santa']: #初回起動 exists_santa = False persistence_attr['santa'] = {} return AnswerClassIntentHandler(AbstractRequestHandler).handle( handler_input) if request_envelope.context.system.person is not None: person_id = request_envelope.context.system.person.person_id santa = is_santa(persistence_attr['santa'], person_id) subscription = is_skill_product(handler_input) if 'msg' in persistence_attr['session']: #1分経過してたら無効 logger.error(int(datetime.now().strftime('%s')), exc_info=True) logger.error(int(persistence_attr['session']['dt']), exc_info=True) if int(datetime.now().strftime('%s')) - int( persistence_attr['session']['dt']) > 60: speak_output = _(data.WISH_ADD_TIMEOUT_MSG) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: speak_output = _(data.WISH_ADD_NO_MSG) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) if 'msg' not in persistence_attr: persistence_attr['msg'] = [] idx = len(persistence_attr['msg']) txt = persistence_attr['session']['msg'] persistence_attr['msg'].append({}) persistence_attr['msg'][idx]['txt'] = txt persistence_attr['msg'][idx]['person_id'] = "{}".format(person_id) if person_id != "" and person_id is not None: speak_output = _(data.WISH_ADD_MSG).format(person_id, txt) else: speak_output = _(data.WISH_ADD_NONAME_MSG).format(txt) persistence_attr['session'] = {'dt': datetime.now().strftime('%s')} logger.error(persistence_attr, exc_info=True) logger.error(speak_output, exc_info=True) attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).response)
def test_set_session_attributes_to_out_of_session_request_envelope(self): request_envelope = RequestEnvelope( version=None, session=None, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) attributes_manager._request_envelope.session = None with self.assertRaises(AttributesManagerException) as exc: attributes_manager.session_attributes = {"key": "value"} assert "Cannot set SessionAttributes to out of session request!" in str(exc.exception), ( "AttributesManager should raise error when trying to set session " "attributes to out of session request")
def test_set_persistent_attributes_without_persistence_adapter(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) with self.assertRaises(AttributesManagerException) as exc: attributes_manager.persistent_attributes = {"key": "value"} assert "Cannot set PersistentAttributes without persistence adapter!" in str(exc.exception), ( "AttributesManager should raise error when trying to set " "persistent attributes without persistence adapter")
def test_set_persistent_attributes(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=MockPersistenceAdapter()) attributes_manager.persistent_attributes = {"key": "value"} assert attributes_manager.persistent_attributes == { "key": "value"}, ( "AttributesManager fails to set the persistent attributes")
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = '' attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes person_id = '' if 'santa' not in persistence_attr or 'id' not in persistence_attr[ 'santa']: #初回起動 exists_santa = False persistence_attr['santa'] = {} return AnswerClassIntentHandler(AbstractRequestHandler).handle( handler_input) if request_envelope.context.system.person is not None: person_id = request_envelope.context.system.person.person_id password = get_resolved_query(handler_input.request_envelope.request, "password") message_number = get_resolved_query( handler_input.request_envelope.request, "message_number") logger.info(password, exc_info=True) if 'password' in persistence_attr['session']: if str(persistence_attr['session']['password']) == password: mymsg_id = int(persistence_attr['session']['delete']) logger.info(mymsg_id, exc_info=True) del persistence_attr['msg'][mymsg_id] del persistence_attr['session']['delete'] del persistence_attr['session']['password'] speak_output = _(data.WISH_DELETE_MSG) elif (str(persistence_attr['session']['password']) == 'a' and int(message_number) > 0): idx = int(message_number) - 1 del persistence_attr['msg'][idx] del persistence_attr['session']['delete'] del persistence_attr['session']['password'] speak_output = _( data.WISH_DELETE_PARENT_MSG).format(message_number) else: speak_output = _(data.WISH_DELETE_NG_MSG) else: speak_output = _(data.WISH_DELETE_NON_MSG) logger.info(persistence_attr['session'], exc_info=True) persistence_attr['session'] = {'dt': datetime.now().strftime('%s')} attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)
def test_delete_persistent_attributes(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=MockPersistenceAdapter()) attributes_manager.persistent_attributes = {"key": "value"} attributes_manager.delete_persistent_attributes() assert attributes_manager._persistence_adapter.attributes == {}, ( "AttributesManager fails to delete persistent attributes via " "persistence adapter")
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = '' attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes person_id = '' logger.info(request_envelope.context.system, exc_info=True) if request_envelope.context.system.person is None: # パーソナライズ無効 speak_output = _(data.WISH_DELETE_NOT_PERSONALIZE) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: person_id = request_envelope.context.system.person.person_id # 親か子か personClass = '' if 'personClass' in persistence_attr[person_id]: personClass = persistence_attr[person_id]['personClass'] else: return AnswerClassIntentHandler(AbstractRequestHandler).handle( handler_input) confirm = '消しません' resolved_value = get_resolved_value( handler_input.request_envelope.request, "confirm") resolved_id = get_resolved_id(handler_input.request_envelope.request, "confirm") if (resolved_value is not None): # Dialogを用いてるので原則として値は入ってくる confirm = resolved_value if confirm == '消します' and 'wish' in persistence_attr[person_id]: del (persistence_attr[person_id]['wish']) speak_output = _(data.WISH_DELETE_YES_MSG).format( persistence_attr[person_id]) elif confirm == '消します': speak_output = _(data.WISH_DELETE_NON_MSG).format( persistence_attr[person_id]) else: speak_output = _(data.WISH_DELETE_NO_MSG).format( persistence_attr[person_id]) attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)
def test_save_persistent_attributes_without_changing_persistent_attributes(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=MockPersistenceAdapter()) attributes_manager.save_persistent_attributes() assert attributes_manager._persistence_adapter.attributes == { "key_1": "v1", "key_2": "v2"}, ( "AttributesManager should do nothing if persistent attributes " "has not been changed")
def test_set_session_attributes(self): session = Session( new=None, session_id=None, user=None, attributes={"mockKey": "mockValue"}, application=None) request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) attributes_manager.session_attributes = { "mockKey": "updatedMockValue"} assert attributes_manager.session_attributes == { "mockKey": "updatedMockValue"}, ( "AttributesManager fails to set the session attributes")
def test_save_persistent_attributes_without_persistence_adapter(self): request_envelope = RequestEnvelope(version=None, session=None, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) with self.assertRaises(AttributesManagerException) as exc: attributes_manager.save_persistent_attributes() assert "Cannot save PersistentAttributes without persistence adapter!" in str( exc.exception), ( "AttributesManager should raise error when trying to save " "persistent attributes without persistence adapter")
def handle(self, handler_input): # type: (HandlerInput) -> Response _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) logger.info(request_envelope.context.system, exc_info=True) logger.info(request_envelope.context.system.person, exc_info=True) #DynamoDbをTest persistence_attr = attributes_manager.persistent_attributes persistence_attr['session'] = {'dt': datetime.now().strftime('%s')} exists_santa = True if 'santa' not in persistence_attr or 'id' not in persistence_attr[ 'santa']: #初回起動 exists_santa = False persistence_attr['santa'] = {} speak_output = '' person_id = '' # test用 'person_id': 'amzn1.ask.person.AHCN7IHVHTQBKRDNNDBYSWZRJISPUHOJEEZZW6MML255REWY2YOQFETSBE7STDPDAXOJUWBPIL5ZV6WZ5555HMZVI6YPKIVDWGOEL7KB'} if request_envelope.context.system.person is None and exists_santa == False: # パーソナライズ無効 speak_output = _(data.LAUNCH_NOT_PERSONALIZE) return ( handler_input.response_builder.speak(speak_output).response) elif exists_santa == False: # サンタ登録 speak_output = _(data.LAUNCH_NO_SANTA) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) elif request_envelope.context.system.person is not None: person_id = request_envelope.context.system.person.person_id santa = is_santa(persistence_attr['santa'], person_id) if santa == True: speak_output = _(data.LAUNCH_IS_PARENT).format(person_id) else: speak_output = _(data.LAUNCH_IS_CHILD).format(person_id) attributes_manager.save_persistent_attributes() logger.info(persistence_attr, exc_info=True) logger.info(speak_output, exc_info=True) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)
def test_attributes_manager_with_no_request_envelope(self): with self.assertRaises(AttributesManagerException) as exc: self.attributes_manager = AttributesManager(request_envelope=None) assert "RequestEnvelope cannot be none!" in str(exc.exception), ( "AttributesManager should raise error when requestEnvelope is " "none")
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.context.system, exc_info=True) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes speak_output = _(data.WELCOME_MESSAGE) person_id = '' if request_envelope.context.system.person is None: # パーソナライズ無効 speak_output = _(data.ANSWER_CLASS_NOT_PERSONALIZE) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: person_id = request_envelope.context.system.person.person_id if person_id not in persistence_attr: persistence_attr[person_id] = {} if 'personClass' in persistence_attr[person_id]: #登録済 pass personCount = get_count_person(persistence_attr) resolved_value = get_resolved_value( handler_input.request_envelope.request, "class") subscription = is_skill_product(handler_input) if (resolved_value is not None and resolved_value == "パパ"): if personCount[0] < 1 or subscription == True: persistence_attr[person_id]['personClass'] = 'parent' speak_output = _(data.ANSWER_CLASS_IS_PARENT).format( person_id, person_id) else: speak_output = _(data.ANSWER_CLASS_LIMIT_MSG) else: if personCount[1] < 2 or subscription == True: persistence_attr[person_id]['personClass'] = 'child' speak_output = _(data.ANSWER_CLASS_IS_CHILD).format(person_id) else: speak_output = _(data.ANSWER_CLASS_LIMIT_MSG) attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)
def test_get_initial_request_attributes(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) assert attributes_manager.request_attributes == {}, ( "AttributesManager fails to set the initial request attributes " "to be {}")
def setUp(self) -> None: skill = CustomSkill(skill_configuration=sb.skill_configuration) req = update_request(message_request, 'en-US') request_envelope = skill.serializer.deserialize( payload=json.dumps(req), obj_type=RequestEnvelope) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=skill.persistence_adapter) self.handler_input = HandlerInput(request_envelope, attributes_manager) self.handler = sb.lambda_handler()
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.context.system, exc_info=True) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes persistence_attr['session'] = {'dt': datetime.now().strftime('%s')} person_id = '' exists_santa = True if 'santa' not in persistence_attr or 'id' not in persistence_attr[ 'santa']: #初回起動 exists_santa = False persistence_attr['santa'] = {} if request_envelope.context.system.person is not None: person_id = request_envelope.context.system.person.person_id speak_output = _(data.WELCOME_MESSAGE) if request_envelope.context.system.person is None: # パーソナライズ無効 speak_output = _(data.ANSWER_CLASS_NOT_PERSONALIZE) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) resolved_value = get_resolved_value( handler_input.request_envelope.request, "class") if (resolved_value is not None and resolved_value == "サンタ"): persistence_attr['santa']['id'] = person_id speak_output = _(data.ANSWER_CLASS_IS_PARENT).format( person_id, person_id) elif exists_santa == False: speak_output = _(data.ANSWER_CLASS_IS_NG).format(person_id) else: speak_output = _(data.ANSWER_CLASS_IS_CHILD).format(person_id) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).response)
def handle(self, handler_input): # type: (HandlerInput) -> Response _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) logger.info(request_envelope.context, exc_info=True) logger.info(request_envelope.context.system, exc_info=True) logger.info(request_envelope.context.system.person, exc_info=True) #DynamoDbをTest persistence_attr = attributes_manager.persistent_attributes speak_output = '' person_id = '' # test用 'person_id': 'amzn1.ask.person.AHCN7IHVHTQBKRDNNDBYSWZRJISPUHOJEEZZW6MML255REWY2YOQFETSBE7STDPDAXOJUWBPIL5ZV6WZ5555HMZVI6YPKIVDWGOEL7KB'} if request_envelope.context.system.person is None: # パーソナライズ無効 speak_output = _(data.LAUNCH_NOT_PERSONALIZE) return ( handler_input.response_builder.speak(speak_output).response) else: person_id = request_envelope.context.system.person.person_id if person_id not in persistence_attr: persistence_attr[person_id] = {} if 'personClass' not in persistence_attr[person_id]: speak_output = _(data.LAUNCH_NOT_CLASS) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) personClass = persistence_attr[person_id]['personClass'] if personClass == 'parent': speak_output = _(data.LAUNCH_IS_PARENT).format(person_id) else: speak_output = _(data.LAUNCH_IS_CHILD).format(person_id) attributes_manager.save_persistent_attributes() logger.info(persistence_attr, exc_info=True) logger.info(speak_output, exc_info=True) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = '' attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes person_id = '' if request_envelope.context.system.person is None: # パーソナライズ無効 speak_output = _(data.WISH_LIST_NOT_PERSONALIZE) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: person_id = request_envelope.context.system.person.person_id # パパかどうか personClass = '' if 'personClass' in persistence_attr[person_id]: personClass = persistence_attr[person_id]['personClass'] else: return AnswerClassIntentHandler(AbstractRequestHandler).handle( handler_input) reprompt = True if 'wish' in persistence_attr[person_id] and personClass == 'child': speak_output = _(data.WISH_LIST_CHILD_MSG).format( persistence_attr[person_id]['wish'][0]) elif 'wish' not in persistence_attr[ person_id] and personClass == 'child': speak_output = _(data.WISH_LIST_NONE_CHILD_MSG) elif personClass == 'parent': speak_output = '' for child_id in persistence_attr: if 'wish' in persistence_attr[child_id]: speak_output += _(data.WISH_LIST_PARENT_MSG).format( child_id, persistence_attr[child_id]['wish'][0]) if speak_output != '': speak_output += '伝言は以上です。さてどうしましょうか。もう一度聞く場合には「伝言を聞く」と言ってください' else: speak_output = _(data.WISH_LIST_NONE_PARENT_MSG).format( persistence_attr[person_id]) reprompt = False logger.info(speak_output, exc_info=True) logger.info(persistence_attr, exc_info=True) if reprompt == True: return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: return ( handler_input.response_builder.speak(speak_output).response)
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = _(data.WISH_ADD_MSG) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes person_id = '' if request_envelope.context.system.person is None: # パーソナライズ無効 speak_output = _(data.WISH_ADD_NOT_PERSONALIZE) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: person_id = request_envelope.context.system.person.person_id # 親か子か personClass = '' if 'personClass' in persistence_attr[person_id]: personClass = persistence_attr[person_id]['personClass'] else: return AnswerClassIntentHandler(AbstractRequestHandler).handle( handler_input) query = get_resolved_query(handler_input.request_envelope.request, "query") if (query is not None and personClass == 'child'): # Dialogを用いてるので原則として値は入ってくる persistence_attr[person_id]['wish'] = [query] speak_output = _(data.WISH_ADD_MSG).format(query) elif (query is not None and personClass == 'parent'): persistence_attr[person_id]['wish'] = [query] speak_output = _(data.WISH_ADD_PARENT_MSG).format(query) else: speak_output = _(data.WISH_ADD_MSG).format('聞き取れませんでした') attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)
def create_handler_input(slots: Dict[str, Slot], attributes: Dict) -> HandlerInput: request_envelope = RequestEnvelope(version="v1", session=Session(attributes=attributes), request=IntentRequest( request_id=str(uuid4()), intent=Intent(name="test intent", slots=slots))) attributes_manager = AttributesManager(request_envelope=request_envelope) handler_input = HandlerInput(request_envelope=request_envelope, attributes_manager=attributes_manager) return handler_input
def test_get_persistent_attributes(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=MockPersistenceAdapter()) assert attributes_manager.persistent_attributes == { "key_1": "v1", "key_2": "v2"}, ( "AttributesManager fails to get persistent attributes from " "persistent adapter")
def test_get_default_session_attributes_from_new_session_request_envelope(self): session = Session( new=True, session_id=None, user=None, attributes=None, application=None) request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) assert attributes_manager.session_attributes == {}, ( "AttributesManager fails to get default session attributes from " "new session request envelope")
def test_get_session_attributes_from_out_of_session_request_envelope(self): request_envelope = RequestEnvelope( version=None, session=None, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) attributes_manager._request_envelope.session = None with self.assertRaises(AttributesManagerException) as exc: test_session_attributes = attributes_manager.session_attributes assert "Cannot get SessionAttributes from out of session request!" in str(exc.exception), ( "AttributesManager should raise error when trying to get session " "attributes from out of session envelope")
def test_get_session_attributes_from_in_session_request_envelope(self): session = Session( new=None, session_id=None, user=None, attributes={"mockKey": "mockValue"}, application=None) request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope) assert attributes_manager.session_attributes == { "mockKey": "mockValue"}, ( "AttributesManager fails to get session attributes from in " "session request envelope")
def test_get_persistent_attributes_with_calling_get_persistent_attributes_multiple_times(self): session = Session() request_envelope = RequestEnvelope( version=None, session=session, context=None, request=None) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=MockPersistenceAdapter()) attributes_manager.persistent_attributes attributes_manager.persistent_attributes attributes_manager.persistent_attributes attributes_manager.persistent_attributes assert attributes_manager._persistence_adapter.get_count == 1, ( "AttributesManager should make only 1 get_attributes call " "during multiple get_persistent_attributes calls")
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = '' attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes persistence_attr['session'] = {'dt': datetime.now().strftime('%s')} person_id = '' exists_santa = True if 'santa' not in persistence_attr or 'id' not in persistence_attr[ 'santa']: #初回起動 exists_santa = False persistence_attr['santa'] = {} if request_envelope.context.system.person is not None: person_id = request_envelope.context.system.person.person_id santa = is_santa(persistence_attr['santa'], person_id) if request_envelope.context.system.person is None: # パーソナライズ無効 speak_output = _(data.WISH_LIST_NOT_PERSONALIZE) return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: person_id = request_envelope.context.system.person.person_id reprompt = True mymsg_id = -1 mymsg = '' if 'msg' not in persistence_attr: persistence_attr['msg'] = [] idx = len(persistence_attr['msg']) for msg in range(len(persistence_attr['msg'])): if persistence_attr['msg'][msg][ 'person_id'] == person_id and person_id != '': mymsg = persistence_attr['msg'][msg]['txt'] mymsg_id = msg if mymsg != '' and santa == False: x = random.randrange(1000, 9999) persistence_attr['session']['password'] = x persistence_attr['session']['delete'] = mymsg_id speak_output = _(data.WISH_LIST_CHILD_MSG).format(mymsg, x) elif mymsg == '' and santa == False: speak_output = _(data.WISH_LIST_NONE_CHILD_MSG) elif len(persistence_attr['msg']) < 1: speak_output = _(data.WISH_LIST_NONE_PARENT_MSG) else: speak_output = '' for msg in range(len(persistence_attr['msg'])): logger.info(persistence_attr['msg'][msg]['person_id'], exc_info=True) if (persistence_attr['msg'][msg]['person_id'] is not None and persistence_attr['msg'][msg]['person_id'] != 'None' and persistence_attr['msg'][msg]['person_id'] != ''): speak_output += _(data.WISH_LIST_PARENT_EXT_MSG).format( msg + 1, persistence_attr['msg'][msg]['person_id'], persistence_attr['msg'][msg]['txt']) else: speak_output += _(data.WISH_LIST_PARENT_MSG).format( msg + 1, persistence_attr['msg'][msg]['txt']) if speak_output != '': speak_output += '願い事は以上です。さて次は何をしましょうか。「一番めの願い事を削除」のように言うと願い事の削除もできますよ。' persistence_attr['session']['password'] = '******' persistence_attr['session']['delete'] = 'a' else: speak_output = _(data.WISH_LIST_NONE_PARENT_MSG) logger.info(speak_output, exc_info=True) logger.info(persistence_attr, exc_info=True) attributes_manager.save_persistent_attributes() if reprompt == True: return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) else: return ( handler_input.response_builder.speak(speak_output).response)
def handle(self, handler_input): _ = handler_input.attributes_manager.request_attributes["_"] request_envelope = handler_input.request_envelope logger.info(request_envelope.request, exc_info=True) speak_output = _(data.WISH_ADD_MSG) attributes_manager = AttributesManager( request_envelope=request_envelope, persistence_adapter=adapter) persistence_attr = attributes_manager.persistent_attributes persistence_attr['session'] = {'dt': datetime.now().strftime('%s')} exists_santa = True person_id = '' if 'santa' not in persistence_attr or 'id' not in persistence_attr[ 'santa']: #初回起動 exists_santa = False persistence_attr['santa'] = {} return AnswerClassIntentHandler(AbstractRequestHandler).handle( handler_input) if request_envelope.context.system.person is not None: person_id = request_envelope.context.system.person.person_id santa = is_santa(persistence_attr['santa'], person_id) query = get_resolved_query(handler_input.request_envelope.request, "query") subscription = is_skill_product(handler_input) if 'msg' not in persistence_attr: persistence_attr['msg'] = [] idx = len(persistence_attr['msg']) if (query is not None and santa == False): # Dialogを用いてるので原則として値は入ってくる if idx < 3 or subscription == True: #persistence_attr['santa'][len]['msg'] = query persistence_attr['session']['msg'] = query if person_id != "" and person_id is not None: speak_output = _(data.WISH_ADD_CONFIRM_MSG).format( person_id, query) else: speak_output = _( data.WISH_ADD_CONFIRM_NONAME_MSG).format(query) else: speak_output = _(data.WISH_ADD_LIMIT_MSG) attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).ask( speak_output).response) elif (query is not None and santa == True): if idx < 3 or subscription == True: logger.info(idx, exc_info=True) persistence_attr['msg'].append({}) persistence_attr['msg'][idx]['txt'] = query persistence_attr['msg'][idx]['person_id'] = person_id speak_output = _(data.WISH_ADD_PARENT_MSG).format(query) else: speak_output = _(data.WISH_ADD_LIMIT_MSG) else: speak_output = _(data.WISH_ADD_MSG).format('聞き取れませんでした') attributes_manager.save_persistent_attributes() return (handler_input.response_builder.speak(speak_output).ask( speak_output).response)