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-интеграции, чтобы определить, какой из вариантов лучше подойдет в каждом конкретном случае.
На этом у меня все. Если есть вопросы, оставляйте их в комментариях!