HTTP SMS API и SMPP API — популярные инструменты среди разработчиков, которым нужен качественный и высокопроизводительный SMS API. Их используют, чтобы встроить в свои приложения передачу текстовых сообщений. В статье Михаил Абрамов, технический писатель МТС Exolve, расскажет про оба варианта и сравнит их.

Что такое SMS API

SMS API — это программный интерфейс для интеграции функций обмена текстовыми сообщениями в приложения, сайты и другое ПО. Да-да, вот те самые SMS-ки, которые напоминают клиентам, что завтра приедет доставка, а 500 баллов сгорят через неделю. Подойдет, когда нужно:

  • автоматизировать отправку сообщений нескольким получателям одновременно

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

  • настроить и применять шаблоны для автоматических ответов

  • управлять способами аналитики и отчетности для лучшего понимания взаимодействия пользователей

  • получить многоязычную техническую поддержку глобальной аудитории

  • выбрать стратегии защиты данных, которые обеспечат безопасную связь между отправителем и получателем

Что такое HTTP API

Источник

Чтобы лучше понять механизм методов передачи данных, начнем с базовых понятий. Если вам знакомы термины API и HTTP API, вы можете сразу переходить к следующему разделу.

API (Application programming interface) — интерфейс для взаимодействия двух приложений друг с другом. Он определяет набор правил, стандартов и протоколов, которые описывают, как клиенты получат доступ к вашим ресурсам. Например, через различные протоколы и технологии, такие как HTTP, SMPP, или с использованием языков программирования, допустим, JavaScript. Каждый раз, когда вы используете приложение, отправляете SMS или проверяете погоду на смартфоне, работает API.

В интернете HTTP — один из основных и наиболее популярных протоколов. Поэтому распространен подход проектирования API поверх HTTP, где последний выполняет функцию связи между двумя системами. Это упрощает реализацию API: библиотеки для работы с HTTP доступны для всех популярных языков программирования. Для клиентской стороны можно быстро и с меньшими затратами разрабатывать ПО. Для серверной стороны — бюджетнее развивать API программы-серверы и использовать уже имеющуюся инфраструктуру. Например, балансировщики, HTTP-серверы, прокси-серверы, реверс-прокси-серверы.

Для отправки текстовых сообщений информация передается в виде запроса POST или GET к API провайдера, который предоставляет SMS-услуги.

HTTP изначально был разработан для передачи гипертекста, поэтому есть некоторые особенности, о которых должен помнить разработчик. Например, GET-запрос иногда закеширован промежуточным прокси-сервером, что можно легко упустить.

Инструменты HTTP открыты практически для всех языков программирования и просты в использовании. При желании можно обучиться работе с этим типом API — доступ к учебным ресурсам свободный. Функции HTTP API очень гибкие: легко добавлять новые, адаптируя опыт для своей целевой аудитории.

Что такое SMPP API

Источник

SMPP (Short Message Peer-to-Peer Protocol) — это одноранговый протокол коротких сообщений, который при совместной работе с API позволяет отправлять и получать SMS. Он дает возможность работать с большими объемами сообщений — это обеспечивает гибкость в управлении данными благодаря масштабируемости, поддержке разнообразных типов сообщений и возможности взаимодействия с разными системами. SMPP используют для отправки клиентам рекламных текстов или различных уведомлений (об оформлении товара, покупке или подтверждении бронирования по SMS). Работает с телефонными номерами и интернет-серверами.

Для настройки соединения SMPP API требуются знания о протоколе SMPP, его спецификации и об обработке ошибок в рамках этого протокола.

Коды ошибок протокола SМРР

Ошибки команды BIND

Код (HEX)

Значение

Описание

0x0

ESME ROK

Подключение установлено

0xD

ESME RBINDFAIL

Соединение не установлено, необходимо повторить попытку

0х5

ESME_RALYBND

Подключение уже установлено

0xF

ESME RINVSYSID

Неверный system_id

0xE

ESME RINVPASWD

Неверный password

Ошибки команды ЅUBMIT_ЅМ

Код (НЕХ)

Описание

Рекомендации

0x0

Сообщение принято

Не требуется

0х3

Передан неверный набор TLѴ-параметров

