Search code examples
rapplescript

r send a text message with AppleScript in a function that includes the message and number as parameters


The question and answer at this link Send a text message from R use a function to create the AppleScript. I have copied it below

send_text = function(message){
  system(paste('osascript -e \'tell application "Messages"\' -e \'send "', message, 
               '" to buddy "xxx-yyy-zzzz" of (service 1 whose service type is iMessage)\' -e \'end tell\''))
}
send_text("Hello world")

I'd like to modify the function so it can take both the message and the number, like this - send_text = function(number, message)

I can't figure out how the paste works to replace xxx-yyy-zzz with the variable number.


Solution

  • The paste function works by combining everything separated by commas into a single string. All you have to do is extract the "xxx-yyy-zzzz" from the sentence, replace it with number, and use commas.

    send_text = function(message, number){
        paste('osascript -e \'tell application "Messages"\' -e \'send "', message, 
                '" to buddy \"', number, '\" of (service 1 whose service type is iMessage)\' -e \'end tell\'')
    }
    send_text("Hello world", "555-888-0909")
    #> [1] "osascript -e 'tell application \"Messages\"' -e 'send \" Hello world \" to buddy \" 555-888-0909 \" of (service 1 whose service type is iMessage)' -e 'end tell'"
    
    

    Or alternatively you could use string interpolation from the glue package and insert the variable directly into the string with brackets.

    
    send_text_2 <- function(message, number){
        glue::glue(
            'osascript -e \'tell application "Messages"\' -e \'send "{message}" to buddy "{number}" of (service 1 whose service type is iMessage)\' -e \'end tell\''
        )
    }
    
    send_text_2("Hello world", "555-888-0909")
    #> osascript -e 'tell application "Messages"' -e 'send "Hello world" to buddy "555-888-0909" of (service 1 whose service type is iMessage)' -e 'end tell'
    

    Created on 2023-02-19 with reprex v2.0.2