BroadNet
La revistaIngeniería
Ingeniería

Cómo enviar SMS desde código: Python, PHP, Node.js, Java, Go y C# con una sola llamada REST

Enviar un SMS desde código consiste en un único POST autenticado HTTPS: un token Bearer, un cuerpo JSON con el ID de remitente, el número de destino, el mensaje y el tipo de mensaje, y un ID de mensaje de vuelta. Aquí tiene la misma solicitud en Python, PHP, Node.js, Java, Go y C#, además de la gestión de errores y consejos para producción.

9 min de lectura
Ingeniería · Número 28
9 min de lectura

ara enviar un SMS desde código, realice un POST HTTPS a https://api.broadnet.me/sms/sendSms con un encabezado Authorization: Bearer y un cuerpo JSON que contenga senderId, destinationNumber, el mensaje y messageType. Una llamada exitosa devuelve un HTTP 200 con el ID del mensaje como cuerpo de respuesta; el resultado de la entrega llegará más tarde como una confirmación de entrega (DLR) a su webhook. Cada lenguaje a continuación utiliza únicamente su biblioteca HTTP estándar; la única SDK oficial es para TypeScript y Node.js.

Puntos clave

  • Endpoint: POST https://api.broadnet.me/sms/sendSms, cuerpo JSON, token Bearer.
  • Campos obligatorios: senderId, destinationNumber (formato internacional sin el signo más), mensaje, messageType (TEXT).
  • Respuesta: 200 con el ID del mensaje; consérvelo para cotejar con las confirmaciones de entrega.
  • Errores: un token ausente o inválido recibe un 401 de la pasarela; los errores API devuelven status, error, message, errorCode y requestUri.
  • Una SDK oficial: @broadnet/cpaas-sdk para TypeScript/Node.js; genere clientes para otros lenguajes a partir de la especificación OpenAPI.

¿Qué necesita antes de realizar el envío?

  • Un token de acceso de su cuenta BroadNet, guardado en una variable de entorno (BROADNET_TOKEN más abajo), nunca en el código fuente o en una aplicación móvil.
  • Un ID de remitente permitido para el país de destino; algunos países requieren un registro previo.
  • Un número de destino en formato internacional, por ejemplo 447700900123 (un número ficticio del Reino Unido).

El acceso de prueba se gestiona a través de nuestros ingenieros: solicítelo y recibirá las credenciales de prueba en un plazo de un día hábil; normalmente, el primer mensaje de prueba se envía unos cinco minutos después. La guía de inicio rápido le explicará el proceso.

¿Cómo es la solicitud?

Aquí tiene la solicitud con cURL. Todos los ejemplos a continuación envían el mismo cuerpo JSON.

snippet
curl -X POST https://api.broadnet.me/sms/sendSms \
-H "Authorization: Bearer $BROADNET_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"senderId": "BroadNet",
"destinationNumber": "447700900123",
"message": "Your verification code is 482913",
"messageType": "TEXT"
}'
# 200 OK → response body is the message ID, e.g. 2603121407537573731

¿Cómo se envía un SMS con Python?

Con la librería requests, el argumento json= configura automáticamente el encabezado Content-Type.

snippet
import os, requests
r = requests.post(
"https://api.broadnet.me/sms/sendSms",
headers={"Authorization": f"Bearer {os.environ['BROADNET_TOKEN']}"},
json={
"senderId": "BroadNet",
"destinationNumber": "447700900123",
"message": "Your verification code is 482913",
"messageType": "TEXT",
},
)
print(r.status_code, r.text) # message ID

¿Cómo se envía un SMS con PHP?

La extensión curl de PHP es suficiente; no es necesario ningún paquete adicional.

snippet
<?php
$ch = curl_init("https://api.broadnet.me/sms/sendSms");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BROADNET_TOKEN"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"senderId" => "BroadNet",
"destinationNumber" => "447700900123",
"message" => "Your verification code is 482913",
"messageType" => "TEXT",
]),
]);
$messageId = curl_exec($ch);
echo $messageId;

¿Cómo se envía un SMS con Node.js?