Устранить ошибки и повторить вызов

0хA

(Invalid Source Address)  неверное имя отправителя

Имя запрещено для отправки

Проверить имя на наличие недопустимых символов

Использовать другое имя отправителя

Уточнить у аккаунт-менеджера возможность разрешить данное имя отправителя

0xB

(Invalid Dest Addr) неверный номер абонента

Проверить валидность номера

0х55

Превышение длины сообщения:

- не более 1 000 символов суммарно;

- не более 11 частей на одно сообщение;

- не более 140 символов на одну часть сообщения

Устранить ошибки и повторить вызов

0x58

Превышение установленной для подключения скорости

Уточнить пропускную способность канала и продолжить рассылку на допустимой скорости

0x443

Ошибка в конфигурации сервиса

Обратиться в службу поддержки

0x444

0xAA

Внутренняя ошибка сервера

Обратиться в службу поддержки

0x445

Превышение максимально допустимого количества сообщений одному и тому же абоненту за период времени

Не отправлять сообщения абоненту в течение 1 часа, после чего повторить отправку

0xB

Запрещена отправка сообщений на данный номер. Как правило, означает запрет отправки сообщений на международное направление

Обратиться к аккаунт-менеджеру и уточнить возможность отправки сообщений по данному направлению

0xA

Запрещена отправка от данного имени отправителя

Использовать другое имя отправителя либо обратиться к аккаунт-менеджеру и уточнить возможность отправки сообщений с данного имени

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

SMPP работает на основе TCP/IP, который чаще используется при подключении к операторам мобильной связи и поставщикам услуг. Основные преимущества этого протокола, по сравнению с использованием GSM или 3G-сетей, — скорость и общая емкость. К тому же системы, использующие SMPP, часто предлагают возможность запланировать дату и время доставки сообщений, а значит обеспечивают дополнительную гибкость в управлении рассылками.

К аппаратному обеспечению требований нет — только к поставщику услуг, к которому необходимо подключиться. При передаче сообщений через SMPP они направляются напрямую к поставщику услуг беспроводной связи, а от него через защищенную частную сеть к пользователю.

Версии SMPP

Есть несколько распространенных версий SMPP, каждая из которых включает улучшения и расширения предыдущей. Рассмотрим несколько:

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

  • SMPP 3.4: более современная версия. С некоторыми улучшениями по сравнению с 3.3, в том числе поддержкой технологий, отличных от GSM, и трансивера — единого соединения отправки и получения сообщений. Подходит для большинства современных приложений SMS-рассылки, где нужны надежность и гибкость. Особенно хорошо подходит для сложных систем массовой рассылки и приложений, требующих двусторонней коммуникации.

  • SMPP 5.0: последняя официальная версия SMPP (2017 г.). Дает улучшенные возможности, в том числе поддержку более длинных сообщений, сотовое вещание, обработку MMS, интеллектуальное управление потоком и усиленную безопасность. Оптимальный выбор для передовых приложений SMS-маркетинга и сложных систем мобильных коммуникаций, где требуется максимальная функциональность и гибкость. Идеально подходит для интеграции с современным оборудованием и последними технологиями мобильной связи.

Каждая версия SMPP имеет свои особенности и предназначена для определенных типов приложений. Выбор зависит от требований конкретного проекта и оборудования, с которым она будет взаимодействовать.

Сравнение SMS API

Чтобы лучше понять, какой SMS API подойдет именно вам, сосредоточьтесь на потребностях бизнеса. Сравним оба варианта по нескольким важным критериям.

Количество сообщений

HTTP API. Интерфейс часто выбирают для отправки меньших объемов сообщений. Некоторые провайдеры устанавливают лимиты в рамках одной рассылки — например, 100 сообщений. Если разработчикам этого достаточно, они выбирают этот SMS API. Решение идеально подходит для индивидуального использования или для малых и средних предприятий (SMME).

SMPP API. Хотите делать рассылки на широкую аудиторию? Этот API-инструмент для организаций с требованиями к массовым SMS-рассылкам — например, более 5 000 сообщений в месяц. Логично, что такое решение идеально для крупных компаний, ну или очень общительных.

Уровень навыков разработчика

