BroadNet
Руководство по миграции, не зависящее от поставщика услуг·/developers/migrate

Переведите свой SMS-трафик с любого провайдера на BroadNet.

В этом руководстве рассматриваются концепции, используемые вашим текущим провайдером (отправка сообщения, отправитель, подтверждения доставки и webhooks статуса), и показана соответствующая часть API BroadNet. Затем рассматривается операционная сторона: регистрация идентификатора отправителя, параллельная работа обоих провайдеров, поэтапное увеличение трафика, откат и распределение ответственности за каждый шаг. В руководстве не указан конкретный провайдер, поскольку концепции одинаковы везде.

Отправьте одно SMS
POST /sms/sendSms
Аутентификация
Authorization: Bearer <token>
Устаревший HTTP API
/websmpp/websms
SMPP
Версия 3.4, с отчётами о доставке

Подключите ваш текущий API к BroadNet

Большинство SMS API используют одни и те же несколько концепций под разными названиями. Найдите концепцию в первом столбце, независимо от того, как её называет ваш провайдер, и используйте эквивалент BroadNet. Названия полей точно такие же, как в спецификации OpenAPI.

КонцепцияТипичная форма у других поставщиков услугBroadNet
Хост APIРегиональный API хост для вашей учетной записиhttps://api.broadnet.me

Тестовые учётные данные и адрес для отправки тестового трафика вы получите вместе с тестовым доступом: запросите его на /signup, мы ответим в течение одного рабочего дня.

АутентификацияИдентификатор учетной записи и секретный ключ в рамках базовой аутентификации или заголовок ключа API.Authorization: Bearer <token>

Один токен доступа на один аккаунт.

Отправьте одно сообщениеHTTP POST-запрос к конечной точке сообщенийPOST /sms/sendSms

Тело запроса имеет JSON.

Отправительfrom, sender, originatorsenderId

Буквенно-цифровой идентификатор отправителя или номер, зарегистрированный в каждой стране.

Получательto, destination, msisdndestinationNumber

Международный формат, как в примере спецификации 447700900101.

Текст сообщенияbody, text, contentmessage

Текст сообщения в том виде, в котором его увидит получатель.

Кодировка символов и части сообщенияРассчитывается поставщиком услуг или возвращается отдельным вызовом APImessageType

TEXT (GSM-7) или UNICODE. POST /sms/identify возвращает messageType, charCount, smsParts и charLimit перед отправкой.

Запланированная отправкаПоле send_at или поле расписания времениisSchedule · gmt · time

Чтобы отправить сообщение немедленно, эти поля можно не заполнять.

Идентификатор сообщенияПоле ID в JSON ответе200 OK → 2603121407537573731

В теле ответа /sms/sendSms содержится идентификатор сообщения.

Несколько получателейКонечная точка пакетной обработки или циклPOST /sms/sendSmsGroupData

В теле запроса используется массив contacts. POST /sms/sendbulk принимает вместо этого загрузку файла.

Webhook статуса доставкиURL-адрес обратного вызова для каждого запроса или для каждой учетной записи.Webhook URL on your account

Статус доставки передается на URL-адрес webhook, настроенный в вашей учетной записи. POST /sms/resendDlr повторно отправляет отчёты о доставке, если они не были доставлены.

Запрос статуса доставкиGET-запрос для получения сообщения по его идентификатору.GET /websmpp/websmsstatus

Устаревший HTTP API. Передайте идентификатор сообщения как respid, а для JSON как format=json. Значения: DELIVRD, UNDELIV, EXPIRED, REJECTD.

Экспорт отчета о доставкеЭкспорт в CSV-файл в консоли/websmpp/api/dlrreport

Устаревший HTTP API. Отчет о доставке в формате XLSX за определенный период времени.

Ответы об ошибкахСтатус HTTP плюс код ошибки поставщика.400 · 401 · 500

400: ошибка проверки или отсутствует поле. 401: недействительный или отсутствующий токен Bearer. 500: непредвиденная ошибка сервера.

SMPPСессии SMPP (привязываются) к SMSC провайдера.bind · submit_sm · deliver_sm

Сессии SMPP v3.4 используются в качестве передатчика, приемника или трансивера. Подтверждения доставки приходят в формате deliver_sm. В вашей учетной записи содержатся учетные данные для входа SMPP.

Отправка с использованием HTTP GET URLURL-адрес для GET-запроса с учетными данными в параметрах.GET /websmpp/websms

Устаревший HTTP API. user, pass (или accesskey), sid, mno, type, text. Сохранено для существующих интеграций; для новых следует использовать /sms.

SDKБиблиотека для каждого языка@broadnet/cpaas-sdk

Один официальный SDK для TypeScript и Node.js. Для других языков сгенерируйте клиент на основе спецификации OpenAPI.

Вот пример отправки в виде одного запроса. Замените поля отправителя, получателя и текста вашего провайдера на senderId, destinationNumber и message :

POST /sms/sendSms
curl -X POST https://api.broadnet.me/sms/sendSms \
  -H "Authorization: Bearer $BROADNET_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "senderId": "ACME",
    "destinationNumber": "447700900101",
    "message": "Your code is 8123",
    "messageType": "TEXT"
  }'

# 200 OK — the response body is the message ID, e.g. 2603121407537573731

Чтобы проверить статус сообщения, запросите его состояние, используя идентификатор сообщения, возвращенный запросом на отправку:

Проверка статуса доставки
# Status lookup on the legacy HTTP API (/websmpp), by message ID
curl "https://api.broadnet.me/websmpp/websmsstatus?respid=2603121407537573731&format=json" \
  -H "Authorization: Bearer $BROADNET_TOKEN"

# "status": "DELIVRD"   (or UNDELIV, EXPIRED, REJECTD)

Переместите свои идентификаторы отправителя

Буквенно-цифровые идентификаторы отправителя и короткие коды, как правило, переносимы и регулируются правилами регистрации каждого оператора и регулирующего органа. Регистрация относится к маршруту, по которому проходит ваш трафик, поэтому планируйте ее до того, как любое сообщение в рабочую сеть будет отправлено в BroadNet.

  1. 1

    Перечислите все идентификаторы отправителей, страны, в которые они отправляют сообщения, и тип передаваемого трафика: OTP, транзакционный или маркетинговый.

  2. 2

    Проверьте правила каждой страны. В ОАЭ идентификаторы отправителей регистрируются в соответствии с правилами TDRA через оператора, один идентификатор на юридическое лицо на один случай использования. В Саудовской Аравии для этого требуется одобрение CST и оператора, а иностранные отправители привязываются через местного агрегатора, имеющего лицензию CST.

  3. 3

    Ваш инженер по миграции отправляет заявки на регистрацию маршрутов BroadNet, а группа контроля соответствия BroadNet отслеживает каждую из них до момента утверждения.

  4. 4

    Начинайте параллельную отправку в стране только после того, как идентификатор отправителя будет одобрен там для маршрутов BroadNet. До тех пор продолжайте отправлять сообщения через своего текущего провайдера.

Правила для каждого рынка указаны на страницах с нормативными актами. Правила использования SMS в разных странах

Запустите оба провайдера параллельно

Оставьте текущего провайдера активным и добавьте BroadNet в качестве второго маршрута за коммутатором в вашем собственном коде. Сначала отправьте трафик на свои проверенные номера, затем небольшую часть реального трафика и сравните оба маршрута по одним и тем же адресам.

Сравнение по странам и операторам:

  • Сочетание статусов доставки: доставлено, недоставлено, истек срок действия и отклонено.
  • Время от отправки сообщения до получения подтверждения о его доставке.
  • Отправитель отображается на экране телефона.
  • Количество сегментов для того же текста, начиная с POST /sms/identify.

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

route.ts
// Send a share of recipients through BroadNet; the rest stay on your
// current provider. BROADNET_SHARE is a percentage (0-100) you control.
const BROADNET_SHARE = Number(process.env.BROADNET_SHARE ?? "0");

// Same recipient -> same bucket, so OTP retries stay on one provider.
function bucket(to: string): number {
  let h = 0;
  for (const c of to) h = (h * 31 + c.charCodeAt(0)) >>> 0;
  return h % 100;
}

export async function sendSms(to: string, text: string, senderId: string) {
  if (bucket(to) < BROADNET_SHARE) return sendViaBroadNet(to, text, senderId);
  return sendViaCurrentProvider(to, text, senderId); // your existing code
}

