Settings

Theme

Show HN: Schedule iMessage Texts from .txt Files

github.com

122 points by reidjs 2 years ago · 75 comments · 1 min read

Reader

Annoyingly, iPhones don't have a great way to schedule messages. This around 100 lines of python to schedule iMessage texts from .txt files on your computer.

If this is useful to you, please give it a try and let me know what you think. Thanks.

xyst 2 years ago

If you don’t have an Apple computer but have an iOS device, you can also do something similar with the “Shortcuts.app” + “Calendar.app”.

I have a daily shortcut that runs at X time. Shortcut checks a calendar for events, if today contains one or more events. It will parse the text from these events (comma separated fully qualified phone numbers or iMessage accounts), and send the message contained in the body of the event.

Added bonus here is that I can also send group messages.

If I need to have the message sent on repeat, then I put the cal event on repeat.

I could possibly even have templated messages (ie, insert month and year into message), but I haven’t deep dived into that rabbit hole.

Downside here though is that you need an iOS device to always be on.

  • thedays 2 years ago

    This sounds like a good solution.

    Can you provide an example or two of how you format the events in your calendar to allow them to be sent at a scheduled time by the Shortcuts app?

    • xyst 2 years ago

      I’ll publish something soon about it. It was inspired by another post/tweet. But I set that up long ago and do not have the article saved.

  • tootahe45 2 years ago

    Last time i checked you need to swipe to confirm every time your automation attempts to send a message? kinda kills the automation part. I was shocked that there was almost nothing to be automated with messages on IOS as third party apps can't even read or send them. The Tasker app for android is great for this kind of thing.

    • xyst 2 years ago

      nah, there’s an option in shortcuts to run without any interaction from user. As long as phone is on/charged. Then it runs.

      I have an old iPhone that runs this automation. Haven’t touched it in many months. Still runs without a hitch.

  • dambi0 2 years ago

    I believe you can run shortcuts on an Apple computer too.

    • xyst 2 years ago

      yes, you can. But I haven’t tried it myself.

      Although if the script has some dependency on iOS or macOS specific function (ie, existence of “Apple script”). Then the shortcut might not be portable between macOS <-> iOS

latexr 2 years ago

I like reviewing my scheduled messages before sending (maybe the person has said something in the meantime), so the solution I came up with is a shortcut which first asks for text input, then a contact, then the time. All in the best possible interface in context, no need to worry about special syntax or formatting.

The message text is URL encoded, the phone number is auto-retrieved from the contact, then an sms: URL is generated and added to my reminders app. When the time comes, I simply click the link and it auto-populates in Messages, ready to send or tweak.

  • reidjsOP 2 years ago

    I like your solution a bit more because it doesn’t require scheduling this script to run on a cron or something. How do you URL encode the message? Could you share the whole shortcut

alchemist1e9 2 years ago

This could be insanely useful for me. Thank you! It means I could have a private monitoring approach that send myself a message on events I want notifications on? I didn’t even know iMessage allowed sending a self message.

  • daed 2 years ago

    Telegram bots API works well for this FYI, unless there’s a reason you need it in Messages.app

dsalzman 2 years ago

I’ve built something similar with ios shortcuts. One shortcut that uses prompts and data jar to schedule and store messages. It also creates a cal event as a reminder to myself. It supports group texts. Then I have three automations that run in the morning, noon, and afternoon that check for scheduled messages and send them. Works well. Happy to share if interest.

  • anonymous344 2 years ago

    what's the purpose for this?

    • jitl 2 years ago

      Sometimes I’m up at 4am and want to send a message to someone at a reasonable hour when they’re not going to be in Do-not-Disturb mode, seems like a good enough way to accomplish. I use Slack “schedule tomorrow for 9am” pretty frequently for the same use case.

    • dsalzman 2 years ago

      I use it more as a reminder system. Someone tells me to checkin next week or in a couple days and I can just schedule the text right then so I dont forget.

Solvency 2 years ago

Out of curiosity couldn't one recreate Twilio just by running an extended version of this from a Macbook?

You could read all inbound messages from the Messages app and reply as well. You could even hook it up to a local LLM and run a small support agent.

