Переход с файловой версии базы данных на серверную (клиент-серверный вариант) часто сопровождается неожиданными трудностями. Одной из таких проблем является прекращение работы встроенного чат-бота в конфигурации 1С:Управление нашей фирмой (УНФ). Пользователи часто сталкиваются с ситуацией, когда на локальной копии или в файловом режиме всё работает корректно, но после публикации серверной базы чат-бот перестает реагировать на сообщения, а проверка подключения не выдает явных ошибок. В этой статье мы подробно разберем, почему так происходит и как заставить чат-бота работать на вашем сервере.
Разберем ситуацию: почему один и тот же код ведет себя по-разному в зависимости от режима работы базы? Выясним причину, обратившись к логике типового решения. В 1С:УНФ функционал вебхуков (Webhooks), который необходим для мгновенного получения сообщений от Telegram, программно ограничен разработчиками.
Проанализируем программный код в обработке НастройкаПрограммы. В модуле формы НастройкаЧатботов существует проверка, которая определяет, доступна ли регистрация бота. По умолчанию 1С считает, что стабильный публичный адрес для работы через вебхуки есть либо у облачных сервисов (например, 1С:Fresh), либо у разработчика, тестирующего функционал на файловой базе. Для обычных серверных баз (без разделения данных) эта возможность зачастую оказывается заблокирована в интерфейсе или работает некорректно при попытке активации.
Чтобы обойти это ограничение и разрешить серверной базе полноценно использовать чат-бота, рассмотрим самый безопасный и правильный метод — создание расширения. Это позволит нам изменить поведение формы настройки, не снимая основную конфигурацию с поддержки.
Выполним следующие шаги по созданию расширения:
НастройкаПрограммы и её форму НастройкаЧатботов.ПриСозданииНаСервере.Нам необходимо принудительно установить флаг, который отвечает за доступность функционала. Рассмотрим пример кода, который нужно внедрить:
&НаСервере
Процедура КЧБТ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Принудительно включаем логику, доступную для облачных сервисов
РазделениеВключено = Истина;
КонецПроцедуры
После применения этого расширения в форме настроек чат-бота станет доступна кнопка активации или регистрации вебхука, которая ранее могла быть скрыта или неактивна для серверной базы. Это "обманывает" систему, заставляя её думать, что база работает в режиме разделения данных (как во Fresh), где работа с вебхуками разрешена.
Даже если мы поправим программный код, бот не заработает, если сервер Telegram не сможет "достучаться" до вашей базы 1С. Рассмотрим требования к публикации серверной базы. Помните, что файловая и серверная базы — это две разные публикации на веб-сервере (Apache или IIS).
Проверим настройки публикации:
ChatBots или аналогичные системные сервисы в зависимости от версии УНФ).default.vrd в каталоге публикации. В нем должна присутствовать секция с описанием httpService.Проанализируем структуру файла default.vrd. Убедимся, что путь к базе указан верно, и сервис опубликован:
<httpService name="ChatBots" base="hs" />
Важный момент: если вы используете нестандартный порт (например, 8022, как упоминалось в обсуждении), Telegram может не принять такой URL. Официально Telegram поддерживает вебхуки только на портах: 443, 80, 88, 8443. Рекомендуется настроить веб-сервер на стандартный порт 443 с использованием 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С, но база не может его обработать из-за отсутствия прав или некорректной публикации сервиса.
Не забываем, что в серверном варианте запросы к API Telegram (для отправки ответов пользователям) инициирует не ваш компьютер, а сервер 1С (процесс rphost). Рассмотрим типичные преграды:
rphost (или для пользователя, от имени которого запущена служба 1С) на адрес api.telegram.org.inetcfg.xml в папке conf на сервере 1С. Без этого серверная база не сможет отправить ответное сообщение в мессенджер.Подведем итог нашему исследованию. Для запуска чат-бота в серверной УНФ нам необходимо выполнить три условия:
РазделениеВключено = Истина для формы настроек.ChatBots на стандартном порту (желательно 443) с валидным SSL.api.telegram.org.Выясним, работает ли решение, путем повторной регистрации бота в интерфейсе 1С после внесения всех правок. Если публикация выполнена корректно и расширение активно, кнопка проверки подключения должна выдать положительный результат, а сообщения пользователей начнут появляться в журнале регистрации 1С как входящие запросы к HTTP-сервису.