Система взаимодействия (СВ) — это мощный инструмент платформы «1С:Предприятие 8», позволяющий пользователям общаться в чатах, совершать видеозвонки и обмениваться файлами непосредственно в контексте рабочих задач. Однако при переносе этого функционала на мобильные устройства или при разработке интеллектуальных чат-ботов разработчики часто сталкиваются со специфическими трудностями. Кнопки обсуждений могут бесследно исчезать из интерфейса мобильного клиента, а тщательно написанный код бота в модуле может попросту игнорироваться системой.
В этой статье мы подробно разберем две наиболее распространенные проблемы при работе с Системой взаимодействия: особенности функционирования мобильного клиента через защищенные каналы связи (VPN) и архитектурные нюансы работы чат-ботов, из-за которых не срабатывает стандартный обработчик сообщений. Мы разберем причины возникновения этих неполадок и выработаем пошаговый план их устранения.
---
Представим типичную ситуацию: в тонком и веб-клиенте на настольном компьютере Система взаимодействия, подключенная через облачный сервис 1cDialog.com, работает безупречно. Но стоит открыть то же самое приложение на мобильном телефоне (в мобильном клиенте или через мобильный браузер), как интерфейс обсуждений полностью пропадает. Нет ни контекстных обсуждений в документах, ни общей кнопки чата.
Давайте выясним техническую причину этого поведения. Она кроется в особенностях сетевых протоколов и политиках безопасности мобильных операционных систем.
1. Блокировка протокола WebSocket (WS/WSS) защищенными соединениями
Для мгновенного обмена сообщениями и поддержания постоянной связи «клиент-сервер» Система взаимодействия использует протокол WebSocket. В отличие от стандартных HTTP-запросов, WebSocket устанавливает непрерывное двустороннее соединение. При подключении к облаку 1С обмен идет по защищенному протоколу wss:// (обычно через стандартный порт 443).
Если на мобильном устройстве запущен VPN для доступа во внутреннюю сеть предприятия, весь трафик заворачивается в зашифрованный туннель. Очень часто корпоративные VPN-серверы, брандмауэры и прокси-серверы настроены на жесткую фильтрацию «нетипичного» трафика:
101 Switching Protocols), которая необходима для перехода с обычного HTTPS на WebSocket.8081 или 8088). Если эти порты не проброшены и не разрешены в настройках VPN-шлюза, мобильный клиент физически не сможет достучаться до сервера СВ.Когда платформа 1С на мобильном устройстве пытается инициализировать Систему взаимодействия и сталкивается с невозможностью установить WebSocket-соединение, она просто отключает данный функционал. Интерфейсные элементы (кнопки чатов) скрываются, чтобы не путать пользователя неработающими функциями. Если восстановить работу штатного сервиса не удается, для организации переписки и обмена файлами внутри базы можно использовать готовое решение для встроенного чата в 1С.
2. Жесткие ограничения фонового режима в iOS и Android
Мобильные операционные системы ориентированы на жесткое энергосбережение. Если десктопное приложение может безраздельно утилизировать ресурсы системы, то мобильный клиент быстро ограничивается в правах:
Как решить проблему с доступностью СВ на мобильном клиенте:
Для восстановления работоспособности чатов на мобильных устройствах выполним следующие шаги:
*.1cdialog.com (или для IP-адреса вашего локального сервера СВ) и открыть необходимые порты.---
Перейдем ко второй проблеме. Вы решили создать чат-бота внутри Системы взаимодействия. Вы написали код обработчика в модуле бота, например:
Процедура ОбработкаСообщенияСистемыВзаимодействия(Сообщение, ДополнительныеПараметры)
Попытка
// Создаем ответ в то же самое обсуждение
Ответ = СистемаВзаимодействия.СоздатьСообщение(Сообщение.Обсуждение);
Ответ.Текст = "Добрый день! Ваше обращение принято в обработку.";
Ответ.Записать();
Исключение
ЗаписьЖурналаРегистрации("БотСВ.Ошибка",
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Вы отправляете сообщение боту от имени обычного пользователя, но ничего не происходит. Точка останова в этой процедуре не срабатывает, отладчик молчит, а бот упорно не отвечает. Разберем по шагам, почему так происходит.
В отличие от интерактивного пользователя 1С, чат-бот не поддерживает постоянное «живое» веб-сокет соединение с сервером взаимодействия. Платформа работает по асинхронной схеме через локальную очередь сообщений в вашей информационной базе.
Для того чтобы сообщения, отправленные боту на сервере СВ, попали в вашу базу данных 1С и вызвали обработчик в модуле бота, необходимо регулярно выполнять специальный метод платформы:
СистемаВзаимодействия.ВыполнитьОбработкуБотов();
Проанализируем этот механизм подробнее:
Решение: Нам необходимо создать регламентное задание, которое будет запускаться автоматически с периодичностью каждые 1-2 минуты. Код метода в общем модуле (с флагом «Сервер») должен выглядеть следующим образом:
Процедура ВыполнитьРегламентнуюОбработкуБотов() Экспорт
// Метод должен выполняться в привилегированном режиме
УстановитьПривилегированныйРежим(Истина);
Попытка
СистемаВзаимодействия.ВыполнитьОбработкуБотов();
Исключение
ЗаписьЖурналаРегистрации("РегламентныеЗадания.ОшибкаОбработкиБотов",
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Если вы проводите тестирование на локальной (тестовой) базе данных, обратите внимание на режим работы:
ВыполнитьОбработкуЗаданий()), либо если база полностью закрыта.Когда регламентное задание забирает сообщения из очереди, платформа 1С для выполнения кода обработчика бота инициализирует отдельные фоновые процессы (допускается до трех параллельных потоков на одного бота). По умолчанию конфигуратор не отслеживает фоновые задания, поэтому точка останова в модуле бота не срабатывает.
Чтобы отладчик останавливался внутри процедуры ОбработкаСообщенияСистемыВзаимодействия, выполним следующие настройки:
После этого при получении ботом нового сообщения платформа создаст фоновое задание, конфигуратор автоматически перехватит его, и выполнение кода приостановится на вашей точке останова.
Разработчикам важно знать критическое правило Системы взаимодействия: сообщение удаляется из очереди только после успешного выполнения обработчика бота.
Если в коде процедуры ОбработкаСообщенияСистемыВзаимодействия возникнет ошибка (например, попытка деления на ноль, обращение к несуществующему реквизиту или ошибка доступа к базе данных), транзакция откатится. Платформа посчитает, что обработка не удалась, и при следующем запуске ВыполнитьОбработкуБотов() попытается выполнить этот же код для этого же сообщения снова.
Это приводит к бесконечному циклу падений фонового задания, перегрузке процессора сервера и полной блокировке всей очереди сообщений бота. Любые последующие сообщения от других пользователей застрянут позади «проблемного» сообщения.
Золотое правило разработки ботов: Весь код внутри обработчика сообщений должен быть обернут в конструкцию Попытка ... Исключение, как показано в примере выше.
При создании чат-бота в системе регистрируется виртуальный пользователь СВ. Посмотрим на важные правила сопоставления учетных записей:
---
Если вам не требуется сложная логика регламентных заданий на сервере и вы хотите организовать быструю реакцию системы на сообщения непосредственно на рабочем месте конкретного пользователя (например, диспетчера), можно использовать клиентский метод асинхронного подключения.
Рассмотрим, как подключить обработчик новых сообщений без использования регламентных заданий и модулей бота. Этот код пишется на стороне клиента:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Инициализируем прослушивание новых сообщений на клиенте
ПодключитьМониторингСообщенийСВ();
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьМониторингСообщенийСВ()
Попытка
СистемаВзаимодействия.ПодключитьОбработчикНовыхСообщенийАсинх(
Новый ОписаниеОповещения("ОбработкаНовогоСообщенияСВ", ЭтотОбъект)
);
Исключение
// Обрабатываем ситуацию, когда СВ недоступна (например, из-за VPN)
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
"Не удалось подключить обработчик Системы взаимодействия: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())
);
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаНовогоСообщенияСВ(Сообщение, ДополнительныеПараметры) Экспорт
// Этот код сработает мгновенно при поступлении сообщения в интерфейс пользователя
Если СтрНайти(ВРег(Сообщение.Текст), "ЗАЯВКА") > 0 Тогда
ПоказатьОповещениеПользователя(
"Получен запрос на создание заявки!",
,
"Отправитель: " + Сообщение.Автор.Имя,
СтатусОповещения.Информация
);
// Здесь мы можем открыть форму нового документа или запустить процесс
ОткрытьФорму("Документ.ЗаявкаПокупателя.ФормаОбъекта");
КонецЕсли;
КонецПроцедуры
Этот способ незаменим, когда вам нужно реализовать быстрые интерактивные сценарии (например, автоматическое открытие карточки звонка у оператора или вывод всплывающих окон при получении сообщений в чате поддержки).
---
Мы подробно проанализировали особенности функционирования Системы взаимодействия 1С в различных условиях. Подведем итоги:
ws:// и wss://).ОбработкаСообщенияСистемыВзаимодействия, обязательно настраиваем регулярный запуск регламентного задания с вызовом метода СистемаВзаимодействия.ВыполнитьОбработкуБотов() с интервалом в 1-2 минуты.Попытка ... Исключение, чтобы избежать зацикливания и падения всей очереди обработки сообщений.Применяя эти архитектурные правила, мы обеспечим надежную и отказоустойчивую работу корпоративных чатов и автоматизированных ботов как на стационарных компьютерах, так и на мобильных клиентах ваших сотрудников.