Fuente de datos: Smsmode


1Presentación

smsmode.com es un servicio para enviar mensajes de texto a teléfonos móviles. Consulta su sitio web para conocer las tarifas.

Esta fuente de datos te permite enviar SMS de notificación (a diferencia de los SMS de marketing; ten cuidado, enviar un mensaje comercial podría exponerte a un bloqueo).

Si has configurado correctamente los parámetros de conexión al servicio smsmode, Temma creará automáticamente un objeto de tipo \Temma\Datasources\Smsmode. Por convención, supondremos que has llamado a esta conexión sms en el archivo etc/temma.php (consulta la documentación de configuración).

En los controladores, la conexión a smsmode está entonces disponible escribiendo:

$sms = $this->sms;

En otros objetos gestionados por el componente de inyección de dependencias, la conexión a smsmode es accesible escribiendo:

$sms = $loader->dataSources->sms;
$sms = $loader->dataSources['sms'];

2Configuración

En el archivo etc/temma.php (consulta la documentación de configuración), declaras el DSN (Data Source Name) usado para conectarte a smsmode.

El DSN de conexión a smsmode se escribe como: smsmode://[SENDER_NAME:]API_KEY

  • SENDER_NAME es una cadena opcional de un máximo de 11 caracteres, sin espacios ni acentos, que reemplaza el número del remitente.
  • API_KEY es la clave de API que puedes generar en la interfaz de usuario.

3Llamadas unificadas

3.1Acceso tipo array

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

// enviar un mensaje de texto
$sms['33611223344'] = "Mensaje para enviar";

// enviar un mensaje de texto a varios destinatarios
$sms['33611223344,33622334455'] = "Mensaje";

// recuperar el estado del mensaje
// (ver el método send() más abajo)
$statut = $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) {
    // ...
}

// eliminar un mensaje programado
// (ver el método send() más abajo)
unset($sms[$msgId]);

3.2Métodos generales

// eliminar un mensaje programado
// (ver el método send() más abajo)
$sms->remove($msgId);

// eliminar varios mensajes programados
$sms->mRemove([$msgId1, $msgId2, $msgId3]);

3.3Gestión de datos en bruto

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

// enviar un mensaje de texto
$sms->write('33611223344', "Mensaje");

// enviar un mensaje de texto a varios destinatarios
$sms->write('33611223344,33622334455,33633445566',
                  "Mensaje");

// enviar un SMS programado para una fecha futura,
// y definición de una referencia interna
$sms->write('33611223344', "Mensaje", [
    'sendDate'  => '31122029-12:50', // formato 'DDMMYYYY-HH:mm',
    'reference' => 'login_1234',
]);

// recuperar el estado del mensaje
// (ver el método send() más abajo)
$statut = $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) {
    // ...
}

// leer varios estados de mensajes
$statuts = $sms->mRead([$msgId1, $msgId2, $msgId3]);

4Llamadas específicas

4.1Envío de un mensaje con recuperación del identificador

Se recomienda usar el método send() al enviar un SMS, ya que te permite recuperar el identificador del mensaje, lo que a su vez te permite recuperar el estado del mensaje (es decir, si se ha entregado o no), o eliminar un mensaje programado para una fecha futura.

// enviar un mensaje de texto
$msgId = $sms->send('33611223344', "Mensaje");

// enviar un SMS programado para una fecha futura,
// y definición de una referencia interna
$msgId = $sms->send('33611223344', "Mensaje",
                          '31122029-12:50', 'login_1234');

// llamada idéntica, con parámetros nombrados
$msgId = $sms->send('33611223344', "Mensaje",
                          sendDate: '31122029-12:50',
                          reference: 'login_1234');

// enviar un mensaje de texto a varios destinatarios
$msgId = $sms->send(['33611223344', '33622334455', '33633445566'],
                          "Mensaje");

4.2Recuperación del saldo de la cuenta

Para poder enviar SMS usando el servicio smsmode, primero debes crear una cuenta, y después acreditarla comprando créditos.

El método getBalance() se usa para recuperar el saldo disponible en la cuenta, lo que te permite anticipar la necesidad de volver a acreditar la cuenta.

// recuperación del saldo
$balance = $sms->getBalance();