0
votes

Format de message AppleScript - Échec total sur le saut de ligne

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):

Ce que je veux voir

Voici ce que j'obtiens avec le script ci-dessus ( /n/n ):

Voici ce que j'obtiens avec le script comprenant / n

Et voici ce que j'obtiens avec le RobC & return & technique. (Voir les commentaires)

Pas ce que je veux et retourne la technique


5 commentaires

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 exemple set 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?


3 Réponses :


0
votes

Ce code fonctionne (partiellement adapté à partir d' ici ):


3 commentaires

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é.



1
votes

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


7 commentaires

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



0
votes

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:

  • Le journal est probablement un meilleur moyen de suivre les progrès qu'un indice audio. Vous devez rendre la zone du journal visible dans l'éditeur de script via le menu supérieur -> Affichage -> Afficher le journal. Vous voudrez être dans l'onglet "Messages" pour voir les entrées du journal.
  • 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.
  • Avant de démarrer le script / macro, vous devez vous assurer que Messages est ouvert et s'exécute sur MacOS.
  • Vous ne souhaitez pas démarrer la macro pendant que Messages est à moitié terminé avec un message précédent. Des choses étranges se produisent.
  • L'arrêt du programme pendant l'exécution de la macro est problématique. Si vous arrêtez l'action au milieu d'une opération de collage, le contenu destiné aux messages finit par être collé au milieu de l'éditeur de script. C'était un désordre total. Si vous devez vous arrêter, assurez-vous que vous n'avez pas corrompu votre script d'origine.
  • Pour les très longues listes de numéros de téléphone, vous devrez peut-être utiliser "l'option L" à la fin de chaque ligne comme caractère de continuation (¬) selon SO63927015

Un grand merci à Ted Wrigley pour sa contribution à la question initiale.


0 commentaires