HTTP API. Поддерживает большинство языков программирования, что делает его неплохим выбором для интеграции с почти любым ПО и приложениями. И неважно, написано оно на Go, JavaScript или Python.

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

Функциональность

HTTP API. Поддерживает эскалацию шлюза, пакетную отправку, двусторонний обмен сообщениями, идентификатор отправителя, подтверждение доставки, сообщения увеличенной длины, текст, Unicode, флеш-память и двоичные SMS. Преобразует рингтоны и логотипы в корректный формат. Конвертирует VCal и VCard.

SMPP API. Независим от языковой платформы. Есть функции двустороннего обмена сообщениями, подтверждения доставки, идентификатора отправителя, преобразования VCard и VCal, эскалации шлюза. Еще есть поддержка Flash, двоичного кода, Unicode, текста и сообщений увеличенной длины.

Функциональность

HTTP API

SMPP API

Маршрутизация через разные SMS-шлюзы

Да

Нет

Пакетная отправка

Да

Нет

Двусторонний обмен сообщениями

Да

Да

Идентификатор отправителя

Да

Да

Подтверждение доставки

Да

Да

Сообщения увеличенной длины

Да

Да

Поддержка текста и Unicode

Да

Да

Флеш-память и двоичные SMS

Да

Да

Преобразование рингтонов и логотипов

Да

Нет

Конвертация VCal и VCard

Да

Да

Независимость от языковой платформы

Нет

Да

Эскалация шлюза

Нет

Да

ПО SMPP SMS

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

SMPP SMS можно применять для различных целей, оно быстрое и удобное. На сегодняшний день платформа МТС Exolve предоставляет услуги SMPP SMS и обеспечивает клиентов инструментами для создания индивидуальных приложений с интерактивными функциями.

Теперь сравним на практике код для отправки SMS через HTTP API и SMPP API.

SMS HTTP API

Пример кода, как реализовать отправку SMS через Exolve:

const url = 'https://api.exolve.ru/messaging/v1/SendSMS'; // точка подключения для отправки SMS через Exolve HTTP API
const apiKey =
  '{app_api_key}'; // API-ключ из приложения Exolve

// Функция отправки SMS через SMS HTTP Exolve
async function sendSMS(exolveNumber, recieverNumber, text) {
  // передаем в функцию номер Exolve, номер получателя и текст SMS
  let response = await fetch(url, {
    method: 'POST',
    headers: { Authorization: 'Bearer ' + apiKey },
    body: JSON.stringify({
      number: exolveNumber,
      destination: receiverNumber,
      text: text,
    }),
  });

  let result = await response.json();
  console.log(result);
}

sendSMS('79991112233', '79994445566', 'Hello Exolve!'); // передаем в функцию номер Exolve, номер получателя и текст SMS

После успешной отправки сообщения вы получите message_id в консоли:

{ message_id: '495708870547629029' }

Если SMS не было отправлено, вы увидите ошибку в консоли.

SMPP API

Сейчас разберемся, как отправлять и принимать SMS через SMPP с помощью node.js и библиотеки smpp.

Данные для отправки SMS (от кого, кому и сам текст) запрашиваются в консоли после запуска приложения:

Successfully bound
Введите номер отправителя {exolve_number};
Введите номер получателя {receiver number};
Введите текст сообщения ‘Hello from Exolve!’.

var smpp = require('smpp');
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

function sendSMS(from, to, text) {
  session.submit_sm(
    {
      source_addr: from,
      destination_addr: to,
      short_message: text,
      dest_addr_ton: 1,
      dest_addr_npi: 1,
    },
    function (pdu) {
      if (pdu.command_status == 0) {
        // Сообщение отправлено
        console.log(pdu.message_id);
      }
    }
  );
}

const session = new smpp.Session({
  host: 'smpp.exolve.ru',
  port: 2775,
  auto_enquire_link_period: 600000,
  debug: true,
});

