Page 1 sur 1

Envois de textes en SMS ou WhatApp, etc en un seul message

Posté : dim. 24 juil. 2022 16:48
par GuyLepoint
Bonjour je suis responsable d'une association et j'ai besoin d'envoyer des messages avec pièces jointes via différents médias (Mails, SMS, WhatsApp...) selon ce dont chaque membre (de 20 à 90 ans...) utilise pour communiquer.
Depuis ma base de données j'ai réalisé une interface via AutoIt, merci au forum

Pas de soucis pour le multi destinataires via le passage d'un fichier des destinataires en paramètres
Pas de soucis pour le multi pièces jointes via les positionnements à la souris selon l'interface web et l'envoi de l'emplacement
Je buttais sur l'envoi de textes !

Mes textes comportants souvent des retours à la ligne, ceux-ci étaient interprétés pour les MMS, WhatsApp ... par l'envoi d'un ENTER et donc d'in nouveau message... 15 retours à la ligne = 15 messages ! avec un bip à chaque fois sur le portable du destinataire... Cela aurait été très dur à supporté pour leurs oreilles sensibles.

Après pas mal d'essais voici la formule qui fonctionne !

send(StringRegExpReplace($sFileReadTexte, chr(13), "^" ))

avec $sFileReadTexte le texte lu dans le fichier Texte passé en paramètre



Exemple pour WhatsApp
;______________________________________________________WhatsApp
#include "C:\ASCPRS_Application\AutoIt\AutoIt3\Include\MsgBoxConstants.au3"
#include "C:\ASCPRS_Application\AutoIt\AutoIt3\Include\GUIConstantsEx.au3"
#include "C:\ASCPRS_Application\AutoIt\AutoIt3\Include\Array.au3"

; https://www.autoitscript.com/forum/topic/154439-chrome-udf/

; les paramètres en entrée de ce programme  AutoIt

$NbreParam= UBound($CmdLine) - 1
;MsgBox($MB_SYSTEMMODAL, "Nbre Param  : ", $NbreParam,4)
;
$Dest         =  $CmdLIne[1]             ; le fichier texte des destinataires; 1 par ligne
;MsgBox($MB_SYSTEMMODAL, "Liste Gest : ", $Dest,4)

$Emetteur  =  $CmdLIne[2]          ; l'émetteur du message
;MsgBox($MB_SYSTEMMODAL, "Emetteur  : ", $Emetteur,4)

$Objet       =  $CmdLIne[3]           ; l'émetteur du message  
;MsgBox($MB_SYSTEMMODAL, "Objet   : ", $Objet,4)

