Предыстория.
Понадобилось как-то сделать рассылку sms. И случилось так, что корпоративной связью оказался Мегафон. Что может быть проще, подумал я. Ведь в БСП есть модуль рассылки sms. Но не все оказалось так радостно. Так как в БСП не оказалось сервиса Мегафона. И конфигурацию изменять не разрешили, чтобы дописать его туда.
Поиск готового решения не принес результатов. Так как готовые решения были реализованы на внешний компонентах или на ActiveX. И вызывали сомнения в своей работоспособности.
Пообщавшись с техподдержкой, выяснил, что Мегафон предоставляет два варианта использования сервиса, через https и SMPP.
Выбор пал на http, так как рассылка предполагалась разовая, иногда персональная. SMPP подразумевает более оперативную рассылку с большим количеством сообщений. И к тому же это легко реализуется через HTTPСоединение.
После заключения доп. соглашения, Мегафон прислал данные для авторизации и инструкцию, описывающую API своего сервиса.
Описание подключения.
Сервис рассылки у Мегафона располагается на сервере https://a2p-api.megalabs.ru/ адрес ресурса /sms/v1/sms, запросы посылаются в нотации JSON, кодировка UTF-8.
В заголовке передаются авторизационные данные в формате login:pass закодированные Base64. Например, cG8nbX54dGAyqx==.
Обязательное требование - авторизация проходит только с заявленного IP.
Описание запросов.
Запрос отправляется методом POST.
{
"from": "Johnny_Viper",
"to": 79001234212,
"message": "Это тест",
"callback_url": "http://www.sombodyserver.ru/sms_callback"
}
Параметры:
from - имя отправителя. Тип строка. Обязательный параметр. Имя отправителя может содержать латинские буквы в разных регистрах, цифры, пробелы, а так же спецсимволы: '!"#$%()*+,-./:;<=>?@[\]^_`{|}~. Длина имени отправителя не должна превышать 11 символов, с учетом пробелов. Имя отправителя не может начинаться с одного или нескольких пробелов и/или заканчиваться одним или несколькими пробелами.
to - номер телефона. Тип число. Обязательный параметр. Из-за этого не получится отправить одно сообщение на несколько номеров. Т.е. один запрос - один номер.
message - собственно текст сообщения. Тип строка от 1 до 1000 символов.
callback_url - URL адрес вашей службы, для отправки уведомлений о статусе сообщения. Не обязательный параметр.
msg_id - УИД сообщения. Тип строка от 1 до 16 символов. Не обязательный параметр. По этому идентификатору можно получить состояние сообщения. Получил его абонент или нет. А так же сервис по этому номер понимает что сообщение с таким УИД уже отправлялось и не допускает дублей.
Реализация.
Для запроса нам понадобятся заголовки и тело запроса в нотации JSON.
Заголовки выглядят так:
Заголовоки = Новый Соответствие;
Заголовоки.Вставить("Authorization", "Basic " + ЛогинИПарольЗашифрованныйBase64);
Заголовоки.Вставить("Content-Type", "application/json; charset=utf-8");
Далее формируем запрос:
НТТРЗапрос = Новый HTTPЗапрос("/sms/v1/sms", Заголовоки);
НТТРЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Тело запроса формируем примерно так:
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON;
ИмяФайлаОтвета = ПутьКФайлуОтвета;
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("from");
ЗаписьJSON.ЗаписатьЗначение(Отправитель);
ЗаписьJSON.ЗаписатьИмяСвойства("to");
ЗаписьJSON.ЗаписатьЗначение(Номер);
ЗаписьJSON.ЗаписатьИмяСвойства("message");
ЗаписьJSON.ЗаписатьЗначение(Сообщение);
ЗаписьJSON.ЗаписатьИмяСвойства("callback_url");
ЗаписьJSON.ЗаписатьЗначение("http://www.sombodyserver.ru/sms_callback");
УИДСообщения = СтрЗаменить(Прав(Строка(Новый УникальныйИдентификатор), 17), "-", "");
ЗаписьJSON.ЗаписатьИмяСвойства("msg_id");
ЗаписьJSON.ЗаписатьЗначение(УИДСообщения);
ЗаписьJSON.ЗаписатьКонецОбъекта();
ТелоЗапроса = ЗаписьJSON.Закрыть();
Устанавливаем соединение и отправляем запрос.
Попытка
Соединение = Новый HTTPСоединение("a2p-api.megalabs.ru", , , , ПолучениеФайловИзИнтернетаКлиентСервер.ПолучитьПрокси("http"), 60, Новый ЗащищенноеСоединениеOpenSSL);
Соединение.ОтправитьДляОбработки(НТТРЗапрос, ИмяФайлаОтвета);
Исключение
//ОписаниеОшибки();
КонецПопытки;
Для отправки сообщений этого хватит.
В обработке-примере реализован механизм рассылки по сотрудникам организации. Обработка должна работать в конфигурациях ERP 2, ЗУП 3, КА 2.
Тестировалась на ЕРП - 2.2.4.67.
P.S.: Если статья окажется полезной, у меня не единичный случай применения данной рассылки. Я сделаю описание службы, которая принимает состояние сообщения. И описание встраивания данного функционала в БСП.
В обработке настройки включаются сочетанием клавиш Ctrl+Shift+P.