let isConnected = false;
session.on('connect', () => {
  isConnected = true;

  session.bind_transceiver(
    {
      system_id: '{login'}, // SMPP-логин из личного кабинета
      password: '{passoword}', // SMPP-пароль из личного кабинета
      interface_version: 1,
      addr_ton: 1,
      addr_npi: 1,
    },
    (pdu) => {
      if (pdu.command_status == 0) {
        console.log('Подключение к SMPP-серверу успешно');
        rl.question('Введите номер отправителя', function (exolveNumber) {
          rl.question('Введите номер получателя ', function (number) {
            rl.question('Введите текст сообщения ', function (text) {
              sendSMS(exolveNumber, number, text);
            });
          });
        });
      }
    }
  );
});

session.on('pdu', function (pdu) {
  // Входящее сообщение
  if (pdu.command == 'deliver_sm') {
    var fromNumber = pdu.source_addr.toString();
    var toNumber = pdu.destination_addr.toString();

    var text = '';
    if (pdu.short_message && pdu.short_message.message) {
      text = pdu.short_message.message;
    }

    console.log('SMS ' + fromNumber + ' -> ' + toNumber + ': ' + text);
    session.deliver_sm_resp({ sequence_number: pdu.sequence_number });
  }
});

session.on('close', () => {
  console.log('smpp is now disconnected');

  if (isConnected) {
    session.connect();
  }
});
session.on('error', (error) => {
  console.log('smpp error', error);
  isConnected = false;
});

После успешной отправки SMS вы получите подобный лог

2024-01-11T18:48:25.834Z - cli - 573582 - pdu.command.out - submit_sm - 
{
	"command":"submit_sm",
	"command_length":0,
	"command_id":4,
	"command_status":0,
	"sequence_number":2,
	"service_type":"",
	"source_addr_ton":0,
	"source_addr_npi":0,
	"source_addr":"{exolve_number",
	"dest_addr_ton":1,
	"dest_addr_npi":1,
	"destination_addr":"destination_number",
	"esm_class":0,
	"protocol_id":0,
	"priority_flag":0,
	"schedule_delivery_time":"",
	"validity_period":"",
	"registered_delivery":0,
	"replace_if_present_flag":0,
	"data_coding":null,
	"sm_default_msg_id":0,
	"short_message":"Hello from Exolve!"

Входящие сообщения отображаются подобным логом в консоли:

2024-01-11T18:56:15.741Z - cli - 573582 - pdu.command.in - deliver_sm - 
{
	"command_length":89,
	"command_id":5,
	"command_status":0,
	"sequence_number":2,
	"command":"deliver_sm",
	"service_type":"",
	"source_addr_ton":1,
	"source_addr_npi":1,
	"source_addr":"sender_number",
	"dest_addr_ton":1,
	"dest_addr_npi":1,
	"destination_addr":"exolve_number",
	"esm_class":0,
	"protocol_id":0,
	"priority_flag":0,
	"schedule_delivery_time":"",
	"validity_period":"2024-01-12T18:56:15.700Z",
	"registered_delivery":1,
	"replace_if_present_flag":0,
	"data_coding":0,
	"sm_default_msg_id":0,
	"short_message":{
	"message":"Hi, Exolve! "
	},
	"user_message_reference":0
} - [89.22.164.220]
SMS sender_number-> exolve_number: Hi, Exolve!

Готово!

Заключение

SMS-рассылка безусловно важна для бизнеса. Пока что оценки рынка в РФ нет, но отечественный маркетинг во многом использует западные решения. Тем временем, согласно отчету, объем рынка SMS-маркетинга в США к 2025 году будет оцениваться в 12,6 млрд долларов, с ожидаемым совокупным годовым темпом роста (CAGR) в 20,3% в течение прогнозируемого периода. А это почти в два раза больше, чем год назад. Надо ли говорить, что использование современных сервисов на базе SMS API крайне полезно для автоматизации и роста производительности любого бизнес-приложения?

Выбор между SMPP SMS API и HTTP SMS API зависит от потребностей и контекста использования. SMPP обычно предпочтителен для масштабируемых и высоконагруженных SMS-приложений, где важна надежность и скорость доставки. HTTP API удобен для менее сложных приложений. Важно анализировать задачи проекта, бюджет и уровень экспертизы в области SMS-интеграции, чтобы определить, какой из вариантов лучше подойдет в каждом конкретном случае.

На этом у меня все. Если есть вопросы, оставляйте их в комментариях!

Комментарии (0)