Saltearse al contenido

Enviar SMS a Todos los Contactos

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.

  • 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.
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
}
CampoTipoRequeridoDescripción
messagestringContenido del mensaje SMS
typeMessageTypeNoTipo de mensaje (por defecto SMS)
countrystringNoCódigo de país ISO 3166-1 alpha-2
{
"message": "¡Importante! Actualización de nuestros términos de servicio disponible en nuestro sitio web.",
"type": "SMS",
"country": "CO"
}

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
}>;
}
{
"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"
}
]
}

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": []
}
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;
}
// Uso
const 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}`);
  • 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 queueId retornado 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.