domingo, 25 de marzo de 2012

Envío de SMS desde plataforma4


Este articulo es una guía para usar el servicio de envío de SMS provisto por el proveedor
 SMSMASIVOS (ver http://www.smsmasivos.com.ar/ ).

Seteo inicial del entorno


La arquitectura de mensajería soporta múltiples servidores de ingreso y egreso de mensajes. Como tal el primer paso es configurar un servidor de SMS saliente en el entorno.
Ingresar con una cuenta que tenga permisos de administrador y abrir el menú “Administración” -> “Mensajería” -> “Nuevo Servidor”


Completar los campos como se muestra a continuación:




Tomar nota del código asignado al servidor, en este caso es el “2”

Una vez creado el servidor saliente, hay que indicar que este será el servidor por defecto. Para eso hay que editar el archivo /www/includes/configuration/any.php y agregar un define con el dato.


//Fin de la configuración
define("DEFAULT_SMS_SERVER",2);


En este caso, ponemos el valor “2” que es el código del servidor recién creado. En cada implementación el numero puede ser diferente.


Uso del servicio:

  • a) Incluir el archivo “common/cmessaging.php” al comienzo del script.
  • b) Crear un objeto mensaje ( $msg = new cmessage(); )
  • c) Invocar al método SendSMS ( $msg->SendSMS(); )

Ejemplo:
Se crea una clase y un formulario para enviar mensajes SMS. El código de envío se implementa en el hook.



Clase (Modelo):


<!-- Clase SMS TEST -->
<make object="class">
  <build out_file="csms_test.php" classname="csms_test" classlabel="Test SMS">
    <parse tablename="reg_test" />
      <field name="sms_destino" type="varchar" size="30"/>
      <field name="sms_mensaje" type="varchar" size="140"/>
  </build>
</make>


La clase define dos campos, uno para el numero de teléfono y otro para el mensaje a enviar.

Table Maint (Vista):


<!-- ABM de SMS TEST -->
<make object="table_maint">
  <build out_file="sms_maint.php" classname="csms_test" title="Test de envio de SMS">
    <group title="Mensaje" id="basicos">
      <field name="sms_destino" presentation="PHONE" label="Destino" ismandatory="true" note="Usar formato 15-4444-5555"/>

      <field name="sms_mensaje" presentation="TEXTAREA" label="Mensaje" ismandatory="true" rows="2" cols="70"/>
    </group>
  </build>
</make>


El formulario simplemente presenta estos dos campos al operador.

Hook (controller):


<?php
include_once "common/cmessaging.php";

class csms_test_hooks extends cclass_maint_hooks {

  public function canSaveDB()
  {
    return false;
  }

  public function beforeSaveDB() {
    $err = array();
    $data = $this->m_data;

    $dest = $data->getField("sms_destino")->getValue();
    $mensaje = $data->getField("sms_mensaje")->getValue(); 
    
    $msg = new cmessage();
    $ret = $msg->sendSMS(DEFAULT_SMS_SERVER,$dest,$mensaje);
    if($ret!="OK")
      $err[] = "MENSAJE: ".$ret;
    return $err;
  }
}
?>


El Hook utiliza el método beforeSaveDB() y el canSaveDB() para evitar que el framework quiera salvar el registro a la base de datos (recordar que la clase no se basa en una tabla real en la base).

Se recuperan los valores del formulario y se los pasa al método sendSMS() para el envío del mensaje. Si todo esta bien, el servicio contesta “OK” caso contrario responde con el mensaje de error apropiado.
En este ejemplo, el mensaje de error, se empuja al usuario, con el prefijo “MENSAJE: “ (Si no se le pone este prefijo, el error no llega al usuario, solo va a los logs de errores).


Proceso de la cola de mensajes:

Para que los mensajes efectivamente salgan a la calle, hay que ejectuar un proceso de envío de la cola de mensajes. Es semejante al proceso de envío de mails.

Crear un script:


#!/bin/bash
#Envio mensajes

cd /Users/jcordero/plataforma4/modules/messaging

/Applications/XAMPP/xamppfiles/bin/php -dinclude_path=.:/Users/jcordero/plataforma4_sites/roac/www/includes:/Users/jcordero/plataforma4/includes -f email_process.php $1

/Applications/XAMPP/xamppfiles/bin/php -dinclude_path=.:/Users/jcordero/plataforma4_sites/roac/www/includes:/Users/jcordero/plataforma4/includes -f sms_process.php $1



En este script deberá ajustar:
  • La ubicación del ejecutable php
  • La ubicación del sitio del proyecto y su nombre
  • La ubicación del código de plataforma4

Una vez creado el script apropiado (verificar bien los paths). En el ejemplo yo llame el script “run.sh”
Darle permiso de ejecutable con “chmod +x run.sh” y acceso a la cuenta del cron de ser necesario.

Finalmente hay que modificar el crontab del sistema.
Hacerlo con el comando crontab -e (editar)



    * * * * * /Users/jcordero/plataforma4/modules/messaging/run.sh www.ombu-test.com.ar

Nuevamente ajustar el path absoluto adonde se encuentra el script anterior (run.sh). Pasarle el ultimo valor con el identificador del sitio.

El editor del crontab es el “vi” así que recuerden que se inserta con la “i”, borra con la “x” y se sale con “ESC” -> “:” -> “wq”

Las cinco * indican que el script se ejecutara una vez por minuto.



No hay comentarios:

Publicar un comentario