Автоматизация загрузки банковских уведомлений и кодов подтверждения через входящие SMS позволяет оперативно связывать движения денежных средств с учетными документами в 1С. Традиционная схема с пересылкой SMS через мобильное приложение на почтовый ящик и последующим парсингом почты в 1С имеет существенные минусы: задержки доставки, зависимость от сторонних почтовых серверов и необходимость поддержания работоспособности смартфона. Разберем, как реализовать чтение SMS напрямую с модема или через сетевую инфраструктуру.
Большинство современных USB-модемов (свистков) функционируют не как классические последовательные устройства, а как компактные сетевые роутеры (режим RNDIS/HiLink). Устройство получает собственный IP-адрес в локальной сети (по умолчанию обычно 192.168.8.1) и предоставляет внутренний веб-интерфейс, а также HTTP REST API для управления.
Преимущества такого подхода:
HTTPСоединение и HTTPЗапрос.Рассмотрим по шагам механизм взаимодействия 1С с HiLink-модемом:
Посмотрим на пример реализации опроса модема через фоновое регламентное задание 1С:
// Создаем подключение к веб-интерфейсу модема
ЗащищенноеСоединение = Неопределено;
HTTPСоединение = Новый HTTPСоединение("192.168.8.1", 80, , , , 10, ЗащищенноеСоединение);
// Шаг 1. Запрашиваем токен безопасности
HTTPЗапросТокена = Новый HTTPЗапрос("/api/webserver/SesTokInfo");
HTTPОтветТокена = HTTPСоединение.Получить(HTTPЗапросТокена);
Если HTTPОтветТокена.КодСостояния = 200 Тогда
СтрокаОтвета = HTTPОтветТокена.ПолучитьТелоКакСтроку();
// Извлекаем токен из XML-ответа (тег TokInfo)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаОтвета);
Токен = "";
Сессия = "";
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.Имя = "TokInfo" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЧтениеXML.Прочитать();
Токен = ЧтениеXML.Значение;
ИначеЕсли ЧтениеXML.Имя = "SesInfo" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ЧтениеXML.Прочитать();
Сессия = ЧтениеXML.Значение;
КонецЕсли;
КонецЦикла;
// Шаг 2. Формируем запрос на чтение входящих сообщений
HTTPЗапросSMS = Новый HTTPЗапрос("/api/sms/sms-list");
HTTPЗапросSMS.Заголовки.Вставить("__RequestVerificationToken", Токен);
Если ЗначениеЗаполнено(Сессия) Тогда
HTTPЗапросSMS.Заголовки.Вставить("Cookie", Сессия);
КонецЕсли;
HTTPЗапросSMS.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
ТелоЗапросаXML =
"<request>" +
"<page>1</page>" +
"<maxcount>20</maxcount>" +
"<todo>1</todo>" +
"<unreadpreferred>0</unreadpreferred>" +
"</request>";
HTTPЗапросSMS.УстановитьТелоИзСтроки(ТелоЗапросаXML, КодировкаТекста.UTF8);
HTTPОтветSMS = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапросSMS);
Если HTTPОтветSMS.КодСостояния = 200 Тогда
XMLТекст = HTTPОтветSMS.ПолучитьТелоКакСтроку();
// Производим парсинг полученных сообщений и их запись в информационную базу
КонецЕсли;
КонецЕсли;
Классические модемы («не-Hilink» прошивки или промышленные GSM-терминалы) определяются в операционной системе как виртуальные COM-порты. В этом случае чтение сообщений выполняется посылкой стандартных AT-команд (AT+CMGL, AT+CMGR, AT+CMGD).
Проанализируем специфику и сложности данного подхода в среде 1С:
rphost. Кроме того, физический USB-модем должен быть подключен именно к тому рабочему серверу кластера, на котором исполняется фоновое задание.Для создания отказоустойчивой архитектуры целесообразно вынести опрос аппаратного модема во внешнюю службу или использовать специализированное оборудование.
Если в компании уже настроен смартфон на Android, отказ от почты можно выполнить без покупки модемов. Для этого в конфигурации 1С создается и публикуется объект HTTPСервис.
В мобильном приложении автоматизации (или специализированном SMS-клиенте на телефоне) настраивается триггер: при входящем сообщении от банка отправлять POST-запрос напрямую на опубликованный адрес базы 1С. Это гарантирует мгновенную передачу сообщения (в течение 1-2 секунд) без промежуточного почтового ящика.
Резюме: Если требуется прямое подключение USB-модема к сети предприятия, оптимальным выбором будет модем с веб-интерфейсом HiLink, опрашиваемый регламентным заданием 1С через HTTP-запросы. Для высоконагруженных и критически важных задач предпочтительнее использовать автономный GSM-шлюз или публикацию собственного HTTP-сервиса 1С для приема Webhooks.