envoyer sms en masse

Eléphanteau du PHP | 49 Messages

23 mai 2018, 13:24

Bonjour tt le monde,

Je suis debutant en php et je commence seulement a comprendre le développement après multiple cours sur internet.
J'ai besoin d'aides sur une application d'envoie de SMS en masse .

Voici ce que je veux faire et j'ai pas d'idée comment le faire .
L'application est créer .
1) j'importe dans la table numéros les numeros à qui je veux envoyer les sms ok fonctionne
2) j'ai créer un formulaire avec un seul champs texte area ok fonctionne
3) j'ai créer un script qui se connect à la DB / puis a la table numeros ok fonctionne
4) j'extrait par une boucle fetch numero par numeo ok fonctionn
5) j'ai créer une boucle pour envoyer les message à travers une api get url ok fonctionne
6) a chaque itération de la boucle le nouveau numéro extrait est changer dans l'url et dans la variable $url ok fonctionne
7) tout fonctionne sauf que ce que je veux faire et c'est que j'ai besoin de vous pour optimiser le code car tout çà est très lent

c'est à dire que je trouve que çà va pas assez vite d'envoyer 1 par 1 les numéro de téléphone
c'est à dire une seul url executer à la fois , j’aimerais donc savoir comment je peut faire pour exécuter plusieurs thread simultanée?

je m'explique 1 thread lance un premier sms
tout de suite j'ai un 2 eme thread qui prend en charge le numero suivant
et ainsi de suite jusqu'a 10 thread simultané j’aimerais faire sans que jamais le même numéro soit renvoyer au même personne toujours un incrément de 1 ce fait .

par exemple j’ai une campagne de 1000 clients a envoyer un sms je peut pas attendre que les 1000 soit envoyer faudrait envoyer 10par 10 sms et meme si c possible 100par 100 vous voyait ce que je veux faire un robot sms rapide et puissant.

est ce possible ? ou pas ?

voici mon code si vous pouvez me dire ou je peut agir pour accélérer les envoie de sms
oui j'oublier j'utilise un fournisseur SMPP avec une api get url que vous pouvez voir dans le code ci-dessous
merci pour votre aide.

<?php
error_reporting( E_ALL );
ini_set( 'display_errors', 1 );


    $server = "localhost";
    $login = "root";
    $pass = "";

    try {
      $connexion = new PDO("mysql:host=$server;dbname=sms;charset=utf8", $login , $pass);
      $connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      echo 'connexion établie à la base de donnée <br>';

      $requete1 = $connexion->prepare(


        "SELECT numero FROM numeros "


      );
      $requete1->execute();
      $resultat = $requete1->fetch();



      while($row = $resultat)
{

 $username = "user";
 $password = "password";
 $tel = $resultat['numero'];
 $from ="0000000000"; // assigned Sender_ID
 $message = urlencode( $_POST["message"]); // Message text required to deliver on mobile number

  $data = "username="."$username"."&password="."$password"."&from="."$from"."&to="."$tel"."&text="."$message";
  $url = "https://www.smsms.com/myaccount/sendsms.php?".$data;

$arrContextOptions=array(
    "ssl"=>array(
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    ),
);


 $result = file_get_contents($url);


echo $result;


}


      }
    catch (PDOException $e) {
        echo 'Echec de la connexion:' .$e->getMessage();
    }












?>

<?php include("inc/header.php"); ?>
<?php include("inc/menugauche.php"); ?>


<div id="msgSubmit2" style="color:#5cb85c;font-size:25px text-align=center;" class="h3 text-center">Envoie massif en cours... !</div>






Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8431 Messages

23 mai 2018, 19:37

Le plus simple, c'est que tu demandes à ton prestataire d'envoi de SMS si il gère l'envoi à plusieurs numéros en même temps.
De telle sorte que tu fait un seul appel, en indiquant le message et tous les numéros destinataires et basta !

Par exemple, Messagebird (c'est le 1er résultat sur Google, je n'ai jamais utilisé leurs services) permet d'envoyer à 1000 destinataires simultanés, juste en envoyant les numéros en un seul appel séparés par une virgule
https://support.messagebird.com/hc/en-u ... p-Message-
https://support.messagebird.com/hc/en-u ... -HTTP-API-

L'APi sms d'OVH permet aussi de le faire si j'en crois la doc :
https://docs.ovh.com/fr/sms/api_sms_cookbook/
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 49 Messages

23 mai 2018, 20:47

merci @rthur pour ta reponse, mais je veux vraiment le faire en php avec ce fournisseur car mon boss travail avec lui.
si vous pouvez m'aider à envoyer plusieurs instance simultanée çà serais cool d'avoir une idée comment je peut faire çà

merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8431 Messages

23 mai 2018, 23:20

