Esta web utiliza 'cookies' propias y de terceros para ofrecerte una mejor experiencia y servicio

Ok Leer más

Bundle para enviar sms desde Symfony2

Bundle para enviar sms desde Symfony2 - Sms Up

Bundle para enviar sms desde Symfony2

Facebooktwittergoogle_plusredditpinterestlinkedintumblrmail

En este articulo vamos a ver como enviar sms desde symfony2, uno de los frameworks php mas usados, de una forma fácil y rápida, usando para ello la API de Smsup y el bundle SmsupapiBundle.

Lo primero que debemos hacer es registrarnos en la web para obtener nuestras credenciales de acceso a la API.

Ahora solo tenemos que instalar el bundle en nuestra aplicación symfony2, para ello usaremos composer como siempre, ejecutando esta instrucción:

composer require smsup/smsup-api-bundle

Con esto nos instalamos la librería y sus dependencias. Ahora tenemos que añadir el bundle al archivo app/AppKernel.php:

new smsup\SmsupapiBundle\SmsupapiBundle(),

Ya solo nos queda una cosa para tener el bundle completamente configurado, y es añadir nuestras credenciales de la API al archivo config.yml (u otro archivo de configuración que usemos).

smsupapi:
    api_id: ID_USUARIO_API
    api_secret: CLAVE_SECRETA_API

Ahora ya esta configurada la librería y lista para poder usarla.

Tenemos 5 métodos disponibles para interactuar con la API, los cuales estan expuestos en el servicio ‘smsup.smsupapi.sender’, vamos a ver a continuación para que sirve cada uno de ellos y como usarlos.

Enviar un sms:

El primer método nos permite enviar un sms a uno o varios teléfonos diferentes. Se haría de la siguiente forma:

$sender = $this->get('smsup.smsupapi.sender');
$sms = $sender->getNewSms()
                ->setTexto('Texto del sms')
                ->setNumeros(['000000000']);
$resul = $sender->enviarSms($sms);
if($resul->getHttpcode()===200){
    $idenvio = $resul->getResult()[0]['id'];
}

Primero obtenemos el servicio, luego obtenemos un nuevo objeto Sms y lo rellenamos con los datos deseados. En este caso solo rellenamos los dos únicos campos obligatorios, pero hay algunos mas disponibles:

  • setTexto: Indicamos el texto del mensaje (Obligatorio).
  • setNumeros: Debemos pasar un array con el listado de números a los que queremos enviar el mensaje (Obligatorio).
  • setFechaenvio: Este campo solo se debe rellenar si se desea programar el envío para una fecha posterior a ahora, y se le debe pasar un Datetime con la fecha deseada (Opcional).
  • setReferencia: Nos permite indicar un valor único para esta petición, por si queremos acceder posteriormente al resultado de esta. Esto es útil si por alguna razón ocurre un fallo al procesar la respuesta de la API (Opcional).
  • setRemitente: El remitente que queremos mostrar del mensaje. Hasta 14 números o 11 caracteres alfanuméricos (solo letras y números, sin ñ ni acentos). Si se deja en blanco se usara el configurado en la aplicación web (Opcional).

Como respuesta recibimos un objeto con dos métodos:

  • getHttpcode: Este método nos devuelve el código Http de respuesta de la API. Si no es 200 ha ocurrido algún problema.
  • getResult: Si todo ha ido bien, nos devuelve un array con una entrada por cada teléfono indicado en la petición.  Cada entrada contiene dos claves: el teléfono enviado y el id del envío a ese teléfono.

Eliminar un envío programado:

Si programamos un envío desde la API podemos borrarlo antes de la hora de envío.

$sender = $this->get('smsup.smsupapi.sender');
$resul = $sender->eliminarSms($idsms);

La variable $idsms indica el id recibido al hacer la petición de envío. Obtenemos un objeto similar al de la petición anterior.

Obtener el estado de un sms:

También podemos obtener fácilmente el estado en que esta un envío.

$sender = $this->get('smsup.smsupapi.sender');
$resul = $sender->estadoSms($idsms);

De nuevo indicamos el id recibido en la petición. Obtenemos de nuevo un objeto del tipo anterior, donde en getResult tenemos el estado del envío.

Créditos disponibles en la cuenta:

Para poder hacer envíos, debemos tener créditos disponibles en nuestra cuenta. Con este método podemos saber en todo momento cuantos créditos tenemos, y evitar que nuestros envíos se paren por falta de créditos.

$sender = $this->get('smsup.smsupapi.sender');
$resul = $sender->creditosDisponibles();

De nuevo en getResult tendríamos el numero de créditos disponibles.

Obtener el resultado de una petición anterior:

En algún momento puede ocurrir algún error mientras procesamos la respuesta de un envío por cualquier cuestión, y nos quedaríamos sin saber los ids recibidos, por lo que no podríamos obtener luego, por ejemplo, su estado. Para evitar esto, podemos indicar, al hacer la petición, una referencia que identifica a cada petición y que debe ser única, como hemos visto antes. Mediante este método podemos obtener de nuevo la petición a un envío anterior, indicando la referencia que le asignamos, y de este modo recuperarnos ante un error.

$sender = $this->get('smsup.smsupapi.sender');
$resul = $sender->resultadoPeticion($referencia);

Aquí obtendríamos la misma respuesta recibida al hacer la petición original con la referencia indicada.

Hasta aquí el repaso a este bundle que nos permite enviar sms de formas fácil desde symfony2. Quedo abierto a cualquier pregunta, comentario o consulta que deseéis.

Alejandro Blanco

Alejandro Blanco

Director Departamento Desarrollo at Nubematica S.L
Alejandro Blanco

Latest posts by Alejandro Blanco (see all)