def set_reminder(handler_input): persistent_attr = handler_input.attributes_manager.persistent_attributes session_attr = handler_input.attributes_manager.session_attributes namaaz_time = get_namaaz_times(handler_input) #print(namaaz_time) if not namaaz_time: return -2 userTimeZone = session_attr["timezone"] now_date = datetime.now(timezone(userTimeZone)) for i, (n, t) in enumerate(namaaz_time.items()): if (n == "magrib"): msg = data.RMNDR_MGRB elif (n == "fajr ending"): msg = data.RMNDR_FJR elif (n == "zohr starting"): msg = data.RMNDR_ZHR elif (n == "zohr ending"): msg = data.RMNDR_ZHRND else: continue hours, minutes = t.split(":") temp_time = now_date.replace(hour=int(hours), minute=int(minutes), second=0) notification_time = temp_time.strftime("%Y-%m-%dT%H:%M:%S") trigger = Trigger(object_type=TriggerType.SCHEDULED_ABSOLUTE, scheduled_time=notification_time, time_zone_id=userTimeZone, recurrence=Recurrence(freq=RecurrenceFreq.DAILY)) alert_info = AlertInfo(spoken_info=SpokenInfo( content=[SpokenText(locale="en-IN", text=msg)])) push_notification = PushNotification(PushNotificationStatus.ENABLED) reminder_request = ReminderRequest(notification_time, trigger, alert_info, push_notification) reminder_client = handler_input.service_client_factory.get_reminder_management_service( ) try: reminder_response = reminder_client.create_reminder( reminder_request) logger.info("created {}".format(n)) except ServiceException as s: logger.info("idhar bhi exception hein bhai") print(s.__class__) return -1 except Exception as e: logger.info("exception hein bhai") print(e.__class__) return 0 persistent_attr["reminder"] = True return 1
def handle(self, handler_input): # type: (HandlerInput) -> Response permissions = handler_input.request_envelope.context.system.user.permissions if not(permissions and permissions.consent_token): logger.info("user hasn't granted reminder permissions") return \ handler_input.response_builder.speak("Please give permissions to set reminders using the alexa app.") \ .set_card(AskForPermissionsConsentCard(permissions=REQUIRED_PERMISSIONS)) \ .response #Get the slot data slots = handler_input.request_envelope.request.intent.slots # userMedication = slots['userMedication'].value medicineDosage = slots['medicineDosage'].value medicineFrequency = slots['medicineFrequency'].value medicineTime = slots['medicineTime'].value #set the session attributes session_attributes = handler_input.attributes_manager.session_attributes # session_attributes['userMedication'] = userMedication session_attributes['medicineDosage'] = medicineDosage session_attributes['medicineFrequency'] = medicineFrequency session_attributes['medicineTime'] = medicineTime reminder_service = handler_input.service_client_factory.get_reminder_management_service() try: now = datetime.datetime.now(pytz.timezone(TIME_ZONE_ID)) #scheduled_time="2020-02-13T03:00:00.000" notification_time = datetime.datetime.today() times = [int(t) for t in medicineTime.split(':')] notification_time = notification_time.replace(hour=times[0], minute=times[1]).strftime("%Y-%m-%dT%H:%M:%S") trigger = Trigger(object_type=TriggerType.SCHEDULED_ABSOLUTE , scheduled_time=notification_time, time_zone_id=TIME_ZONE_ID, recurrence=Recurrence(freq=RecurrenceFreq.DAILY)) text = SpokenText(locale='en-US', ssml='<speak>This is your reminder for Kuvan</speak>', text='This is your reminder for Kuvan') alert_info = AlertInfo(SpokenInfo([text])) push_notification = PushNotification(PushNotificationStatus.ENABLED) reminder_request = ReminderRequest(notification_time, trigger, alert_info, push_notification) except ServiceException as e: logger.info("Exception encountered while creating Reminder: {}".format(e.body)) speech_text = "Uh Oh. Looks like something went wrong." return handler_input.response_builder.speak(speech_text).set_card( SimpleCard("Error while creating reminder.",str(e.body))).response speak_output = f'We have created {medicineFrequency} reminder at {medicineTime} for Kuvan' return ( handler_input.response_builder .speak(speak_output) .set_card(SimpleCard('Kuvan Reminder', speak_output)) # .ask("add a reprompt if you want to keep the session open for the user to respond") .response )
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("In SetCommittedAlarmHandler") #slot = handler_input.request_envelope.request.intent.slots """ time_val = util.get_set_alarm_val(handler_input) print('pravesh output : type of time_val - {} ; value of time_val - {}'.format(type(time_val) , time_val)) attr = handler_input.attributes_manager.session_attributes attr["state"] = "SetCommittedAlarm" attr["time"] = time_val """ rb = handler_input.response_builder permissions = handler_input.request_envelope.context.system.user.permissions reminder_service = handler_input.service_client_factory.get_reminder_management_service( ) print('pravesh out - permissions : {} '.format(permissions)) """ if not (permissions and permissions.consent_token): logging.info("user hasn't granted reminder permissions") return rb.speak("Please give permissions to set reminders using the alexa app.").response """ now = datetime.datetime.now() #(pytz.timezone(TIME_ZONE_ID)) five_mins_from_now = now + datetime.timedelta(seconds=+20) notification_time = five_mins_from_now.strftime("%Y-%m-%dT%H:%M:%S") trigger = Trigger(TriggerType.SCHEDULED_ABSOLUTE, notification_time) #, time_zone_id=TIME_ZONE_ID) text = SpokenText(locale='en-IN', ssml='<speak>This is your reminder</speak>', text='This is your reminder') alert_info = AlertInfo(SpokenInfo([text])) #push_notification = PushNotification(PushNotificationStatus.ENABLED) reminder_request = ReminderRequest(notification_time, trigger, alert_info) try: reminder_responce = reminder_service.create_reminder( reminder_request) except ServiceException as e: # see: https://developer.amazon.com/docs/smapi/alexa-reminders-api-reference.html#error-messages logger.error(e) raise e return rb.speak("reminder created").set_should_end_session( True).response
def handle(self, handler_input): # type: (HandlerInput) -> Response rb = handler_input.response_builder request_envelope = handler_input.request_envelope permissions = request_envelope.context.system.user.permissions reminder_service = handler_input.service_client_factory.get_reminder_management_service( ) if not (permissions and permissions.consent_token): logging.info("user hasn't granted reminder permissions") return rb.speak("Please give permissions to set reminders using the alexa app.") \ .set_card(AskForPermissionsConsentCard(permissions=REQUIRED_PERMISSIONS)) \ .response attribute_manager = handler_input.attributes_manager session_attr = attribute_manager.session_attributes tz = pytz.timezone('America/Chicago') nt = datetime.fromtimestamp( session_attr['walking_time']).astimezone(tz) notification_time = nt.strftime("%Y-%m-%dT%H:%M:%S") logger.info("Notification Time {}".format(notification_time)) trigger = Trigger(TriggerType.SCHEDULED_ABSOLUTE, notification_time, time_zone_id=commands.TIME_ZONE_ID) text = SpokenText( locale='en-US', ssml= '<speak>This is your reminder to leave to get the next train</speak>', text='This is your reminder to leave to get the next train') alert_info = AlertInfo(SpokenInfo([text])) push_notification = PushNotification(PushNotificationStatus.ENABLED) reminder_request = ReminderRequest(notification_time, trigger, alert_info, push_notification) logger.info(reminder_request) try: reminder_response = reminder_service.create_reminder( reminder_request) except ServiceException as e: # see: https://developer.amazon.com/docs/smapi/alexa-reminders-api-reference.html#error-messages logger.error(e) raise e return rb.speak("reminder created") \ .set_card(SimpleCard("Notify Me", "leave to get the next train")) \ .set_should_end_session(True) \ .response
def handle(self, handler_input): # type: (HandlerInput) -> Response reminder_client = handler_input.service_client_factory.get_reminder_management_service() req_envelope = handler_input.request_envelope response_builder = handler_input.response_builder # Check if user gave permissions to create reminders. # If not, request to provide permissions to the skill. if not (req_envelope.context.system.user.permissions and req_envelope.context.system.user.permissions.consent_token): response_builder.speak(NOTIFY_MISSING_PERMISSIONS) response_builder.set_card( AskForPermissionsConsentCard(permissions=permissions)) return response_builder.response try: reminder_response = reminder_client.create_reminder( reminder_request=ReminderRequest( request_time=datetime.utcnow(), trigger=Trigger( object_type=TriggerType.SCHEDULED_RELATIVE, offset_in_seconds=60), alert_info=AlertInfo( spoken_info=SpokenInfo( content=[SpokenText(locale="en-US", text="Test reminder")])), push_notification=PushNotification( status=PushNotificationStatus.ENABLED))) # type: ReminderResponse speech_text = "Great! I've scheduled a reminder for you." logger.info("Created reminder : {}".format(reminder_response)) return handler_input.response_builder.speak(speech_text).set_card( SimpleCard( "Reminder created with id", reminder_response.alert_token)).response except ServiceException as e: logger.info("Exception encountered : {}".format(e.body)) speech_text = "Uh Oh. Looks like something went wrong." return handler_input.response_builder.speak(speech_text).set_card( SimpleCard( "Reminder not created",str(e.body))).response speak_output = "Your reminder has been scheduled successfully." return ( handler_input.response_builder .speak(speak_text) # .ask("add a reprompt if you want to keep the session open for the user to respond") .response )
def notify_me_intent_handler(handler_input: HandlerInput) -> Response: """Handler for Notify Me Intent.""" logging.info("running notify_me_intent_handler()") rb = handler_input.response_builder request_envelope = handler_input.request_envelope permissions = request_envelope.context.system.user.permissions reminder_service = handler_input.service_client_factory.get_reminder_management_service( ) if not (permissions and permissions.consent_token): logging.info("user hasn't granted reminder permissions") return rb.speak("Please give permissions to set reminders using the alexa app.") \ .set_card(AskForPermissionsConsentCard(permissions=REQUIRED_PERMISSIONS)) \ .response now = datetime.datetime.now(pytz.timezone(TIME_ZONE_ID)) five_mins_from_now = now + datetime.timedelta(minutes=+5) notification_time = five_mins_from_now.strftime("%Y-%m-%dT%H:%M:%S") trigger = Trigger(TriggerType.SCHEDULED_ABSOLUTE, notification_time, time_zone_id=TIME_ZONE_ID) text = SpokenText(locale='en-US', ssml='<speak>This is your reminder</speak>', text='This is your reminder') alert_info = AlertInfo(SpokenInfo([text])) push_notification = PushNotification(PushNotificationStatus.ENABLED) reminder_request = ReminderRequest(notification_time, trigger, alert_info, push_notification) try: reminder_responce = reminder_service.create_reminder(reminder_request) except ServiceException as e: # see: https://developer.amazon.com/docs/smapi/alexa-reminders-api-reference.html#error-messages logger.error(e) raise e return rb.speak("reminder created") \ .set_card(SimpleCard("Notify Me", "reminder created")) \ .set_should_end_session(True) \ .response
def handle(self, handler_input): # type: (HandlerInput) -> Response request_envelope = handler_input.request_envelope permissions = request_envelope.context.system.user.permissions reminder_service = handler_input.service_client_factory.get_reminder_management_service( ) if not (permissions and permissions.consent_token): return (handler_input.response_builder.speak( "Please give permissions to set reminders " "using the alexa app.").set_card( AskForPermissionsConsentCard( permissions=REQUIRED_PERMISSIONS)).response) now = datetime.datetime.now(pytz.timezone(TIME_ZONE_ID)) one_min_from_now = now + datetime.timedelta(minutes=+1) notification_time = one_min_from_now.strftime("%Y-%m-%dT%H:%M:%S") trigger = Trigger(TriggerType.SCHEDULED_ABSOLUTE, notification_time, time_zone_id=TIME_ZONE_ID) text = SpokenText(locale='en-US', ssml='<speak>This is your reminder</speak>', text='This is your reminder') alert_info = AlertInfo(SpokenInfo([text])) push_notification = PushNotification(PushNotificationStatus.ENABLED) reminder_request = ReminderRequest(notification_time, trigger, alert_info, push_notification) try: reminder_response = reminder_service.create_reminder( reminder_request) except ServiceException as error: logger.error(error) raise error return ( handler_input.response_builder.speak("Reminder Created").response)
def create_reminder_request(date, text): """Create a ReminderRequest to be oassed when creating a Reminder """ # type: () -> ReminderRequest #build alert and trigger for the Reminder Request reminder_date = datetime.strptime(date, "%Y-%m-%d") reminder_date = reminder_date.replace(hour=13, minute=0) if reminder_date < datetime.now(): return None #TODO manage locale language text = SpokenText(locale=None, ssml=None, text=text) alert = AlertInfo(spoken_info=SpokenInfo([text])) trigger = Trigger(object_type=TriggerType.SCHEDULED_ABSOLUTE, scheduled_time=reminder_date, offset_in_seconds=None, time_zone_id=None, recurrence=None) return ReminderRequest(request_time=datetime.now(), trigger=trigger, alert_info=alert, push_notification=PushNotification( PushNotificationStatus.ENABLED))
def handle(self, handler_input): """Handle the intent; fetch and serve appropriate response. Handles prompt response if one exists (ie. if this was called as an updated_intent from NextMassIntent). Unless told not to, creates a reminder via the reminder API for 30 minutes prior to mass, handling edge cases such as being within a 30 minute window of next mass OR lack of Reminder permissions by the user. Supports a DEV_MODE for a quick reminder. Ends the current session. Args: handler_input (ask_sdk_core.handler_input.HandlerInput): Input from Alexa. Returns: ask_sdk_model.response.Response: Response for this intent and device. """ DEV_MODE = False speech = "" LOGGER.info("Running NotifyNextMassHandler") userSession = session.KilianUserSession(handler_input) negativeResponses = ["nah", "nope", "no thank you", "no thanks", "no"] # Did this intent come from an updated_intent redirect? Was the user # just asked a yes/no question?: if userSession.desiresReminder: # Yup, check for a negative answer and bail. if userSession.desiresReminder.lower() in negativeResponses: LOGGER.info("DESIRES_REMINDER slot indicates 'no'") speech = "Okay." cardTitle = "Next Mass" cardText = "No reminder requested." handler_input.response_builder.speak(speech).set_card( StandardCard(title=cardTitle, text=cardText)) handler_input.response_builder.set_should_end_session(True) return handler_input.response_builder.response else: # Nope, the user must have explicitly asked for the reminder. LOGGER.info("No DESIRES_REMINDER slot filled.") # Set up the reminder framework: responseBuilder = handler_input.response_builder requestEnvelope = handler_input.request_envelope permissions = requestEnvelope.context.system.user.permissions serviceFactory = handler_input.service_client_factory reminderService = serviceFactory.get_reminder_management_service() # If no permissions if not (permissions and permissions.consent_token): LOGGER.info("user hasn't granted reminder permission") speech = "Please give Saint Kilian permissions to set reminders" speech += " using your Alexa app." permissions = ["alexa::alerts:reminders:skill:readwrite"] card = AskForPermissionsConsentCard(permissions=permissions) return responseBuilder.speak(speech).set_card(card).response # Else, let's set up the reminder msg = "Necessary permissions found. Creating reminder." print(msg) LOGGER.info(msg) now = datetime.datetime.now(pytz.timezone("America/Los_Angeles")) massTime = events.MassResponse(userSession).getNextMass() msg = "massTime getNextMass query returned" print(msg) LOGGER.debug(msg) # If no more masses today: if not massTime: LOGGER.info("no next mass found for today") speech = "Sorry, but it looks like there are no more masses today." cardText = "No more masses today.\nTry again tomorrow." card = SimpleCard("St. Kilian - Mass Reminder", cardText) return responseBuilder.speak(speech).set_card(card) \ .set_should_end_session(True).response # Good, a mass was found. Convert it to the local timezone. msg = "Mass found. Converting to local timezone" print(msg) LOGGER.debug(msg) massTime = massTime["time"] todayEvent = datetime.datetime.combine(now, massTime) reminderTime = todayEvent - datetime.timedelta(minutes=30) timezone = pytz.timezone("America/Los_Angeles") reminderTime = timezone.localize(reminderTime) todayEvent = timezone.localize(todayEvent) msg = "Upcoming event, local time, is {}".format(todayEvent) print(msg) LOGGER.debug(msg) # Are we within 30 minutes before it starts? If so, apologize and bail. if reminderTime < now and not DEV_MODE: LOGGER.info("too late. reminder is in the past.") speech = "It looks like it's too late for a reminder. " left = int(((todayEvent - now).seconds) / 60) speech += "You only have {} minutes left until Mass.".format(left) card = SimpleCard("St. Kilian - Mass Reminder", "Reminder set for Mass.") return responseBuilder.speak(speech).set_card(card) \ .set_should_end_session(True).response # Rather than waiting all day, if in dev mode, just wait one minute: if DEV_MODE: reminderTime = now + datetime.timedelta(minutes=+1) # Build and invoke the response: msg = "Building response" print(msg) LOGGER.debug(msg) reminderString = reminderTime.strftime("%Y-%m-%dT%H:%M:%S") trigger = Trigger(TriggerType.SCHEDULED_ABSOLUTE, reminderString, time_zone_id="America/Los_Angeles") msg = "It is time to leave for mass." markup = "<speak>{}</speak>".format(msg) reminderSpeech = SpokenText(locale="en-US", ssml=markup, text=msg) alertInfo = AlertInfo(SpokenInfo(content=[reminderSpeech])) pushNotification = PushNotification(PushNotificationStatus.ENABLED) reminderRequest = ReminderRequest(request_time=reminderTime, trigger=trigger, alert_info=alertInfo, push_notification=pushNotification) try: LOGGER.debug("creating reminder...") print("creating reminder...") reminderService.create_reminder(reminder_request=reminderRequest) LOGGER.debug("reminder created.") except ServiceException as e: msg = "An error occurred while creating reminder from\n{}" msg = msg.format(reminderRequest) print(msg) LOGGER.error(msg) LOGGER.error(e) if hasattr(e, "message"): LOGGER.error(e.message) raise e # Build the speech response: if DEV_MODE: speech += "Okay. Since you are in demo mode, I'll remind " speech += "in one minute to go to mass. " speech += "I will remind you at {}:{}{} to leave for mass." hour = reminderTime.hour minute = "{:02d}".format(reminderTime.minute) if hour >= 12: suffix = "pm" else: suffix = "am" if hour > 12: hour = hour - 12 speech = speech.format(hour, minute, suffix) card = SimpleCard("St. Kilian", "Reminder set for Mass.") msg = "returning final response." print(msg) return responseBuilder.speak(speech).set_card(card) \ .set_should_end_session(True).response
def handle(self, handler_input): # type: (HandlerInput) -> Response permissions = handler_input.request_envelope.context.system.user.permissions reminder_service = handler_input.service_client_factory.get_reminder_management_service( ) med_data = handler_input.attributes_manager.session_attributes[ 'med_data'] if not (permissions and permissions.consent_token): return (handler_input.response_builder.speak( data.set_permissions_message).response) else: for med in med_data: med_name = med_data[med]['name'] med_times = med_data[med]['times'] for time in med_times: time_now = datetime.datetime.now( pytz.timezone(TIME_ZONE_ID)) # get reminder time hour, minute and create reminder_time datetime object time = time.split(':') hour = int(time[0]) minute = int(time[1]) reminder_time = datetime.datetime( year=time_now.year, month=time_now.month, day=time_now.day, hour=hour, minute=minute, tzinfo=pytz.timezone(TIME_ZONE_ID)) time_now = time_now.strftime("%Y-%m-%dT%H:%M:%S") notification_time = reminder_time.strftime( "%Y-%m-%dT%H:%M:%S") recurrence = Recurrence( freq=recurrence_freq.RecurrenceFreq.DAILY) trigger = Trigger(TriggerType.SCHEDULED_ABSOLUTE, scheduled_time=notification_time, time_zone_id=TIME_ZONE_ID, recurrence=recurrence) text = SpokenText( locale='en-US', text='Time to take your medicine {}'.format(med_name)) alert_info = AlertInfo(SpokenInfo([text])) push_notification = PushNotification( PushNotificationStatus.ENABLED) # generate the reminder request object reminder_request = ReminderRequest( request_time=time_now, trigger=trigger, alert_info=alert_info, push_notification=push_notification) reminder_response = reminder_service.create_reminder( reminder_request, full_response=True) return (handler_input.response_builder.speak( "Reminders have been successfully created for all your medicines!" ).response)
def handle(self, handler_input): # type: (HandlerInput) -> Response logger.info("Reminder Intent handler") request_envelope = handler_input.request_envelope response_builder = handler_input.response_builder reminder_service = handler_input.service_client_factory.get_reminder_management_service( ) if not (request_envelope.context.system.user.permissions and request_envelope.context.system.user.permissions.consent_token ): #return response_builder.speak(NOTIFY_MISSING_PERMISSIONS).set_card(AskForPermissionsConsentCard(permissions=PERMISSIONS)).response return response_builder.add_directive( SendRequestDirective( name="AskFor", payload={ "@type": "AskForPermissionsConsentRequest", "@version": "1", "permissionScope": "alexa::alerts:reminders:skill:readwrite" }, token="correlationToken")).response now = datetime.datetime.now(pytz.timezone(TIME_ZONE_ID)) five_mins_from_now = now + datetime.timedelta(minutes=+5) notification_time = five_mins_from_now.strftime("%Y-%m-%dT%H:%M:%S") # Create an instance of the recurrence object # Set the missing attributes on the instance's deserialized_types map, # as following : recurrence_pattern = [ "FREQ=DAILY;BYHOUR=6;BYMINUTE=10;BYSECOND=0;INTERVAL=1;", "FREQ=DAILY;BYHOUR=17;BYMINUTE=15;BYSECOND=0;INTERVAL=1;", "FREQ=DAILY;BYHOUR=19;BYMINUTE=45;BYSECOND=0;INTERVAL=1;" ] trigger = Trigger( object_type=TriggerType.SCHEDULED_ABSOLUTE, scheduled_time=notification_time, time_zone_id=TIME_ZONE_ID, recurrence=Recurrence(recurrence_rules=recurrence_pattern)) text = SpokenText( locale='en-US', ssml="<speak> Great! I have scheduled reminder for you.</speak>", text='This is medicine reminder. Please take your medicine') alert_info = AlertInfo(SpokenInfo([text])) push_notification = PushNotification(PushNotificationStatus.ENABLED) reminder_request = ReminderRequest(notification_time, trigger, alert_info, push_notification) try: reminder_response = reminder_service.create_reminder( reminder_request) logger.info("Reminder Created: {}".format(reminder_response)) except ServiceException as e: logger.info("Exception encountered: {}".format(e.body)) return response_builder.speak(ERROR).response return response_builder.speak( "Your medicine reminder created").set_card( SimpleCard("Medicine Reminder", "Medicine Reminder created")).response