Mon conseil serait de déléguer l'aspect multithread à la librairie Curl qui le gère de façon très efficace.

Tu peux utiliser la librairie PHP rolling-curl pour te faciliter la vie, il y a des exemples assez explicites :
https://github.com/chuyskywalker/rolling-curl
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 49 Messages

24 mai 2018, 15:54

ouaou çà a l'air bien ce que tu me propose la , je vais tester je te tien au courant merci @arthur

Eléphanteau du PHP | 49 Messages

24 mai 2018, 16:03

J'ai regarder la doc d'appres toi ,je doit prendre quel exemple ?

le basicSingle.php
basic.multi.php
le individualRequests.php
ou le searchScrape
ou SearchScrapProcess.php

je suis perdu tans de possibilité , je suis debutant en php aussi..
Et est que je prend tout le code je l'integre dans ma boucle foreach ??
comment je doit m'y prendre à ton avi ?

voici mon nouveau code.
<?php
error_reporting( E_ALL );
ini_set( 'display_errors', 1 );

 //1) Connexion au serveur SQL
     $server = "localhost";
     $login = "root";
     $pass = "";
     $comptRow = "";

     try {
       $connexion = new PDO("mysql:host=$server;dbname=sms;charset=utf8", $login , $pass);
       $connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
       echo 'connexion établie à la base de donnée <br>';

// 2) Preparation de la requete
      $requete1 = $connexion->prepare(
        "SELECT numero FROM numeros "
      );
      $requete1->execute();
      $resultat = $requete1->fetch(); // je recupere la requete ici

// 3) DEBUT VARIABLE GENERALE
      $username = "user";
      $password = "pass";
      $tel = $resultat['numero'];
      $from ="0000000000"; // assigned Sender_ID
      $message = urlencode( $_POST["message"]); // Message text required to deliver on mobile number

       $data = "username="."$username"."&password="."$password"."&from="."$from"."&to="."$tel"."&text="."$message";
       $url = "https://www.smsms.com/myaccount/sendsms.php?".$data;

      $arrContextOptions=array( //  4) j'annule le SSL ICI
         "ssl"=>array(
             "verify_peer"=>false,
             "verify_peer_name"=>false,
         ),
      );

        $nb = count($resultat);
         foreach ( $resultat as $numero ){
           // boucle foreach enregistré dans la variable $numero
          echo $nb;
          echo  '<div id="msgSubmit2" style="color:#5cb85c;font-size:25px text-align=center;" class="h3 text-center"> '.$nb.' Message Envoyé !!! </div>';

          $result = file_get_contents($url);
          echo $result;

        }
         // ferme la boucle


      

      }
    catch (PDOException $e) {
        echo 'Echec de la connexion:' .$e->getMessage();
    }


?>





Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8431 Messages

25 mai 2018, 00:14

A priori, l'exemple individualRequests est plutôt adapté à ton besoin :
https://github.com/chuyskywalker/rollin ... quests.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 49 Messages

26 mai 2018, 23:18

j'aimerais savoir si c'est possible de faire la chose suivante.

1) on se connect à la base de donnée

2) je lance la requete pour extraire une colonne avec des numeros de telephone ok

3) je parcours le tableau dans avec un fetchall

4) j'enregistre les 10 premiers resutlat dans une variable

$numero1 à $numero10



si oui comment peut t-on parcourir un tableau et prendre les 10 premiers resutlat de numero de telephone dans 10 variable differente et apres continuer 10 autres jusqu'a la fin du tableau ?



merci de votre aide

Eléphanteau du PHP | 49 Messages

07 juin 2018, 08:27

personne pour m'aider? up

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8431 Messages

07 juin 2018, 09:52

j'aimerais savoir si c'est possible de faire la chose suivante.

1) on se connect à la base de donnée

2) je lance la requete pour extraire une colonne avec des numeros de telephone ok

3) je parcours le tableau dans avec un fetchall

4) j'enregistre les 10 premiers resutlat dans une variable

$numero1 à $numero10
Oui tout ça est possible.
Plutôt que de nommer tes variables avec un numéro dedans ($numero1/2/3/...) ma recommandation serait que tu utilises plutôt un tableau PHP (array) $numero[1], $numero[2]... c'est plus facile à manier, notamment quand tu voudras accéder à la liste de tous les numéros.

si oui comment peut t-on parcourir un tableau et prendre les 10 premiers resutlat de numero de telephone dans 10 variable differente et apres continuer 10 autres jusqu'a la fin du tableau ?
Je suis pas sûr de comprendre ton truc mais le plus simple à mon avis, c'est de ne pas utiliser fetchAll(), mais plutôt fetch() que tu auras mis dans un while.

Comme ça directement lors de la récupération SQL tu parcours les résultats un par un, et tous les 10 résultats tu fais ton traitement.