$Texte      =  $CmdLIne[4]            ;  le texte du message  ( c'est le même pour chaque destinataire)
;MsgBox($MB_SYSTEMMODAL, "Texte  : ", $Texte,4)

; Vérifie si l'ouverture du fichier des destinataires est  OK pour la lecture
$FileDest = FileOpen($Dest, 0)      ;   le chemin complet de la liste des destinataires, un destinataire par ligne, format texte  .txt
If $FileDest = -1 Then
    MsgBox(0, "Error", "Impossible Ouvrir Fichier  Destinataires.")
    Exit
EndIf

; Vérifie si l'ouverture du fichier du Texte est  OK pour la lecture
if $Texte <> "_" then
      $FileTexte = FileOpen($Texte, 0)      ;   le chemin complet de la liste du Texte, format  .txt
      If $FileTexte = -1 Then
         MsgBox(0, "Error", "Impossible Ouvrir Fichier Texte.")
         Exit
      else
           $sFileReadTexte = FileRead($FileTexte)
      EndIf
endif
; Pour l'envoi potentiel à un grand nombre de destinataires il est préférable d'avoir déjà ouvert l'interface WEB
;On active Chrome Whatsapp
WinActivate("[CLASS:Chrome_WidgetWin_1]")

;  Run("C:\Program Files\Google\Chrome\Application\chrome.exe https://web.whatsapp.com/")
   sleep (4000)   ; long d'attendre pour savoir si l'interface est ouvert, il manque vraiment une gestion des onglets sous AutoIt
                     
     Local $hWnd =   WinWaitActive("[ACTIVE]","","12")
      sleep (2000)
    ;WinSetState("[ACTIVE]", "", @SW_MAXIMIZE)
    WinSetState($hWnd, "", @SW_MAXIMIZE) 
   ; MsgBox($MB_SYSTEMMODAL, "Page Web : ", $hWnd,4)
   
;Exit

; Position Pointeur  sur fenêtre   "WhatsApp"      
;destinataire        200,200      numéro international + enter
;Frappe du Texte    :   le saisir puis Enter
;Sélectionner pièce Jointe   540, 765
 ;   si photo   545, 700
  ;  si autres extensions = documents
  ;              540, 500
;envoyer le nom du fichier  et ENTER
; Envoi Message    Enter

      ; Read in lines of text until the EOF is reached
      While 1
         $LineDest = FileReadLine($FileDest)
         If @error = -1 Then ExitLoop
           
               if StringMid ( $LineDest, 2, 15) >" " then
                  ; Destinataire
                     ;                                   StringMid ( "string", start [, count = -1] )
                     $Destinataire = "+33" & StringMid ( $LineDest, 2   ,    14)
                     MsgBox($MB_SYSTEMMODAL, "Destinataire : ", $Destinataire  ,1)
                     MouseClick("left",200,200,1)
                     sleep (1000)
                     send  ($Destinataire & "{ENTER}")
                     sleep (1000)
                     Send ("{ENTER}")    
                     sleep (2000)

                  ; Objet
                     send  ($Objet)
                     sleep (500)
                     Send ("{Enter}")    ; Retour à la ligne
                     sleep (500)

                  ;    Texte s'il existe
                     if $Texte <> "_"  then
                        ; Texte Message  
                        send(StringRegExpReplace($sFileReadTexte, chr(13), "^" ))
                        Send ("{Enter}")  
                        sleep (1000)   
                     endif
                     
                     
                  ;   Pièces Jointes s'il y en a
                     For $i = 5 To    $NbreParam
                        $PieceJointe = $CmdLine[$i]
                           if $PieceJointe> "" then      
                           
                                                 ; si  format JPG,  JPEG, TIF, PNG, GIF
                               $a_myarray = StringSplit  ("JPG,  JPEG, TIF, PNG, GIF",",")                             
                              ;                     StringInStr ( "string"        , "substring" [, casesense = 0 [, occurrence = 1 [, start = 1 [, count]]]] )
                              $s_search    = StringInStr ( $PieceJointe  ,          "."     ,   0                   ,     1                  ,    1           ,       4)
                              ;MsgBox($MB_SYSTEMMODAL, "Extension   : ", $s_search ,4)
                              $ret = _ArraySearch($a_myarray, $s_search)
                                         MouseClick("left",545,770,1)      ; trombonne
                                    If $ret <> - 1 Then   ; c'est une image
                                       ;MsgBox(0, "Found", "Element found in the array!")
                                       MouseClick("left", 545, 700 ,1)
                                    Else                         ; c n'est  pas une image
                                       ;MsgBox(0, "Not Found", "Element Not found In the array!")
                                       MouseClick("left", 545, 500 ,1)
                                    EndIf
                           
                              sleep (1000)             
                              send ($PieceJointe)
                              sleep (1000)
                              Send ("{ENTER}")
                              ; Envoyer  à chaque pièce jointe sinon le + se déplace à chaque envoi ....
                              MouseClick("left", 1470, 765,1)  
                              sleep (1000)         
                           endif  ; Pièce Jointe
                     Next
                     
                  ; Envoyer
                     Send ("{Enter}")
                  sleep (1000)  
         
            endif ; Destinataire non null
      Wend
   

FileClose($FileDest)


   
    ; Ferme la fenêtre en utilisant le handle retourné par WinWait.
   WinSetState($hWnd, "", @SW_MINIMIZE)
Exit