J'envoie tout un tas de messages texte individuels en utilisant AppleScript sur un ordinateur portable MacBook lié à un iPhone.
Si je crée un message, copiez-collez-le manuellement dans Messages et envoyez-le manuellement, un message à la fois (copier-coller le message, copier-coller le numéro de téléphone, envoyer), les choses fonctionnent très bien. Je peux facilement mettre en forme le message dans mon brouillon et la mise en forme est conservée. Si j'essaie de faire cela via un script, les sauts de ligne sont perdus.
Message souhaité:
Bonjour tous le monde,
Ce sera une réunion spéciale qui aura lieu le vendredi à 10 heures. Veuillez appeler à la réunion de groupe, accéder à la ligne xxxxxxxxxxx
Sujet de discussion: Ventes trimestrielles.
Excellent travail tout le monde, les ventes sont à travers le toit ce trimestre; Nous recevons tous des augmentations de salaire, yippee. Détails partagés lors de la réunion.
Encore une fois, merci à tous
Susan,
Directeur commercial
Et c'est ainsi que ça arrive.
Bonjour à tous, Ce sera une réunion spéciale qui aura lieu vendredi à 10 heures. Veuillez appeler à la réunion de groupe, accéder à la ligne xxxxxxxxxxx Sujet de discussion: Ventes trimestrielles. Excellent travail tout le monde, les ventes sont à travers le toit ce trimestre; Nous recevons tous des augmentations de salaire, yippee. Détails partagés lors de la réunion. Encore une fois, merci à tous Susan, directrice des ventes
Et voici le 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
Remarque: référence .
Note 2. Oh, et notez que ce n'est pas le message réel envoyé. C'est juste un échantillon artificiel pour StackOverflow. Ce public qui reçoit les messages ne comprend tout simplement pas ce qui se passe lorsque quelqu'un répond à un message de groupe. Ils ne comprennent tout simplement pas, soupir. Donc non, les pages de texte de groupe ne sont PAS la réponse. Nous voulons des SMS individuels, un par personne. Mais merci pour cette suggestion. En règle générale, nous envoyons un peu moins de 100 messages avec cette technique, à la fois.
Avez-vous une idée des raisons pour lesquelles nous perdons le format \n
lorsque celui-ci s’exécute en tant que script? Si vous exécutez ce script exact sur votre Mac, voyez-vous les mêmes résultats?
Modifier: je vais partager quelques captures d'écran du téléphone.
Ce que je veux (créé via un copier-coller manuel dans l'application Messages):
Voici ce que j'obtiens avec le script ci-dessus ( /n/n
):
Et voici ce que j'obtiens avec le RobC & return &
technique. (Voir les commentaires)
3 Réponses :
Ce code fonctionne (partiellement adapté à partir d' ici ):
Vous avez vu que j'ai référencé cette publication exacte de stackoverflow comme référence? Avez-vous essayé ce code sur votre Mac? Cela a-t-il fonctionné pour les numéros de téléphone que vous n'avez pas utilisés auparavant? Il semble que vous n'ayez pas testé ce code (je peux vous voir ajouter le code de pays deux fois et je sais que cela échouera.). Notez le décompte des votes et les commentaires dans cette publication d'OS. Je vais nettoyer votre code et essayer cela, mais je suis presque sûr que c'était ma tentative n ° 3 (je suis au n ° 15 environ maintenant). Vous avez dit «ce code fonctionne», ce qui implique que vous l'avez testé exactement tel qu'il est écrit. Est-ce vrai?
@zipzit J'ai testé ce code (même si j'ai commenté la liste des nombres et mis mon numéro à tester) et cela a fonctionné comme vous l'avez spécifié. Preuve: imgur.com/a/zQLASyW
alors oui, j'ai testé votre code. Le format de sortie est superbe. Sauf que c'est un échec. Ce code n'enverra PAS de SMS à un nouveau contact, quelqu'un avec qui vous n'avez jamais parlé ou paginé auparavant. Identique aux notes et commentaires de la référence. Voici la note que vous avez manquée Hey guys i'm confused.. why is this marked as the answer?.. it doesn't start a new conversation. – jon Nov 21 '18 at 19:01
. Et oui sans ça c'est un échec. Merci d'avoir essayé.
Traiter simplement le problème de «nouvelle ligne» ... Pour obtenir un retour chariot en ligne, vous devez taper control-return. Pour ce faire avec AppleScript, textMessage
variable textMessage
en une liste de paragraphes, puis appuyez sur la touche dans chaque paragraphe suivi du key code 36 using control down
pour faire le saut de paragraphe.
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
Aie. La mise à jour de MacOS vers la version 11.0.1
Big Sur version 11.0.1
totalement ce script. Échec majeur. Pas certain de pourquoi.
@zipzit: pas encore sur Big Sur, donc je ne peux pas le tester. Recevez-vous des messages d'erreur?
Nan. Aucun message nulle part. Il commence bien, perd les sauts de ligne ci-dessus, puis saute le deuxième destinataire du msg téléphonique, saute au troisième #, colle le numéro de téléphone 2 et le message est regroupé dans un seul texte de masse, envoie cela, et le timing va au sud à partir de là. J'essaie d'enregistrer et de voir ce qui se passe ... etc ... question, devrais-je faire une nouvelle préoccupation ici sur SO ou sur la pile AppleMac?
@zipzit: Commençons ici et voyons si je peux le comprendre sans trop de problèmes. Si cela dure trop longtemps, vous devrez publier une nouvelle question.
@zipzit: généralement, AppleScript ne change pas beaucoup entre les révisions majeures, mais je vais jeter un œil à la liste des révisions BS et voir si quelque chose me saute aux yeux.
J'ai pensé revenir à l'essentiel, enregistrer ma création d'un message simple et voir ce qui se passe. Je ne peux même pas voir les résultats du processus d'enregistrement. (nouvelle question tirée sur Apple SO) Une chose qui est en quelque sorte utile. J'ai saupoudré beaucoup de say
messages là - bas pour que je puisse suivre le déroulement du processus. (L'équivalent JS est console.log ..) _
J'ai lancé le script de base (sans le bon formatage des espaces vides) en ajoutant de petits délais et en modifiant la commande d'envoi en: key code {55, 35} --Press Command + Enter to send
Il s'avère donc que lorsque j'ai mis à niveau le macOS vers la version 11.0.1
Big Sur version 11.0.1
le script fourni par Ted Wrigley s'est écrasé. Voici une version corrigée, prête pour le copier-coller.
Je voulais ajouter quelques leçons apprises en corrigeant ce problème:
key code {57, 36}
n'est pas le même que le key code 36 using shift down
. Je ne sais pas ce qui se passe avec ça. Une méthode fonctionne, une non.Un grand merci à Ted Wrigley pour sa contribution à la question initiale.
Chaque nouvelle ligne ne provoquera-t-elle pas l'envoi du message? Il semble que vous vous retrouviez avec chaque ligne étant son propre message.
Au lieu de
\n
utiliser& return &
pour concaténer le texte là où vous voulez un saut de ligne. Par exemple:set textMessage to "Hello Everybody," & return & return & "This is going to be..."
. Ou utilisez& linefeed &
place, par exempleset textMessage to "Hello Everybody," & linefeed & linefeed & "This is going to be..."
@Robc Voir les modifications apportées à mon message. Celui-ci est également un échec. Appréciez la pensée. Vous en avez d'autres? Le problème ici est que mon téléphone enverra 100x7 = 700 messages texte à la fois. Pensez-vous que cela soulèvera les sourcils chez mon fournisseur de services téléphoniques?
À peu près sûr que j'ai essayé il y a sept versions. Mais je vais bien sûr essayer à nouveau. Échouer. Il fait juste écho aux commandes html et affiche:
<html><p>Hello Everybody,</p><p>This is going to be a special meeting taking place on Friday, 10AM. ...
. Je l'ai essayé à la fois avec et sans<html>
, échec.Est-il possible d'utiliser un caractère tel que «0x2028» (NSLineSeparatorCharacter)? AKA, un retour en douceur?