Как запустить встроенный чат-бот Telegram в серверной базе 1С:УНФ?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой IT и автоматизация бизнеса
← На главную

Переход с файловой версии базы данных на серверную (клиент-серверный вариант) часто сопровождается неожиданными трудностями. Одной из таких проблем является прекращение работы встроенного чат-бота в конфигурации 1С:Управление нашей фирмой (УНФ). Пользователи часто сталкиваются с ситуацией, когда на локальной копии или в файловом режиме всё работает корректно, но после публикации серверной базы чат-бот перестает реагировать на сообщения, а проверка подключения не выдает явных ошибок. В этой статье мы подробно разберем, почему так происходит и как заставить чат-бота работать на вашем сервере.

Анализируем причину: программное ограничение конфигурации

Разберем ситуацию: почему один и тот же код ведет себя по-разному в зависимости от режима работы базы? Выясним причину, обратившись к логике типового решения. В 1С:УНФ функционал вебхуков (Webhooks), который необходим для мгновенного получения сообщений от Telegram, программно ограничен разработчиками.

Проанализируем программный код в обработке НастройкаПрограммы. В модуле формы НастройкаЧатботов существует проверка, которая определяет, доступна ли регистрация бота. По умолчанию 1С считает, что стабильный публичный адрес для работы через вебхуки есть либо у облачных сервисов (например, 1С:Fresh), либо у разработчика, тестирующего функционал на файловой базе. Для обычных серверных баз (без разделения данных) эта возможность зачастую оказывается заблокирована в интерфейсе или работает некорректно при попытке активации.

Решение проблемы через расширение конфигурации

Чтобы обойти это ограничение и разрешить серверной базе полноценно использовать чат-бота, рассмотрим самый безопасный и правильный метод — создание расширения. Это позволит нам изменить поведение формы настройки, не снимая основную конфигурацию с поддержки.

Выполним следующие шаги по созданию расширения:

  1. Создадим новое расширение в конфигураторе (или используем существующее).
  2. Добавим в расширение обработку НастройкаПрограммы и её форму НастройкаЧатботов.
  3. Найдем в модуле формы процедуру ПриСозданииНаСервере.
  4. Захватим эту процедуру в расширение с типом вызова &После.

Нам необходимо принудительно установить флаг, который отвечает за доступность функционала. Рассмотрим пример кода, который нужно внедрить:


&НаСервере
Процедура КЧБТ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Принудительно включаем логику, доступную для облачных сервисов
    РазделениеВключено = Истина; 
КонецПроцедуры

После применения этого расширения в форме настроек чат-бота станет доступна кнопка активации или регистрации вебхука, которая ранее могла быть скрыта или неактивна для серверной базы. Это "обманывает" систему, заставляя её думать, что база работает в режиме разделения данных (как во Fresh), где работа с вебхуками разрешена.

Настройка публикации HTTP-сервисов на веб-сервере

Даже если мы поправим программный код, бот не заработает, если сервер Telegram не сможет "достучаться" до вашей базы 1С. Рассмотрим требования к публикации серверной базы. Помните, что файловая и серверная базы — это две разные публикации на веб-сервере (Apache или IIS).

Проверим настройки публикации:

  1. Откроем конфигуратор серверной базы под правами администратора.
  2. Перейдем в меню Администрирование — Публикация на веб-сервере.
  3. На вкладке HTTP-сервисы обязательно должна стоять галочка напротив сервиса, отвечающего за чат-ботов (обычно это ChatBots или аналогичные системные сервисы в зависимости от версии УНФ).
  4. Проверим содержимое файла default.vrd в каталоге публикации. В нем должна присутствовать секция с описанием httpService.

Проанализируем структуру файла default.vrd. Убедимся, что путь к базе указан верно, и сервис опубликован:

<httpService name="ChatBots" base="hs" />

Важный момент: если вы используете нестандартный порт (например, 8022, как упоминалось в обсуждении), Telegram может не принять такой URL. Официально Telegram поддерживает вебхуки только на портах: 443, 80, 88, 8443. Рекомендуется настроить веб-сервер на стандартный порт 443 с использованием SSL-сертификата.

Требования к SSL и сетевой доступности

Разберем еще одну критически важную деталь. В отличие от локальных тестов, для серверной базы Telegram требует обязательного использования протокола HTTPS с валидным SSL-сертификатом. Если ваш сертификат самоподписанный, Telegram не будет отправлять на него данные без дополнительных манипуляций (передачи файла сертификата методом setWebhook), которые встроенный механизм 1С часто не выполняет.

Посмотрим, как проверить, доходят ли запросы до вашей базы. Используем метод API Telegram getWebhookInfo. Введите в адресной строке браузера запрос:

https://api.telegram.org/bot[ВАШ_ТОКЕН]/getWebhookInfo

Проанализируем ответ. Если в поле last_error_message вы видите "SSL error" или "Connection refused", значит проблема на уровне сетевых настроек вашего сервера или SSL-сертификата. Если же ошибок нет, но бот молчит — значит, запрос доходит до 1С, но база не может его обработать из-за отсутствия прав или некорректной публикации сервиса.

Доступ сервера 1С в интернет

Не забываем, что в серверном варианте запросы к API Telegram (для отправки ответов пользователям) инициирует не ваш компьютер, а сервер 1С (процесс rphost). Рассмотрим типичные преграды:

Итоги и рекомендации

Подведем итог нашему исследованию. Для запуска чат-бота в серверной УНФ нам необходимо выполнить три условия:

  1. Программное: Применить расширение с РазделениеВключено = Истина для формы настроек.
  2. Техническое: Опубликовать HTTP-сервис ChatBots на стандартном порту (желательно 443) с валидным SSL.
  3. Сетевое: Обеспечить серверу 1С доступ к домену api.telegram.org.

Выясним, работает ли решение, путем повторной регистрации бота в интерфейсе 1С после внесения всех правок. Если публикация выполнена корректно и расширение активно, кнопка проверки подключения должна выдать положительный результат, а сообщения пользователей начнут появляться в журнале регистрации 1С как входящие запросы к HTTP-сервису.

← На главную