Source de données : Smsmode


1Présentation

smsmode.com est un service permettant d'envoyer des SMS à des téléphones portables. Vous pouvez vous référer à son site pour connaître ses tarifs.

Cette source de données permet d'envoyer des SMS de notification (a contrario des SMS marketing ; attention, envoyer un message commercial pourrait vous exposer à un blocage).

Si vous avez correctement configuré les paramètres de connexion au service smsmode, Temma crée automatiquement un objet de type \Temma\Datasources\Smsmode, avec lequel vous pourrez envoyer des SMS de notification (a contrario des SMS marketing ; attention, envoyer un message commercial pourrait vous exposer à un blocage). Par convention, nous partirons du principe que vous avez nommé cette connexion sms dans le fichier etc/temma.php (voir la documentation de la configuration).

Dans les contrôleurs, la connexion à smsmode est alors disponible en écrivant :

$this->sms

Dans les autres objets gérés par le le composant d'injection de dépendances, la connexion à smsmode est accessible en écrivant :

$this->_loader->dataSources['sms']

2Configuration

Dans le fichier etc/temma.php (voir la documentation de la configuration), vous déclarez le DSN (Data Source Name) qui permet de se connecter à smsmode.

Le DSN de connexion à smsmode s'écrit de la forme : smsmode://[SENDER_NAME:]API_KEY

  • SENDER_NAME est une chaîne de caractères optionnelle, sans espaces ni accents, qui remplace le numéro de l'expéditeur.
  • API_KEY est la clé d'API que vous pouvez générer sur l'interface utilisateur.

3Appels unifiés

3.1Accès de type tableau

use \Temma\Datasources\Smsmode as TµSmsmode;

// envoi de SMS
$this->sms['33611223344'] = "Message à envoyer";

// envoi de SMS à plusieurs destinaires
$this->sms['33611223344,33622334455'] = "Message";

// récupération du statut d'un message
// (voir méthode send() plus bas)
$statut = $this->sms[$msgId];
if ($statut == TµSmsmode::STATUS_SENT) {
    // ...
} else if ($statut == TµSmsmode::STATUS_MSG_INTERNAL_ERROR ||
           $statut == TµSmsmode::STATUS_INTERNAL_ERROR) {
    // ...
} else if ($statut == TµSmsmode::STATUS_INVALID_PARAMETERS) {
    // ...
} else if ($statut == TµSmsmode::STATUS_SMS_NOT_FOUND) {
    // ...
} else if ($statut == TµSmsmode::STATUS_TEMPORARY_UNAVAILABLE) {
    // ...
} else if ($statut == TµSmsmode::STATUS_MSG_RECEIVED) {
    // ...
} else if ($statut == TµSmsmode::STATUS_GATEWAY_RECEIVED ||
           $statut == TµSmsmode::STATUS_GATEWAY_DELIVERED) {
    // ...
} else if ($statut == TµSmsmode::STATUS_DELIVERY_ERROR) {
    // ...
}

// effacement d'un message programmé
// (voir la méthode send() plus bas)
unset($this->sms[$msgId]);

3.2Méthodes générales

// effacement d'un message programmé
// (voir la méthode send() plus bas)
$this->sms->remove($msgId);

// effacement de plusieurs messages programmés
$this->sms->mRemove([$msgId1, $msgId2, $msgId3]);

3.3Gestion de données brutes

use \Temma\Datasources\Smsmode as TµSmsmode;

// envoi de SMS
$this->sms->write('33611223344', "Message");

// envoi de SMS à plusieurs destinataires
$this->sms->write('33611223344,33622334455,33633445566',
                  "Message");

// envoi de SMS avec programmation pour une date future,
// et définition d'une référence interne
$this->sms->write('33611223344', "Message", [
    'sendDate'  => '31122029-12:50', // format 'DDMMYYYY-HH:mm',
    'reference' => 'login_1234',
]);

// récupération du statut d'un message
// (voir méthode send() plus bas)
$statut = $this->sms->read($msgId);
if ($statut == TµSmsmode::STATUS_SENT) {
    // ...
} else if ($statut == TµSmsmode::STATUS_MSG_INTERNAL_ERROR ||
           $statut == TµSmsmode::STATUS_INTERNAL_ERROR) {
    // ...
} else if ($statut == TµSmsmode::STATUS_INVALID_PARAMETERS) {
    // ...
} else if ($statut == TµSmsmode::STATUS_SMS_NOT_FOUND) {
    // ...
} else if ($statut == TµSmsmode::STATUS_TEMPORARY_UNAVAILABLE) {
    // ...
} else if ($statut == TµSmsmode::STATUS_MSG_RECEIVED) {
    // ...
} else if ($statut == TµSmsmode::STATUS_GATEWAY_RECEIVED ||
           $statut == TµSmsmode::STATUS_GATEWAY_DELIVERED) {
    // ...
} else if ($statut == TµSmsmode::STATUS_DELIVERY_ERROR) {
    // ...
}

// lecture de plusieurs statuts de messages 
$statuts = $this->sms->mRead([$msgId1, $msgId2, $msgId3]);

4Appels spécifiques

4.1Envoi de message avec récupération d'identifiant

L'utilisation de la méthode send() est conseillée lors de l'envoi d'un SMS, car elle permet de récupérer l'identifiant du message, permettant ensuite de récupérer le statut du message (afin de savoir s'il a été délivré ou non), ou encore d'effacer un message dont l'envoi a été programmé pour une date future.

// envoi d'un SMS
$msgId = $this->sms->send('33611223344', "Message");

// envoi de SMS avec programmation pour une date future,
// et définition d'une référence interne
$msgId = $this->sms->send('33611223344', "Message",
                          '31122029-12:50', 'login_1234');

// appel identique, avec les paramètres nommés
$msgId = $this->sms->send('33611223344', "Message",
                          sendDate: '31122029-12:50',
                          reference: 'login_1234');

// envoi d'un SMS à plusieurs destinataires
$msgId = $this->sms->send(['33611223344', '33622334455', '33633445566'],
                          "Message");

4.2Récupération du solde de compte

Pour pouvoir envoyer des SMS grâce au service smsmode, il faut d'abord créer un compte, puis le créditer en achetant des crédits.

La méthode getBalance() permet de récupérer le montant du solde disponible dans le compte, permettant ainsi d'anticiper le besoin de recréditer le compte.

// récupération du solde
$sole = $this->sms->getBalance();