Node.js 18 y versiones posteriores incluyen fetch integrado:

snippet
// Node.js 18+ (fetch)
const res = await fetch("https://api.broadnet.me/sms/sendSms", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BROADNET_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
senderId: "BroadNet",
destinationNumber: "447700900123",
message: "Your verification code is 482913",
messageType: "TEXT",
}),
});
console.log(await res.text()); // message ID

O utilice el SDK oficial de TypeScript/Node.js, @broadnet/cpaas-sdk:

snippet
// npm install @broadnet/cpaas-sdk axios
import { Configuration, SMSSMSApi } from "@broadnet/cpaas-sdk";
const sms = new SMSSMSApi(
new Configuration({
basePath: "https://api.broadnet.me",
accessToken: process.env.BROADNET_TOKEN!,
}),
);
const res = await sms.smsSendsmsPost({
sMSSmsRequest: {
senderId: "BroadNet",
destinationNumber: "447700900123",
message: "Your verification code is 482913",
messageType: "TEXT",
},
});
console.log(res.data); // message ID

¿Cómo se envía un SMS con Java?

Java 11 y versiones posteriores incluyen java.net.http.HttpClient:

snippet
// Java 11+ — java.net.http is built in, nothing to install
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SendSms {
public static void main(String[] args) throws Exception {
String json = "{"
+ "\"senderId\": \"BroadNet\", "
+ "\"destinationNumber\": \"447700900123\", "
+ "\"message\": \"Your verification code is 482913\", "
+ "\"messageType\": \"TEXT\""
+ "}";
HttpRequest req = HttpRequest.newBuilder(URI.create("https://api.broadnet.me/sms/sendSms"))
.header("Authorization", "Bearer " + System.getenv("BROADNET_TOKEN"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.statusCode() + " " + res.body()); // 200 + message ID
}
}

¿Cómo se envía un SMS con Go?

snippet
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
body := []byte(`{
"senderId": "BroadNet",
"destinationNumber": "447700900123",
"message": "Your verification code is 482913",
"messageType": "TEXT"
}`)
req, err := http.NewRequest(http.MethodPost, "https://api.broadnet.me/sms/sendSms", bytes.NewReader(body))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("BROADNET_TOKEN"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
id, _ := io.ReadAll(res.Body)
fmt.Println(res.StatusCode, string(id)) // 200 + message ID
}

¿Cómo se envía un SMS con C# y .NET?

.NET 6 y versiones posteriores no requieren paquete NuGet: HttpClient y System.Net.Http.Json están integrados.

snippet
// .NET 6+ console app (Program.cs) — HttpClient is built in, no NuGet package
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Bearer", Environment.GetEnvironmentVariable("BROADNET_TOKEN"));
// PostAsJsonAsync sends Content-Type: application/json
var res = await http.PostAsJsonAsync("https://api.broadnet.me/sms/sendSms", new
{
senderId = "BroadNet",
destinationNumber = "447700900123",
message = "Your verification code is 482913",
messageType = "TEXT",
});
var id = await res.Content.ReadAsStringAsync();
Console.WriteLine($"{(int)res.StatusCode} {id}"); // 200 + message ID

¿Qué se recibe y cómo se gestionan los errores?

RespuestaSignificadoQué hacer
200 + ID de mensajeAceptado para entregaGuarde el ID con su propio registro; espere al DLR
400Error de validación o campo faltanteCorrija la solicitud; no reintente sin cambios
401Token Bearer faltante o no válidoCompruebe el token y el encabezado Authorization
500Error inesperado del servidorReintente con backoff; compruebe el estado del mensaje antes de volver a enviarlo

Un 200 significa que la plataforma ha aceptado el mensaje, no que el terminal lo haya recibido. La entrega se informa mediante la confirmación de entrega; consulte qué es un DLR y confirmaciones de entrega y códigos de error de SMS. El API no tiene encabezado de idempotencia, por lo que debe conservar el ID del mensaje devuelto y comprobar su estado antes de volver a enviarlo para evitar duplicados. La página de códigos de error enumera el resto.

¿Cómo prepararlo para producción?

  • Mantenga el token en el lado del servidor. Nunca llame a la API de SMS desde un navegador o una aplicación móvil, donde el token podría extraerse; en su lugar, llame a su propio backend.
  • Envíe mensajes largos con conocimiento de causa: GSM-7 admite 160 caracteres por SMS, Unicode (UCS-2) 70, y los textos más largos se dividen en segmentos facturables. Consulte el límite de caracteres de SMS.
  • Encole los envíos masivos y respete el rendimiento de su cuenta; lea los límites de velocidad.
  • Reciba las confirmaciones de entrega mediante un webhook y almacene el estado final.
  • Valide primero los números en formato internacional; consulte la validación de números de teléfono E.164.

Para volúmenes muy altos o una infraestructura de telecomunicaciones existente, SMPP puede ser más adecuado que REST; consulte SMPP frente a REST. La plataforma de BroadNet gestiona 30,000 SMS por segundo por nodo.

Preguntas frecuentes

¿Cuál es la forma más sencilla de enviar un SMS desde código?

Un HTTPS POST a un SMS API con un token de acceso y un cuerpo JSON. Con BroadNet, se trata de un POST https://api.broadnet.me/sms/sendSms con senderId, destinationNumber, el mensaje y messageType.

¿Existe un BroadNet SDK para Python, PHP o Java?

No. Existe un único SDK @broadnet/cpaas-sdk oficial para TypeScript y Node.js. Otros lenguajes llaman al REST API directamente, como se muestra aquí, o generan un cliente a partir de la especificación OpenAPI.

¿En qué formato debe estar el número de teléfono?

Formato internacional con el código de país y sin signo más ni espacios, por ejemplo 447700900123.

¿Significa una respuesta 200 que el SMS ha sido entregado?

No. Significa que el mensaje fue aceptado. La confirmación de entrega (DLR) indica si este llegó al terminal.

¿Puedo enviar SMS directamente desde una aplicación de Android o iOS?

No de forma segura. Ejecute la llamada API en su servidor para que el token de acceso nunca se envíe dentro de la aplicación, y haga que la aplicación llame a su servidor.

¿Dónde encuentro la referencia completa de la API?

En la referencia de API y en la especificación de OpenAPI.

Los ejemplos de código son los que aparecen en nuestras páginas para desarrolladores, verificados según la especificación OpenAPI publicada. Revisado el 28 de septiembre de 2026. Consulte nuestros estándares editoriales.

¿Te ha resultado útil?

Cómo redactamos y revisamos el contenido

Escrito por

Equipo editorial de BroadNet

El equipo editorial publica el blog de BroadNet. Los artículos se escriben con los equipos de BroadNet de asuntos regulatorios, producto, ingeniería, investigación del sector y soluciones para operadores, y se revisan según nuestras normas editoriales.

La revista, por correo electrónico

Un ensayo al mes. Nada más.

Suscríbete y te enviaremos el próximo artículo —sobre ingeniería, normativa o industria— el mismo día de su publicación. Sin campañas de goteo, sin promociones de productos, sin compartir con terceros. Cancela tu suscripción con un solo clic.

Enviamos un correo al mes. Puede darse de baja cuando quiera. Consulte nuestra política de privacidad.

Lo que obtendrás
  • Texto extenso, no contenido para generar enlaces.
    De seis a once minutos de escritura concentrada en un solo tema.
  • Escrito por operadores
    Ingenieros, responsables de asuntos regulatorios y redacción de productos internos.
  • Consciente de la región
    Perspectiva sobre reguladores, operadores y combinación de canales desde la perspectiva de la región MENA.
  • Una vez al mes
    Sin campañas de goteo. Un ensayo cuando haya alguno para compartir.
Deja de leer. Empieza a enviar.

La mayor parte de lo que escribimos lo aprendimos durante la producción.

Si este artículo te ha hecho asentir con la cabeza, deberíamos hablar. Menciona el caso de uso, los volúmenes, los mercados; te ofreceremos opciones de enrutamiento, precios y un cliente de referencia con el que podrás contactar.

$ curl -X POST https://api.broadnet.me/sms/sendSms