http://caleb.software/posts/ios-delayed-messages.html caleb.software Delayed Messages on iOS 10 April 2022 When I got my first iPhone in March I was surprised to find that iMessage didn't support sending messages later at a specified time. This feature is pretty common on some other messaging platforms, so I had come to depend on it in my daily workflow. It's especially useful in situations where I have a work-related thought at 3AM and don't want to risk waking up and annoying my co-workers. At first I played around with trying to implement this with a simple iOS Shortcut, but since you can't schedule shortcut actions to run at a later time, I had to get a little creative. Here, we'll see how you can use a combination of a shortcut and an automation (also via the Shortcuts app) plus a hidden iOS Calendar to schedule messages for sending later. A New Calendar First, we create a new calendar within the iOS Calendar app. I titled mine Delayed Messages here. We will use this calendar as a sort of queue for messages to be sent later, with individual calendar events storing the message text and recipient. A new calendar The Shortcut A shortcut is basically just a way to automate a task with multiple steps. You can think of it like a shell script, run immediately whenever we decide to queue up a new message. The shortcuts app Below, you can see the structure of the shortcut. It's pretty straightforward: first, we grab the text content of the message, pick what date we want to send the message, and we ask the user to choose a phone number from their contacts. Reading user input Then we create a new calendar item in our Delayed Messages calendar with the information. The title of the calendar is the recipient's phone number, and the Notes field contains the text of the message. Creating the calendar event The Automation If shortcuts are the equivalent a shell script, iOS automations are the equivalent of a cron job. They perform a series of actions at a regularly scheduled time (or in response to some event or trigger). [auto-home] Unfortunately, automations only have the option to be repeated daily, weekly, or monthly. This means we can't specify the time to send the message with just one automation, though you could create multiple automations (and set a time on the calendar events instead of choosing "all day") to send messages at varying points in the day. I settled on just sending all of the delayed messages at 9AM, since this fits my use-case the best. First, our automation will grab any events in our Delayed Messages calendar that need to be sent today. [auto-find] Then, we loop through each of the calendar events, and send the messages to the listed recipient. [auto-loop] Finally, we delete the calendar events, though you could skip this step. [auto-delet] I turned off the "ask before running" and "notify when run" options just to make it a little easier. I'm also not sure how iOS automations handle cases where the automation wasn't able to run (e.g. your phone is off/dead at 9AM on a certain day), so it might be a good idea to modify the automation's Find action to fetch all calendar events at earlier dates as well to avoid a message from getting skipped (better late than never?) [ ] - twitter link