Как настроить получение данных из облачной АТС в 1С:Управление торговлей 10.3?

Программист 1С v8.3 (Обычные формы) Управленческий учет Торговля и дистрибуция
← На главную

Интеграция 1С с облачными АТС (такими как Mango Office, Zadarma, UIS или Телфин) — это классическая задача для современной автоматизации торговли. Основная сложность в случае с 1С:Управление торговлей 10.3 заключается в том, что конфигурация построена на обычных формах, в то время как облачные сервисы ориентированы на работу через Webhooks и REST API. Рассмотрим подробнее, как реализовать стабильный прием данных, несмотря на почтенный возраст конфигурации.

Разберем архитектуру решения

Когда в облачную АТС поступает входящий звонок, она должна «уведомить» об этом вашу базу 1С. Для этого АТС отправляет HTTP-запрос (обычно POST или GET) с данными в формате JSON или CSV на определенный адрес. Проанализируем, что нам понадобится для реализации этой схемы:

  1. Веб-сервер: Нам необходимо опубликовать базу 1С на веб-сервере (обычно используется Apache или IIS), чтобы база стала доступна извне для запросов АТС.
  2. HTTP-сервис в 1С: Это точка входа в базу. Несмотря на то, что УТ 10.3 использует обычные формы, сама платформа 1С (если она версии 8.3.5 и выше) отлично поддерживает создание HTTP-сервисов.
  3. Механизм обработки: Код, который прочитает JSON, найдет контрагента по номеру телефона и запишет информацию о звонке в базу.
  4. Интерфейсное решение: Так как HTTP-сервис выполняется в фоновом сеансе на сервере, он не может напрямую «открыть окно» у пользователя. Нам потребуется вспомогательный механизм для оповещения менеджера.

Шаг 1: Настройка и публикация на Apache

Для начала нам необходимо развернуть веб-сервер. Проанализируем важный технический нюанс: разрядность Apache должна строго совпадать с разрядностью установленного модуля расширения веб-сервера 1С. Если вы используете 64-битную платформу 1С, Apache также должен быть 64-битным.

После установки Apache выполним публикацию базы через конфигуратор: Администрирование -> Публикация на веб-сервере. На вкладке «HTTP-сервисы» необходимо отметить созданный нами сервис (о нем ниже). В результате будет создан файл default.vrd, в котором прописываются параметры доступа.

Шаг 2: Создание HTTP-сервиса в конфигураторе

Перейдем в дерево метаданных и создадим новый объект HTTP-сервис. Выясним причину, по которой стоит выбрать именно HTTP-сервис, а не Web-сервис (SOAP): облачные АТС в 99% случаев используют простую REST-архитектуру, передавая данные в JSON. HTTP-сервисы 1С идеально подходят для таких задач.

Создадим шаблон URL (например, /callback/*) и метод POST. Пример серверного кода для приема данных:


Функция ПринятьУведомлениеОЗвонке(Запрос)
    
    // Получаем тело запроса в виде строки
    ТелоЗапроса = Запрос.ПолучитьТелоКакСтроку();
    
    // Проанализируем полученные данные (JSON)
    ДанныеЗвонка = РаспаковатьJSON(ТелоЗапроса);
    
    // Записываем данные в промежуточный регистр сведений
    НоваяЗапись = РегистрыСведений.ВходящиеЗвонкиАТС.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.НомерТелефона = ДанныеЗвонка.phone;
    НоваяЗапись.ИдентификаторЗвонка = ДанныеЗвонка.call_id;
    НоваяЗапись.Ответственный = НайтиОтветственногоПоТелефону(ДанныеЗвонка.ext_number);
    НоваяЗапись.Записать();
    
    // Возвращаем АТС ответ 200 OK
    Ответ = Новый HTTPСервисОтвет(200);
    Возврат Ответ;
    
КонецФункции

Шаг 3: Обработка JSON в зависимости от версии платформы

Посмотрим на ситуацию с парсингом данных. Если ваша платформа 1С версии 8.3.6 или выше, используйте встроенные средства:


Функция РаспаковатьJSON(СтрокаJSON)
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    Результат = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    Возврат Результат;
КонецФункции

Если же вы вынуждены работать на более старой платформе, где ЧтениеJSON отсутствует, можно воспользоваться MSScriptControl.ScriptControl для разбора строки через JScript, что гораздо надежнее посимвольного перебора.

Шаг 4: Решение проблемы «всплывающих окон» в УТ 10.3

Выясним, как вывести карточку звонка менеджеру. Поскольку HTTP-сервис работает в «тихом» режиме на сервере, он не имеет доступа к интерфейсу пользователя. Рассмотрим решение через обработчик ожидания:

  1. Создадим в конфигурации Регистр сведений (например, ВходящиеЗвонки), куда HTTP-сервис будет записывать информацию о каждом событии звонка.
  2. В глобальном модуле или в главной форме интерфейса (например, в обработке «Панель функций») подключим обработчик ожидания, который будет срабатывать раз в 2–3 секунды.

Пример кода в модуле приложения для обычных форм:


Процедура ПриНачалеРаботыСистемы()
    // Подключаем опрос регистра каждые 2 секунды
    ПодключитьОбработчикОжидания("ПроверитьВходящиеЗвонки", 2);
КонецПроцедуры

Процедура ПроверитьВходящиеЗвонки() Экспорт
    // Ищем в регистре записи, предназначенные текущему пользователю
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 * ИЗ РегистрСведений.ВходящиеЗвонки 
                   ГДЕ Ответственный = &ТекущийПользователь И Обработан = ЛОЖЬ";
    Запрос.УстановитьПараметр("ТекущийПользователь", глЗначениеПеременной("глТекущийПользователь"));
    
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        // Открываем форму звонка
        ОткрытьФорму("Обработка.КарточкаЗвонка.Форма", Новый Структура("Номер", Выборка.НомерТелефона));
        
        // Помечаем запись как обработанную
        Менеджер = РегистрыСведений.ВходящиеЗвонки.СоздатьМенеджерЗаписи();
        ЗаполнитьЗначенияСвойств(Менеджер, Выборка);
        Менеджер.Обработан = Истина;
        Менеджер.Записать();
    КонецЕсли;
КонецПроцедуры

Шаг 5: Безопасность и ошибка 401

Проанализируем ситуацию с авторизацией, упомянутую на форуме. При обращении АТС к вашему веб-сервису, система может вернуть ошибку 401 Unauthorized. Чтобы этого избежать, необходимо:

Важный момент: использование протокола HTTPS крайне рекомендуется. Данные о номерах телефонов клиентов являются персональными данными, и их передача в открытом виде через HTTP небезопасна.

Альтернативный вариант: Внешние компоненты

Если настройка веб-сервера и проброс портов кажутся слишком сложными, проанализируем другой путь. Многие операторы (например, Mango или Zadarma) предоставляют готовые внешние компоненты (DLL). Такая компонента подключается непосредственно в сеансе пользователя 1С, сама держит соединение с облаком и генерирует ВнешнееСобытие. В этом случае УТ 10.3 ловит событие в процедуре ОбработкаВнешнегоСобытия, и никакой Apache не требуется. Однако этот метод требует, чтобы у каждого менеджера был стабильный интернет-канал и загруженная компонента.

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

← На главную