Saltar al contenido
nvíame
Capítulo 2 de 511 min13 oct 2026

Envía tu primer SMS

Escribe código real contra el SDK simulado mx y observa el ciclo enviado → entregado.

Basta de teoría. En este capítulo vas a enviar mensajes con el SDK mx, una réplica fiel —pero simulada— de lo que encontrarás en cualquier proveedor. El código se ejecuta en tu navegador, en un Web Worker aislado: sin red, sin cuentas, sin costos.

Anatomía de una llamada de envío

Una llamada de envío necesita, como mínimo, un destinatario en E.164 y un texto. La función devuelve una promesa que se resuelve cuando el proveedor acepta el mensaje, con un id que usarás para correlacionar los estados posteriores.

const res = await mx.sms.send({
  to: "+56912345678",
  text: "Tu pedido fue despachado",
});
// res → { id: "msg_1", status: "sent" }

Pruébalo

Edita el código: cambia el texto, agrega un segundo envío o imprime el objeto completo. Cada vez que dejas de escribir por medio segundo, el playground vuelve a ejecutar el script. Observa cómo la burbuja pasa de sent ✓ a delivered un instante después: eso simula el webhook de estado que llega desde el operador.

// Envía tu primer SMS con el SDK simulado
const res = await mx.sms.send({
  to: "+56912345678",
  text: "Hola desde nvíame 👋 Tu código de bienvenida es NV-2026",
});

console.log("id:", res.id, "· estado:", res.status);

// Prueba: envía a un segundo destinatario
await mx.sms.send({ to: "+5215512345678", text: "Recordatorio: tu cita es mañana 10:00" });

Errores de validación

Intenta llamar mx.sms.send({ text: "hola" }) sin destinatario. El SDK lanza una excepción antes de enviar nada, igual que un proveedor real devolvería un 400 Bad Request. Valida siempre en tu lado: cada rechazo del proveedor es una ida y vuelta de red desperdiciada.

Cuando el envío falla

Prueba a borrar el signo más del número o a dejar el texto vacío. El SDK lanza un error síncrono antes de enviar nada, y el playground lo muestra en rojo. Esa es la primera línea de defensa: validar en tu código lo que el proveedor de todas formas rechazaría, para no pagar una petición de red por un error predecible.

En producción distinguirás tres familias de fallas: errores de validación (4xx, no reintentar), errores transitorios del proveedor (5xx o timeouts, reintentar con backoff) y fallas de entrega reportadas después por webhook (el operador no pudo entregar). Cada familia exige una reacción distinta, y mezclarlas produce duplicados o mensajes perdidos.

Se completa automáticamente al leer el 80%.

Comentarios (3)

Diego Fernández13 oct 2026

Si hago `await mx.sms.send` en un loop de 1.000 números, ¿estoy enviando en paralelo?

Equipo nvíameAutor13 oct 2026

No: `await` dentro de un `for` serializa los envíos. Para volumen, agrupa en lotes con `Promise.all` y respeta el límite de throughput (TPS) de tu cuenta. Lo vemos con detalle en la serie de integraciones.

Sofía Castillo13 oct 2026

Lo apliqué en el proyecto del trabajo. La sección «Envía tu primer SMS» me ahorró una discusión larga con el equipo: ahora tenemos un criterio compartido.

Valentina Muñoz13 oct 2026

¿Hay alguna diferencia importante si lo implemento en un servicio con varias instancias detrás de un balanceador?

Equipo nvíameAutor13 oct 2026

Sí: todo estado que hoy vive en memoria (contadores, sesiones, claves vistas) debe moverse a un almacén compartido con TTL, como Redis. Si no, cada instancia ve solo una parte de la historia.

Los comentarios se guardan solo en este navegador.