Вступление
В наше время общение с помощью SMS практически свелось на нет. Однако, SMS нашли свое применение в нише верификации телефонного номера. В отличие от других способов, получение кода по SMS не требует подключения по интернету, наличия какого-либо приложения или необходимости перейти по ссылке. Да и нет негативного эффекта от недоверия к звонкам с незнакомого номера телефона.
Зачем?
Еще 5-10 лет назад при оформлении карты лояльности компании использовали анкетирование. Улыбчивый продавец-консультант при оформлении карты лояльности предлагал вам оставить свои контактные данные, номер телефона и адрес электронной почты. Со временем этот метод ушел в прошлое. Бизнес стал замечать, что покупатели специально оставляли неправильные номера телефонов и почтовые адреса. Рассылки и акции стали менее эффективными. Тогда на помощь пришла SMS верификация и электронные карты лояльности, которые нельзя активировать, не подтвердив контактные данные.
Что есть в 1С ?
В БСП (Библиотеке стандартных подсистем) есть подсистема "Отправка СМС". Данная подсистема включена во многих типовых конфигурациях (например 1С:Розница).
В 1С:Розница 3 (в других конфигурациях не проверял) в при настройке РМК есть "галочка", которой включается верификация номера телефона клиента при создании карты лояльности. Существуют так же готовые Шаблоны SMS сообщений .
Звучит все это прекрасно... НО. Проблема заключается в том, в штатном функционале 1С ограниченный набор SMS провайдеров. А что делать, если они нам не подходят (допустим слишком дорогие) ?
Внешняя обработка
На просторах Инфостарта есть расширение, которое добавляет возможность отправки через сервис Bytehand. Честно скажу, не проверял, поэтому не могу дать отзыв по его работе.
В данной публикации мы рассматриваем внешнюю обработку, которая не привязана к конкретной конфигурации (и уж тем более не требует наличия подсистемы "Отправка СМС"). Обработка написана на управляемых формах, однако, код будет ниже, поэтому перенести к себе ее сможет каждый.
Обработка выполняет только отправку SMS сообщения. Дополнительные функции не реализованы, но по аналогии их доделать не трудно
Сервис Bytehand
На всякий случай оговорюсь, что это ни в коем случае не реклама, и данный сервис я даже не выбирал. Выбор был сделан заказчиком, а я лишь реализовывал функционал на том, что есть.
Для отправки сообщения вам нужно будет знать 2 вещи
1. Токен авторизации (вам его необходимо будет создать)
2. Подпись отправителя (в моем случае, если подписать сообщение иным образом оно создается, но не отправляется до получателя)
Для создания Токена переходим по ссылке "Заполнить информацию о себе", раздел "Безопасность", блок "Управление ключами доступа"
Подписи отправителя создаются из раздела "СМС" (меню слева), подпункт меню "Подписи отправителя"
Естественно у них есть описание API. В нашем случае мы используем только один метод sendSms
Код обработки
&НаКлиенте
Процедура ОтправитьСМС(Команда)
HTTPСоединение = Новый HTTPСоединение("api.bytehand.com", , , , , , Истина, Ложь);
АдресРесурса = "/v2/sms/messages";
ОбъектJSON = Новый Структура;
ОбъектJSON.Вставить("sender", Отправитель);
ОбъектJSON.Вставить("receiver", Телефон);
ОбъектJSON.Вставить("text", СМС);
СтрокаJSON = СтрокаJSON(ОбъектJSON);
HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.Заголовки.Вставить("POST "+АдресРесурса+" HTTP/1.1");
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("Cookie", "ENGID=1.1");
HTTPЗапрос.Заголовки.Вставить("X-Service-Key", Токен);
HTTPЗапрос.АдресРесурса = АдресРесурса;
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON);
HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Ответ = СтрокаJSON(ОбъектJSON(HTTPОтвет.ПолучитьТелоКакСтроку("UTF-8")));
КонецПроцедуры
Функция СтрокаJSON(ОбъектJSON) Экспорт
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(, Символы.Таб);
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(ПараметрыЗаписи);
ЗаписатьJSON(Запись, ОбъектJSON);
Возврат Запись.Закрыть();
КонецФункции
Функция ОбъектJSON(СтрокаJSON) Экспорт
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
ОбъектJSON = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Возврат ОбъектJSON;
КонецФункции
Проверено на следующих конфигурациях и релизах:
- Розница, редакция 3.0, релизы 3.0.9.123