Is there ANY reason a small business owner couldn't do this and avoid paying SaaS fees?

  • anonymouse008 2 years ago

    Unfortunately no, Apple has usage limits on iMessage / SMS relaying. Many people hack around this, SendBlue.co being the only long running service, but it's full of the graveyard of folks trying to do this.

    • Solvency 2 years ago

      What does this mean in practice? I leave my Messages app on my laptop open all day and correspond entirely through it with family. Since I'm typing I send messages rapidly at volume. I've never once hit a limit. Think hundreds of responses a day.

      If an app running on my machine has subclassed the Messages app and is reading strings and sending hit strokes to the (Send) button on my behalf, how can Apple possibly rate limit this?

      • anonymouse008 2 years ago

        It means test on prod and find out

        (lose your main iCloud account... 'bold move Cotton')

      • mrweasel 2 years ago

        It's probably like those email providers that allows you some number of outbound emails per, but it's like 200 - 1000. High enough that most users won't ever notice, but low enough that there's no way to use the service commercially.

      • password4321 2 years ago

        By number of different recipients?

  • reidjsOP 2 years ago

    It only works for iMessage texts, unfortunately.

    • dimask 2 years ago

      It can also work for SMSs with some changes in the applescript. We made a very similar tool that use to send automated SMSs to experiment participants 2 times per day. The setup is similar and there is a bash script that is called using cron twice per day and calls a matlab script (similar to the python script here) that calls an applescript. This is the applescript that, in practice, sends iMessage to those with iphone and SMS to those without

      https://github.com/earlychildcog/automate_sms_to_participant...

    • FredPret 2 years ago

      Might work in areas with huge iMessage market share like North America - I know probably two people with the "green texts"

    • Solvency 2 years ago

      But the Messages application can send texts to non-iPhone numbers...

      • reidjsOP 2 years ago

        I tried sending to a non iMessage number, it failed to send, but there may be a way.

  • marxisttemp 2 years ago

    “For a Linux user, you can already build such a system yourself quite trivially by getting an FTP account, mounting it locally with curlftpfs, and then using SVN or CVS on the mounted filesystem. From Windows or Mac, this FTP account could be accessed through built-in software.”

    People (and corporations) will pay a lot of money to have someone else manage and maintain their infrastructure.

pavel_lishin 2 years ago

This is cool. I like code like this that bandaids over someone's problems. I think all of us have things like this laying around, and it's always cool to be reminded of that fact.

jpalawaga 2 years ago

I love scheduled send. I find it amazing iphones still do not have that extremely basic functionality.

  • seoulbigchris 2 years ago

    I remember when all the basic non-smart phones, like the few Samsung flip phones I had when I first moved to Seoul has this very basic ability. This feature was been dropped in the transition to smart phones for some reason.

Krasnol 2 years ago

Signal has this feature build in, btw.

I use it mostly with my SO as a reminder we send to each other at certain times.

jbaber 2 years ago

I'm honestly shocked that with all the ways iphone users are supposed to live in a better world than me, they lack this simple, obvious useful ability that the lowliest SMS/MMS user has.

  • smt88 2 years ago

    I loathe being forced to use Apple products because there are so many of these simple missing features.

    • sentientslug 2 years ago

      I’m not sure how you are in any way forced to use Apple products

      • jbaber 2 years ago

        In America iMessage has extremely strong network effects. I read about an Android user who carried around an iPhone specifically to avoid having a green bubble with dating prospects.

      • smt88 2 years ago

        My family and friends primarily use iMessage group threads as social media. There's also a lot of location sharing via Apple.

        It's difficult to get most people to switch to something else and impossible to get old people to do it.

  • cookie_monsta 2 years ago

    I have honestly never felt the need for this and had to click on a menu that I am ashamed to say I never thought of clicking on but yes, there it is. Scheduled send for SMS. You can even edit the time/ content right there in the UI.

    Thanks!

baxtr 2 years ago

Thanks for sharing. What do you use it for mostly?

  • reidjsOP 2 years ago

    I just built it this morning! I was planning to use it to send myself reminders.

    • latexr 2 years ago

      Why not use the Reminders app instead?

      • reidjsOP 2 years ago

        Was also planning on using it for sending happy birthday texts

    • baxtr 2 years ago

      Awesome! I wish iMessage had an api so that you didn’t need to go through a computer to do these things.

asciii 2 years ago

Very useful, thanks for sharing!

digiconfucius 2 years ago

This is awesome! I think a certain friend of mine would really like it lol.

anonymouse008 2 years ago

Here's an Apple Script moving through iMessage to SMS if required. Make sure to add helpers to update the recipients contact to default to SMS, otherwise you're just cluttering your Messages history with failed messages.

--------

tell application "Messages" set phoneNumber to "+15555555555" set messageToSend to "This is a test!"

try set iMessageService to (1st account whose service type = iMessage) set iMessageBuddy to participant phoneNumber of iMessageService

  if exists iMessageBuddy then
   set theMessage to send messageToSend to iMessageBuddy
   delay 2 -- Wait for a short time to allow the message status to update
   
   if status of theMessage is not "delivered" then
    error "iMessage not delivered"
   else
    log ("sent as iMessage to: " & phoneNumber)
   end if
  else
   error "Not an iMessage user"
  end if
 on error
  try
   set SMSService to (1st account whose service type = SMS)
   set SMSBuddy to participant phoneNumber of SMSService
   send messageToSend to SMSBuddy
   log ("sent as SMS to: " & phoneNumber)
  on error
   log ("ERROR: COULD NOT SEND TO: " & phoneNumber)
  end try
 end try
end tell
nlawalker 2 years ago

The use of “computer” throughout got me excited. Requires a Mac, yes?

  • anonymouse008 2 years ago

    Yep, is AppleScript

    Still don’t know how they get around auto send, iMessage required user input last time I tried this

    [Edit] Shortcuts still require user interaction, apparently mac does not, that's interesting

    • HnUser12 2 years ago

      On iOS shortcuts you don’t need user interaction if you disable “show when run” on the shortcut.

  • reidjsOP 2 years ago

    I'll edit the readme for clarity

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection