Enviar SMS a Todos los Contactos
POST /api/messages/sms/all
Sección titulada « /api/messages/sms/all»Envía mensajes SMS a todos los contactos disponibles en tu base de datos. La operación es asíncrona: la API registra cada mensaje en la persistencia, programa la entrega en BullMQ y retorna un resumen del encolado.
Autenticación
Sección titulada «Autenticación»- Incluye el token bearer en
Authorization: Bearer <token>. - Solo los miembros que han aceptado los términos actuales pueden activar acciones de mensajería; de lo contrario, el servicio retorna
403 Forbidden.
Cuerpo de la petición
Sección titulada «Cuerpo de la petición»interface SmsAllMessagePayload { message: string; // Cuerpo del texto, mantén bajo el límite de caracteres del proveedor type?: MessageType; // Por defecto MessageType.SMS cuando se omite country?: string; // Código ISO 3166-1 alpha-2 opcional para normalización de números}| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
message | string | Sí | Contenido del mensaje SMS |
type | MessageType | No | Tipo de mensaje (por defecto SMS) |
country | string | No | Código de país ISO 3166-1 alpha-2 |
Ejemplo del cuerpo
Sección titulada «Ejemplo del cuerpo»{ "message": "¡Importante! Actualización de nuestros términos de servicio disponible en nuestro sitio web.", "type": "SMS", "country": "CO"}Respuesta
Sección titulada «Respuesta»La API responde con el contrato compartido MessageEnqueueResultDto:
interface MessageEnqueueResultDto { queueId: string; // Identificador del job de BullMQ, vacío cuando no se encoló nada channel: 'sms'; messages: Array<{ id: string; // UUID del mensaje persistido recipient: string; // Número telefónico normalizado por el backend }>;}Respuesta exitosa (201 Created)
Sección titulada «Respuesta exitosa (201 Created)»{ "queueId": "sms-queue-67890", "channel": "sms", "messages": [ { "id": "msg-uuid-1", "recipient": "+573001234567" }, { "id": "msg-uuid-2", "recipient": "+573009876543" }, { "id": "msg-uuid-3", "recipient": "+573007654321" } ]}Sin destinatarios válidos (200 OK)
Sección titulada «Sin destinatarios válidos (200 OK)»Cuando no existen contactos válidos en la base de datos, el servicio responde con 200 OK, un queueId vacío y un array de messages vacío.
{ "queueId": "", "channel": "sms", "messages": []}Ejemplos de uso
Sección titulada «Ejemplos de uso»async function sendSmsToAll(token: string, payload: SmsAllMessagePayload) { const response = await fetch('/api/messages/sms/all', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}`, }, body: JSON.stringify(payload), });
if (!response.ok) { throw new Error(`SMS broadcast failed: ${response.status}`); }
const data: MessageEnqueueResultDto = await response.json(); return data;}
// Usoconst result = await sendSmsToAll('your-token', { message: 'Promoción especial: 50% de descuento en todos nuestros productos hasta el viernes.', country: 'CO'});
console.log(`SMS enviados a ${result.messages.length} contactos`);console.log(`Queue ID: ${result.queueId}`);import axios from 'axios';
async function sendSmsToAll(token: string, payload: SmsAllMessagePayload) { const { data } = await axios.post<MessageEnqueueResultDto>( '/api/messages/sms/all', payload, { headers: { Authorization: `Bearer ${token}`, }, }, );
return data;}
// Usoconst result = await sendSmsToAll('your-token', { message: 'Mantenimiento programado del sistema mañana de 2:00 AM a 4:00 AM.'});curl -X POST "/api/messages/sms/all" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "message": "Actualización importante: Nueva función disponible en tu cuenta.", "country": "CO" }'Notas operacionales
Sección titulada «Notas operacionales»- El backend elimina destinatarios duplicados por lote y omite silenciosamente destinos inválidos.
- La validación del saldo se ejecuta antes del encolado; créditos insuficientes retornan una respuesta de error sin encolar mensajes.
- Usa el
queueIdretornado para correlacionar el estado de entrega dentro de la UI de administración o vía endpoints de estado dedicados. - Cada mensaje persiste metadatos del proveedor y puede ser auditado a través de los filtros del módulo de mensajería.
- Importante: Considera cuidadosamente el impacto de enviar a todos los contactos, especialmente para el costo y la relevancia del mensaje.