async function sendViaBroadNet(to: string, text: string, senderId: string) {
  const res = await fetch("https://api.broadnet.me/sms/sendSms", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.BROADNET_TOKEN}`,
      "Content-Type": "application/json",
    },
    // Use UNICODE for non-GSM text; POST /sms/identify tells you which.
    body: JSON.stringify({ senderId, destinationNumber: to, message: text, messageType: "TEXT" }),
  });
  if (!res.ok) throw new Error(`BroadNet send failed: ${res.status}`);
  return { provider: "broadnet", messageId: await res.text() };
}

Постепенное увеличение трафика

Перемещайте производственные объемы в BroadNet поэтапно, выбирая одну страну или один сценарий использования за раз. Оставайтесь на каждом этапе, пока подтверждения доставки не совпадут с отправленными данными, затем переходите к следующему.

  1. Тестирование

    Только ваши собственные подтвержденные номера. Подтвердите идентификатор отправителя, текст сообщения и отчёты о доставке.

  2. 5%

    Небольшая доля реального трафика. Трафик OTP в одну страну обеспечивает быструю и понятную доставку.

  3. 25%

    Достаточный объем данных для сравнения тарифов на доставку и сроков получения с вашим текущим поставщиком.

  4. 100%

    Весь трафик для данной страны или сценария использования. Ваш текущий провайдер остается активным до тех пор, пока подтверждения доставки не совпадут с отправленными вами данными.

Сколько времени это займет

Увеличение трафика занимает столько времени, сколько вы выберете. Процесс внедрения проходит по одному пути: мы отвечаем на запрос о тестовом доступе в течение одного рабочего дня, техническая интеграция занимает 2–5 рабочих дней, а проверка маршрута с подтверждением идентификатора отправителя — 3–10 рабочих дней. На большинстве рынков от этапа обнаружения до запуска проходит 5–15 рабочих дней; на рынках, где регулирующие органы дольше утверждают идентификаторы отправителей, этот процесс занимает больше времени. Ознакомьтесь с этапами адаптации.

Возврат к текущему провайдеру без перебоев в работе

Для отката используйте тот же переключатель в обратном порядке: уменьшите процент трафика, отправляемого через BroadNet, до последнего успешно выполненного шага или до нуля. Ваша текущая интеграция и регистрация идентификаторов отправителей остаются активными все время, поэтому достаточно уменьшить процент. Ничего не нужно перестраивать.

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

Кто за что несёт ответственность

Миграция затрагивает ваш код, регистрацию отправителей и реальный трафик. Вот как распределяется работа.

ЗадачаВаша командаBroadNet
Сопоставление полей и изменения кодаВнесите изменения в код и получите контроль над коммутатором маршрутизации.Ваш инженер по миграции сопоставляет ваши текущие данные, идентификаторы отправителей и отчёты о доставке с API BroadNet.
Реквизиты для входаХраните токен доступа в безопасном месте и не допускайте его попадания в систему контроля версий.Выдает токен доступа и, для SMPP, учетные данные для входа.
Регистрация идентификатора отправителяПредоставьте компании документы, запрашиваемые каждым регулирующим органом.Подает заявки на регистрацию своих маршрутов и отслеживает каждую из них до момента утверждения.
Проверка маршрутаПодтвердите результаты теста, используя свои собственные телефонные номера.Перед запуском серийного производства проводится тестирование доставки на каждом рынке.
Увеличение трафика и откатОпределите каждый шаг, что запускает откат и кто принимает это решение.В процессе параллельного выполнения и переключения можно связаться с назначенным инженером по миграции.
Доставка после принятия сообщения сетью BroadNetОтслеживайте отчёты о доставке в своих собственных системах.Перенаправляет каждое сообщение со своей платформы оператору и сообщает о получении.
Инциденты в рабочей средеСообщите о них по адресу developers@broadnet.me.Круглосуточная техническая поддержка для производственных учетных записей, с ответом на инциденты P1 в течение 15 минут.
Вывод старого маршрута из эксплуатацииЗакройте счет у предыдущего провайдера.Подтверждает, что идентификаторы отправителя, пропускная способность и отчёты о доставке урегулированы, прежде чем вы закроете аккаунт.

Соответствующая документация

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

Нужно ли мне переписывать интеграцию для перехода на BroadNet ?

Обычно нет. Вы меняете хост, заголовок аутентификации и несколько имен полей: поле отправителя становится senderId, поле получателя — destinationNumber, а текстовое поле — message. Интеграция SMPP перенаправляет существующее соединение на BroadNet с новыми учетными данными.

Могу ли я сохранить свои идентификаторы отправителя?

В целом, да, при условии соблюдения правил регистрации каждого оператора и регулирующего органа. Регистрация осуществляется на маршрутах BroadNet до начала работы сети: в ОАЭ — в соответствии с правилами TDRA, а в Саудовской Аравии — с одобрения CST и оператора.

Сколько времени занимает миграция?

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

Что произойдет, если количество доставок снизится, а трафик увеличится?

Снизьте процент трафика, отправляемого через BroadNet, до уровня последнего успешного шага или до нуля. Ваш текущий провайдер по-прежнему работает, поэтому трафик продолжает поступать. Затем перед повторной попыткой проверьте отчёты о доставке для затронутой страны вместе с вашим инженером по миграции.

Взимается ли плата за поддержку при миграции?

Нет. Поддержка миграции и окно параллельного выполнения включены в ваш аккаунт. Вы платите только за отправленные сообщения.

Запросить тестовый доступ · ответим в течение одного рабочего дня

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