Формат сообщения AppleScript - полный сбой при переводе строки - PullRequest
0 голосов
/ 22 апреля 2020

Я отправляю целую кучу отдельных текстовых сообщений с помощью AppleScript на ноутбук MacBook, связанный с iPhone.

Если я создаю сообщение, скопируйте его вручную, вставьте в сообщения и отправьте это вручную, одно сообщение за раз (копировать вставить сообщение, копировать вставить номер телефона, отправить) все работает просто отлично. Я могу легко отформатировать сообщение в своем черновике, и форматирование сохраняется. Если я попытаюсь сделать это с помощью скрипта, перевод строки будет потерян.

Желаемое сообщение:

Привет всем,

Это будет специальная встреча, которая состоится в пятницу, 10:00. Пожалуйста, позвоните на собрание группы, линия доступа xxxxxxxxxxx

Topi c обсуждения: квартальные продажи.

Отличная работа всем, Продажи через крышу в этом квартале; Мы все получаем повышение зарплаты, ура. Подробности поделились на встрече.

Опять же, спасибо всем

Сьюзен,
Менеджер по продажам

И вот как это происходит.

Привет всем, это будет специальная встреча, которая состоится в пятницу, 10:00. Пожалуйста, позвоните на собрание группы, линия доступа xxxxxxxxxxxTopi c обсуждения: квартальные продажи. Отличная работа всем, Продажи через крышу в этом квартале; Мы все получаем повышение зарплаты, ура. Подробности поделились на встрече. Еще раз спасибо Сьюзен, менеджеру по продажам

А вот и AppleScript:

set textMessage to "Hello Everybody,\n\nThis is going to be a special meeting taking place
    on Friday, 10AM.  Please call in to the group meeting, access line xxxxxxxxxxx\n\nTopic
    of Discussion: Quarterly Sales.  \n\nGreat Job everybody, Sales are thru the roof this 
    quarter;  We're all getting pay raises, yippee. Details shared at the meeting. 
    \n\nAgain, thanks to all \n\nSusan, \nSales Manager\n"

set phonelist to {"1999-555-6850", "1999-555-9496", "1999-555-7170", "1999-555-4445", 
    "1999-555-1182", "1999-555-7463", "1999-555-1809", "1999-555-8916", "1999-555-5139", 
    "1999-555-5252", "1999-555-6646", "1999-555-3642", "1999-555-2437", "1999-555-0755", 
    "1999-555-8732", "1999-555-6202", "1999-555-0310", "1999-555-7410", "1999-555-3300", 
    "1999-555-0655"}
set i to 0
activate application "Messages"
tell application "System Events" to tell process "Messages"
    repeat with indPhone in phonelist
        set i to i + 1
        key code 45 using command down -- press Command + N to start a new window
        keystroke indPhone   -- input the phone number
        delay 1
        key code 36
        key code 36           -- press Enter to focus on the message area 
        keystroke textMessage -- type some message
        delay 1
        key code 36           -- press Enter to send
        say i
        delay 5 -- Audio plus delay = success tracking. 
                -- If for some reason something goes wrong, I know where I am.  
                -- e.g. phone rings during the process.
    end repeat
end tell

Примечание: ссылка .

Примечание № 2. О, и обратите внимание, это не фактическое отправляемое сообщение. Это просто надуманный пример для StackOverflow. Эта аудитория, получающая сообщения, просто не понимает, что происходит, когда кто-то отвечает на групповое сообщение. Они просто не понимают, вздох. Так что нет, групповые текстовые страницы НЕ являются ответом. Мы хотим, чтобы отдельные текстовые сообщения, по одному на человека. Но спасибо за это предложение. Как правило, мы отправляем чуть менее 100 сообщений с помощью этой техники одновременно.

Есть мысли о том, почему мы теряем форматирование \n, когда оно запускается как скрипт? Если вы выполняете этот точный сценарий на своем Ma c, видите ли вы те же результаты?

Редактировать: Я собираюсь поделиться некоторыми снимками экрана с телефона.

Что я хочу (созданный с помощью ручного копирования и вставки в приложение Сообщения):

What I want to see

Вот что я получаю с помощью приведенного выше сценария (/n/n):

Here's what I get with script including /n

И вот что я получаю с техникой Роба C & return &. (См. Комментарии)

Not what I want & return technique

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Только что справившись с проблемой «новой строки» ... Чтобы получить встроенный возврат каретки, вам нужно набрать control-return. Чтобы сделать sh это с помощью AppleScript, разбейте переменную textMessage на список абзацев, затем нажмите клавишу в каждом абзаце, а затем key code 36 using control down, чтобы разбить абзац.

set textMessageParts to {"Hello Everybody,", "", "This is going to be a special meeting taking place on Friday, 10AM.  Please call in to the group meeting, access line xxxxxxxxxxx", "", "Topic of Discussion: Quarterly Sales.", "", "Great Job everybody, Sales are thru the roof this quarter;  We're all getting pay raises, yippee. Details shared at the meeting. ", "", "Again, thanks to all", "", "Susan,", "Sales Manager"}
-- empty strings are added above to make two sequential line breaks

set phonelist to {"1999-555-6850", "1999-555-9496", "1999-555-7170", "1999-555-4445", "1999-555-1182", "1999-555-7463", "1999-555-1809", "1999-555-8916", "1999-555-5139", "1999-555-5252", "1999-555-6646", "1999-555-3642", "1999-555-2437", "1999-555-0755", "1999-555-8732", "1999-555-6202", "1999-555-0310", "1999-555-7410", "1999-555-3300", "1999-555-0655"}
set i to 0
activate application "Messages"
tell application "System Events" to tell process "Messages"
    repeat with indPhone in phonelist
        set i to i + 1
        keystroke "n" using command down -- press Command + N to start a new window
        keystroke indPhone -- input the phone number
        delay 1
        key code 36
        key code 36 -- press Enter to focus on the message area 
        repeat with thisPara in textMessageParts
            keystroke thisPara -- type one paragraph from the list
            key code 36 using control down -- type an inline line break
        end repeat
        delay 1
        key code 36 -- press Enter to send
        say i
        delay 5 -- Audio plus delay = success tracking. 
                -- If for some reason something goes wrong, I know where I am.  
                -- e.g. phone rings during the process.
    end repeat
end tell
0 голосов
/ 22 апреля 2020

Этот код работает (частично адаптировано с здесь ):

set textMessage to "Hello Everybody,\n\nThis is going to be a special meeting taking place
on Friday, 10AM.  Please call in to the group meeting, access line xxxxxxxxxxx\n\nTopic
of Discussion: Quarterly Sales.  \n\nGreat Job everybody, Sales are thru the roof this 
quarter;  We're all getting pay raises, yippee. Details shared at the meeting. 
\n\nAgain, thanks to all \n\nSusan, \nSales Manager\n"

set phonelist to {"1999-555-6850", "1999-555-9496", "1999-555-7170", "1999-555-4445", 
"1999-555-1182", "1999-555-7463", "1999-555-1809", "1999-555-8916", "1999-555-5139", 
"1999-555-5252", "1999-555-6646", "1999-555-3642", "1999-555-2437", "1999-555-0755", 
"1999-555-8732", "1999-555-6202", "1999-555-0310", "1999-555-7410", "1999-555-3300", 
"1999-555-0655"}

repeat with indPhone in phonelist
    tell application "Messages"
        set targetService to (id of 1st service whose service type = iMessage)
        set theBuddy to buddy ("+1" & indPhone) of service id targetService
        send textMessage to theBuddy
    end tell
end repeat
...