risk-sms es una herramienta desarrollada en Java para el envío y recepción de mensajes SMS, diseñada como parte del ecosistema risk y pensada para ser integrada de forma nativa con su módulo de Mensajería.
Además, gracias a su arquitectura modular, puede adaptarse fácilmente a otros entornos o sistemas que requieran funcionalidades similares.
Utiliza la librería Cloudhopper SMPP para la comunicación con gateways de SMS mediante el protocolo SMPP, y HikariCP para la gestión eficiente de conexiones a base de datos Oracle.
- 📤Envío de mensajes SMS a través de múltiples servicios SMPP.
- 📩Recepción de mensajes entrantes (MO - Mobile Originated).
- 📬Procesamiento de acuses de entrega (DLR - Delivery Receipt).
- 🗃️Lectura y escritura desde/hacia una base de datos Oracle.
- ⚙️Configuración externa y desacoplada para entornos productivos.
- Java 17 o superior
- Maven 3.6+
- Acceso a un gateway SMPP válido
- Base de datos Oracle accesible, con las siguientes tablas disponibles:
t_mensajes: utilizada para almacenar y procesar los mensajes pendientes de envío.t_mensajes_recibidos: utilizada para guardar los mensajes entrantes (MO).
risk-sms/
├── config/
│ ├── risk-sms.yml.example # Archivo de configuración ejemplo
│ └── risk-sms.yml # Archivo real (no versionado)
├── src/ # Código fuente
├── target/ # Archivos compilados y .jar
├── pom.xml # Configuración Maven
├── LICENCE # Detalles de la licencia
├── .gitignore
└── README.md
El archivo de configuración inicialmente está preparado para configurar una conexión a base de datos, y múltiples conexiones a SMPP.
Está ubicado en config/risk-sms.yml, pero no debe versionarse porque puede contener credenciales. En su lugar, se incluye un archivo de ejemplo:
cp config/risk-sms.yml.example config/risk-sms.ymlEdita el archivo config/risk-sms.yml con los valores adecuados para tu entorno:
# Ejemplo: config/risk-sms.yml
# Conexion a la base de datos
datasource:
serverName: serverName.com.py
port: 1521
serviceName: serviceName
user: user
password: password
maximumPoolSize: 50
minimumIdle: 5
idleTimeout: 30000
connectionTimeout: 10000
# Configuraciones de negocio para el envio de SMS
sms:
- nombre: TEL-OTP
telefonia: TEL # Operadora telefonica. Opcional
clasificacion: OTP # Clasificacion: OTP, AVISO, PROMOCION (u otros). Opcional
cantidadMaximaPorLote: 100 # Cantidad maxima de SMS a enviar por lote. Opcional. Por defecto 100
modoEnvioLote: secuencial_espaciado # Modo de envío: paralelo, paralelo_espaciado, secuencial_espaciado, secuencial_espaciado_async
intervaloEntreLotesMs: 10000 # Tiempo de espera entre lotes de SMS a enviar (en milisegundos)
maximoIntentos: 5 # Número máximo de intentos de envío permitidos de SMS. Opcional. Por defecto 5
# Conexion al Gateway
smpp:
host: host.com.py
port: 54321
systemId: systemId
password: password
sourceAddress: 09751000000
sendDelayMs: 50 # Tiempo de espera entre envíos consecutivos de SMS (en milisegundos). Util para cumplir con límites del proveedor SMPP o evitar sobrecarga. Por defecto 500
- nombre: TEL-AVISO
telefonia: TEL
clasificacion: AVISO
cantidadMaximaPorLote: 100
modoEnvioLote: secuencial_espaciado
intervaloEntreLotesMs: 10000
maximoIntentos: 5
# Conexion al Gateway
smpp:
host: host.com.py
port: 54321
systemId: systemId
password: password
sourceAddress: 09751000000
sendDelayMs: 50
⚠️ Importante: No compartas ni subas el archivorisk-sms.ymlreal al repositorio.
Para compilar y generar el JAR ejecutable con todas las dependencias (desde el directorio raíz del proyecto):
mvn clean installEl JAR final estará en:
target/risk-sms.jar
Para ejecutar el JAR:
java -Xms500M -Xmx500M -XX:MaxDirectMemorySize=250M -server -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=500 -jar target/risk-sms.jarPor defecto, busca el archivo config/risk-sms.yml.
También podés especificar otro archivo:
java -Xms500M -Xmx500M -XX:MaxDirectMemorySize=250M -server -XX:+UseG1GC -XX:+ExplicitGCInvokesConcurrent -XX:MaxGCPauseMillis=500 -jar target/risk-sms.jar path/a/otro-risk-sms.ymlPodés agregar mensajes de prueba en la tabla t_mensajes de tu base de datos y verificar que se procesen correctamente, tanto el envío como la recepción.
- Se utiliza Log4j2 para los logs.
- La configuración puede personalizarse en el archivo
log4j2.xml.
Si tenés dudas, encontraste un error o querés proponer una mejora en el código o la documentación, no dudes en crear un issue.
Estaremos atentos para ayudarte o recibir tus aportes.
Las contribuciones son siempre bienvenidas.
Si querés corregir un error, mejorar el rendimiento o incorporar una nueva funcionalidad:
- Creá una rama con tus cambios.
- Enviá un pull request con una breve descripción.
¡Gracias por ayudar a mejorar risk-sms!
El Proyecto risk-sms está licenciado bajo la licencia MIT. Ver el archivo LICENSE para más detalles.
MIT © 2025 – DamyGenius