Pour le fetch() dans une boucle while, il y a un exemple dans la doc :
http://php.net/manual/fr/pdostatement.f ... ample-1064

Ensuite pour savoir quand tu arrives à 10 résultats, remplis simplement à chaque itération dans la boucle while() un tableau par exemple $numero[]
A noter aussi qu'en utilisant la variable $numero[] avec les crochets vides cela va permettre d'ajouter un élément dans le tableau à la suite des autres, du coup tu n'as pas à gérer le numéro toi même de 1 à 10 ça va se faire tout seul.
Quand count($numero)==10 , alors tu fait ton traitement pour les 10 numéros, puis tu vides le tableau $numero (avec unset()) ainsi la boucle while() peut continuer sur les 10 suivants
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 49 Messages

07 juin 2018, 21:08

Bonsoir, @rthur,
Merci beaucoup pour ta reponse plutot complete , comme je suis vraiment débutant peut tu s'il te plais me mettre un exemple de code complet ?
car il y a des milliers de façon de faire ce que tu décrit si bien ...

Si non je vais réexpliquer ce que je cherche à faire exactement.

mon but est de créer une sorte de robot qui envoie des sms en masse une plateforme d'envoie de sms professionnel .

je m'explique aujourdhui il existe ce qu'on appel des robots d'appel, qui appel des milliers de telephone à la fois qui debite vraiment beaucoup d'appel pour les call center par exemple.

tu va me dire quel rapport?
Et bien moi je cherche à créer un robot d'envoie de milliers de sms en masse en passant par une passerelle sms qui accepte c'est millier d'envoie de sms .

le probleme est le suivant si j'importe dans ma base de donnée une campagne de mille numéro à envoyer un message sms.
Et bien php est super lent pour envoyer c'est 1000 message , php va executer une boucle 1 par 1 et tens qu'il va pas envoyer le premier sms il passeras pas au suivant.

donc moi ce que je cherche c'est trouver comment envoyer des milliers de sms en quelque minutes.
A l'image de se robot d'appel qui est capable de faire des milliers d'appel en quelque minutes , je cherche à créer un robot de sms qui est capable d'envoyer des milliers de sms en quelques minutes et pour l'instant php avec une boucle est trés trés lent à executer l'api du fournisseur de sms par les variable $_GET. que tu peut voir plus haut dans ce topic.

donc si ta une exemple de script qui est capable d'executer autant de requete à la minutes pour allez trés vite , je suis preneur.
Et si ma solution 10/10 est trop lent et ta une meilleurs solution je suis preneurs.

MErci à toi arthur de me laisser un code exemple cela va vraiment m'aider.
j'ai pensais à exécuter plusieurs script avec une boucle simultanément mais je n'est pas assez d’expérience pour pouvoir créer ce genre de script.. si tu peut m'aide à serait cool de ta part..

imagine j'ai une campagne de 1000 ou même 10 000sms à envoyer si j'attend chaque execution d'une boucle çà sera trés trés lent voir trop long ,surtout que je veux créer une plateforme d'envoie de sms professionnel alors voila le challenge...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8431 Messages

08 juin 2018, 10:19

Bonsoir, @rthur,
Merci beaucoup pour ta reponse plutot complete , comme je suis vraiment débutant peut tu s'il te plais me mettre un exemple de code complet ?
Je t'ai déjà mis le lien vers un exemple pour la récupération des données, j'ai détaillé les fonctions à utiliser, tu as juste à regarder la doc et à mettre ces fonctions ensemble. :D
Et bien moi je cherche à créer un robot d'envoie de milliers de sms en masse en passant par une passerelle sms qui accepte c'est millier d'envoie de sms .
[...]
donc moi ce que je cherche c'est trouver comment envoyer des milliers de sms en quelque minutes. [...]
Et si ma solution 10/10 est trop lent et ta une meilleurs solution je suis preneurs.
[...]
surtout que je veux créer une plateforme d'envoie de sms professionnel alors voila le challenge...
Et bien le challenge est très simple :
Tu dis à ton boss que son prestataire n'est pas le bon et ne permet pas de faire ce qu'il veut. 8-)
Pour le l'envoi massif, il faut passer par un prestataire qui sait gérer des milliers d'envois simultanés, or celui là ne permet que des envois unitaires. C'est ton rôle de faire une petite étude et de conseiller ton boss sur les alternatives possibles avec pour chacune les avantages et inconvénients. :idea:

On en revient à ma 1ère réponse :
post456294.html#p456294
Un bon ouvrier doit utiliser les bons outils pour être efficace et faire son travail correctement, et bien c'est pareil pour un développeur.

Si tu essayes de bidouiller une solution bancale en étant débutant en PHP, ce n'est pas comme cela que tu vas créer une solution professionnelle.
Quand tout le reste a échoué, lisez le mode d'emploi...