BroadNet
ЖурналИнженерия
Инженерия

Как отправить SMS из кода: Python, PHP, Node.js, Java, Go и C# с помощью одного REST вызова

Отправка SMS из кода — это один аутентифицированный HTTPS POST-запрос: Bearer токен, JSON тело с именем отправителя, номером получателя, текстом сообщения и типом сообщения, а также ID сообщения в ответ. Ниже приведены примеры этого же запроса на Python, PHP, Node.js, Java, Go и C#, а также обработка ошибок и рекомендации для промышленной эксплуатации.

9 мин чтения
Инженерия · Выпуск 28
9 мин чтения

тобы отправить SMS из кода, выполните один HTTPS POST-запрос к https://api.broadnet.me/sms/sendSms с Authorization: Bearer заголовком и JSON телом, содержащим senderId, destinationNumber, текст сообщения и messageType. При успешном вызове возвращается HTTP 200 с ID сообщения в теле ответа; отчет о доставке (DLR) придет позже на ваш вебхук. В каждом языке ниже используется только стандартная библиотека HTTP; единственный официальный SDK предназначен для TypeScript и Node.js.

Основные тезисы

  • Эндпоинт: POST https://api.broadnet.me/sms/sendSms,, JSON тело, Bearer токен.
  • Обязательные поля: senderId, destinationNumber (в международном формате без знака плюс), сообщение, messageType (TEXT).
  • Ответ: 200 с ID сообщения; сохраните его для сопоставления с отчетами о доставке.
  • Ошибки: при отсутствии или недействительном токене шлюз возвращает 401; ошибки API возвращают status, error, message, errorCode и requestUri.
  • Один официальный SDK: @broadnet/cpaas-sdk для TypeScript/Node.js; генерируйте клиенты для других языков на основе спецификации OpenAPI.

Что необходимо подготовить перед отправкой?

  • Токен доступа от вашей учетной записи BroadNet, который следует хранить в переменной окружения (BROADNET_TOKEN ниже), но никогда — в исходном коде или мобильном приложении.
  • Имя отправителя, разрешенное для страны назначения; в некоторых странах требуется предварительная регистрация.
  • Номер получателя в международном формате, например 447700900123 (вымышленный номер Великобритании).

Тестовый доступ предоставляется нашими инженерами: запросите его, и вы получите тестовые учетные данные в течение одного рабочего дня, а первое тестовое сообщение обычно уходит примерно через пять минут после этого. В quickstart описан пошаговый процесс.

Как выглядит запрос?

Вот пример запроса с cURL. В каждом примере ниже отправляется одно и то же тело 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

Как отправить SMS с использованием Python?

При использовании библиотеки requests аргумент json= автоматически устанавливает заголовок 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

Как отправить SMS с использованием PHP?

Расширения curl для PHP достаточно; установка дополнительных пакетов не требуется.

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;

Как отправить SMS с помощью Node.js?

В Node.js 18 и более поздних версиях функция fetch встроена:

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

Или используйте официальный SDK 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

Как отправить SMS с помощью Java?

Java 11 и более поздние версии включают 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
}
}

Как отправить SMS с помощью 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
}

Как отправить SMS с помощью C# и .NET?

Для .NET 6 и более поздних версий не требуется пакет NuGet: HttpClient и System.Net.Http.Json уже встроены.

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

Что возвращается в ответе и как обрабатывать ошибки?

ОтветЗначениеЧто делать
200 + ID сообщенияПринято к доставкеСохраните ID вместе со своей записью; ожидайте DLR
400Ошибка валидации или пропущенное полеИсправьте запрос; не повторяйте попытку без изменений
401Отсутствует или недействителен токен BearerПроверьте токен и заголовок Authorization
500Непредвиденная ошибка сервераПовторите попытку с задержкой; проверьте статус сообщения перед повторной отправкой

Код 200 означает, что платформа приняла сообщение, а не то, что оно доставлено на устройство. Статус доставки подтверждается отчетом о доставке (delivery receipt); см. что такое DLR и отчеты о доставке SMS и коды ошибок. У API отсутствует заголовок идемпотентности, поэтому сохраняйте возвращенный ID сообщения и проверяйте его статус перед повторной отправкой, чтобы избежать дубликатов. Остальные коды перечислены на странице кодов ошибок.

Как подготовить решение к промышленной эксплуатации?

  • Храните токен на стороне сервера. Никогда не вызывайте API SMS из браузера или мобильного приложения, где токен может быть извлечен; вместо этого используйте собственный бэкенд.
  • Учитывайте длину сообщений: GSM-7 вмещает 160 символов на SMS, Unicode (UCS-2) — 70 символов, а более длинные тексты разбиваются на платные сегменты. См. лимит символов SMS.
  • Ставьте массовые рассылки в очередь и соблюдайте пропускную способность вашего аккаунта; ознакомьтесь с ограничениями скорости.
  • Получайте отчеты о доставке через webhook и сохраняйте конечный статус.
  • Сначала проверьте номера на соответствие международному формату; см. валидация номера телефона E.164.

