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

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

- Канонический URL: https://www.broadnet.me/ru/blog/send-sms-api-python-php-nodejs-java-csharp
- Язык: ru
- Последнее обновление: 2026-09-30
- Издатель: BroadNet (https://www.broadnet.me)

- Опубликовано: 2026-09-28
- Автор: BroadNet Editorial Team

Чтобы отправить 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](https://www.broadnet.me/developers/quickstart) описан пошаговый процесс.

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

Вот пример запроса с cURL. В каждом примере ниже отправляется одно и то же тело JSON.

```
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.

```
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 достаточно; установка дополнительных пакетов не требуется.

```
<?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 встроена:

```
// 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:

```
// 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:

```
// 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?

```
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 уже встроены.

```
// .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](https://www.broadnet.me/answers/what-is-dlr) и [отчеты о доставке SMS и коды ошибок](https://www.broadnet.me/blog/sms-delivery-receipts-dlr-error-codes). У API отсутствует заголовок идемпотентности, поэтому сохраняйте возвращенный ID сообщения и проверяйте его статус перед повторной отправкой, чтобы избежать дубликатов. Остальные коды перечислены на странице [кодов ошибок](https://www.broadnet.me/developers/error-codes).

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

- Храните токен на стороне сервера. Никогда не вызывайте API SMS из браузера или мобильного приложения, где токен может быть извлечен; вместо этого используйте собственный бэкенд.
- Учитывайте длину сообщений: GSM-7 вмещает 160 символов на SMS, Unicode (UCS-2) — 70 символов, а более длинные тексты разбиваются на платные сегменты. См. [лимит символов SMS](https://www.broadnet.me/answers/sms-character-limit-explained).
- Ставьте массовые рассылки в очередь и соблюдайте пропускную способность вашего аккаунта; ознакомьтесь с [ограничениями скорости](https://www.broadnet.me/developers/rate-limits).
- Получайте отчеты о доставке через [webhook](https://www.broadnet.me/developers/webhooks) и сохраняйте конечный статус.
- Сначала проверьте номера на соответствие международному формату; см. [валидация номера телефона E.164](https://www.broadnet.me/blog/e164-phone-number-validation-msisdn).

При очень больших объемах или наличии собственной телекоммуникационной инфраструктуры SMPP может подойти лучше, чем REST; см. [SMPP против REST](https://www.broadnet.me/compare/sms-api-vs-smpp). Платформа 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](https://www.broadnet.me/developers/api-reference) и в [спецификации OpenAPI](https://www.broadnet.me/developers/openapi).

Примеры кода — это те, что размещены на наших страницах для разработчиков и проверены на соответствие опубликованной спецификации OpenAPI. Проверено 28 сентября 2026 г. См. наши [редакционные стандарты](https://www.broadnet.me/about/editorial-standards).
