-
-
Save aktau/8958054 to your computer and use it in GitHub Desktop.
#!/bin/sh | |
if [ "$#" -eq 1 ]; then stdinmsg=$(cat); fi | |
exec <"$0" || exit; read v; read v; read v; exec /usr/bin/osascript - "$@" "$stdinmsg"; exit | |
-- another way of waiting until an app is running | |
on waitUntilRunning(appname, delaytime) | |
repeat until my appIsRunning(appname) | |
tell application "Messages" to close window 1 | |
delay delaytime | |
end repeat | |
-- the fact that Messages.app is running | |
-- does not mean it is ready to send, | |
-- unfortunately, add another small delay | |
delay delaytime | |
end waitUntilRunning | |
on appIsRunning(appName) | |
application appname is running | |
end appIsRunning | |
-- use system events (unused) | |
on SysevAppIsRunning(appName) | |
tell application "System Events" to (name of processes) contains appName | |
end appIsRunning | |
-- use finder (unusged) | |
on finderAppIsRunning(appName) | |
tell application "Finder" to (name of every process) contains appName | |
end appIsRunning | |
-- taken from: | |
-- http://stackoverflow.com/questions/11812184/how-to-send-an-imessage-text-with-applescript-only-in-provided-service | |
-- thanks to users @Senseful and @DigiLord | |
on run {targetBuddyPhone, targetMessage} | |
tell application "Messages" | |
-- if Messages.app was not running, launch it | |
set wasRunning to true | |
if it is not running then | |
set wasRunning to false | |
launch | |
close window 1 | |
my waitUntilRunning("Messages", 1) | |
close window 1 | |
end if | |
-- send the message | |
set targetService to 1st service whose service type = iMessage | |
set targetBuddy to buddy targetBuddyPhone of targetService | |
send targetMessage to targetBuddy | |
-- if the app was not running, close the window | |
if not wasRunning | |
close window 1 | |
end if | |
end tell | |
end run |
@solderjs
Here's how to send messages without manually creating a buddy:#!/bin/sh if [ "$#" -eq 1 ]; then stdinmsg=$(cat); fi exec <"$0" || exit; read v; read v; read v; exec /usr/bin/osascript - "$@" "$stdinmsg"; exit on run {phoneNumber, message} activate application "Messages" tell application "System Events" to tell process "Messages" key code 45 using command down -- press Command + N to start a new window keystroke phoneNumber -- input the phone number key code 36 -- press Enter to focus on the message area keystroke message -- type some message key code 36 -- press Enter to send end tell end run
Here's how to send to multiple contacts with a csv file: https://gist.github.com/james-tindal/3951ec2c076a5158e15245f817f92de4
Works on my computer.
Thanks for this. Is there a way to do this without having the iMessage window popup and display on the desktop?
I get error "966:967: syntax error: Expected expression, etc. but found unknown token. (-2741)" what does this mean ? thanks
Can you help me send photo through iMessage ? I tried this code but it show "Failed to send" after few minutes of waiting
set theAttachment1 to POSIX file "/path to file/test.png"
send file theAttachment1 to targetBuddy
Added some features to my fork you may find interesting:
https://gist.github.com/devopsec/0359ce51ea4fa904b1c3674b8c56db78
Is there a way to keystroke a Group chat instead of a phone number?
@solderjs
Here's how to send messages without manually creating a buddy:
Here's how to send to multiple contacts with a csv file: https://gist.github.com/james-tindal/3951ec2c076a5158e15245f817f92de4
Works on my computer.