При очень больших объемах или наличии собственной телекоммуникационной инфраструктуры SMPP может подойти лучше, чем REST; см. SMPP против REST. Платформа BroadNet обрабатывает 30 000 SMS в секунду на один узел.

Часто задаваемые вопросы

Какой самый простой способ отправить SMS из кода?

Один HTTPS POST-запрос к SMS API с токеном доступа и телом запроса JSON. В случае с BroadNet это POST https://api.broadnet.me/sms/sendSms с senderId, destinationNumber, сообщением и messageType.

Существует ли BroadNet SDK для Python, PHP или Java?

Нет. Существует один официальный SDK, @broadnet/cpaas-sdk для TypeScript и Node.js. Другие языки вызывают REST API напрямую, как показано здесь, или генерируют клиент на основе спецификации OpenAPI.

В каком формате должен быть номер телефона?

В международном формате с кодом страны, без знака плюс или пробелов, например 447700900123.

Означает ли ответ 200, что SMS был доставлен?

Нет. Это означает, что сообщение было принято. Отчет о доставке (DLR) показывает, было ли оно доставлено на устройство.

Могу ли я отправлять SMS напрямую из приложения на Android или iOS?

Небезопасно. Перенесите вызов API на свой сервер, чтобы токен доступа никогда не передавался внутри приложения, и настройте вызов вашего сервера из приложения.

Где найти полную документацию по API?

В справочнике API и в спецификации OpenAPI.

Примеры кода — это те, что размещены на наших страницах для разработчиков и проверены на соответствие опубликованной спецификации OpenAPI. Проверено 28 сентября 2026 г. См. наши редакционные стандарты.

Была ли эта информация полезна?

Как мы готовим и проверяем материалы

Автор:

Редакционная группа BroadNet

Редакционная группа публикует блог BroadNet. Статьи пишутся вместе с командами BroadNet по вопросам регулирования, продукту, инженерии, отраслевым исследованиям и решениям для операторов и проверяются по нашим редакционным стандартам.

Продолжайте читать

Ещё три статьи из журнала.

Посмотреть все эссе
A
Продукт

API для массовой рассылки SMS против платформы для массовой SMS (консоль): что вам действительно нужно?

Существует два способа массовой отправки SMS: API ваше приложение вызывает по событию, или консоль, из которой ваша команда запускает кампании. Выбор способа зависит от того, кто отвечает за отправку — и именно поэтому большинство команд используют оба варианта.

Редакционная группа BroadNet
5m
К
Инженерия

Кодирование и сегментация SMS-сообщений: GSM-7, Unicode (UCS-2) и многокомпонентные сообщения.

SMS-сообщение содержит 140 байт: 160 символов GSM-7 или всего 70 в Unicode (UCS-2). Кодировка, UDH и сегментация определяют ограничение количества символов в SMS-сообщении и его стоимость.

Редакционная группа BroadNet
10m
П
Инженерия

Проверка соответствия стандарту E.164 и номера телефона: форматирование, нормализация MSISDN и почему это важно для доставки.

E.164 — это формат, в котором должен храниться каждый телефонный номер. Как работает нормализация MSISDN, как проверять номера и почему неправильное форматирование приводит к сбою доставки.

Редакционная группа BroadNet
9m
Журнал, по электронной почте

Одно эссе в месяц. Больше ничего.

Подпишитесь, и мы вышлем вам следующий материал — по инженерии, регулированию или промышленности — в день его отправки. Никаких рассылок, никаких рекламных предложений, никакого обмена информацией с третьими лицами. Отписаться можно одним щелчком мыши.

Одно письмо в месяц. Отписаться можно в любой момент. См. нашу политику конфиденциальности.

Что вы получите
  • Подробный текст, а не призыв к действию.
    Шесть-одиннадцать минут сосредоточенного письма на одну тему.
  • Написано операторами
    В штате компании работают инженеры, специалисты по регулированию и разработчики продуктов.
  • Регионально-зависимый
    Взгляд со стороны региона MENA на регулирующие органы, операторов и структуру каналов сбыта.
  • Раз в месяц
    Никаких рассылок по частям. Одно эссе, когда есть чем поделиться.
Прекратите читать. Начинайте отправлять.

Большую часть того, что мы пишем, мы освоили в процессе производства.

Если эта статья вас заинтересовала, нам, вероятно, стоит поговорить. Расскажите о сценарии использования, объемах, рынках — мы предложим маршруты, цены и контактные данные клиента, которому вы сможете позвонить.

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