Как организовать получение вебхуков из Telegram в 1С 7.7 через ОбработкаВнешнегоСобытия

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Реализация современного протокола взаимодействия с мессенджерами в среде 1С 7.7 является нетривиальной задачей. Основная сложность заключается в том, что платформа 7.7 была разработана задолго до появления вебхуков и асинхронных HTTP-запросов. Рассмотрим подробно, как можно заставить старую добрую «семерку» мгновенно реагировать на сообщения из Telegram, не перегружая систему постоянными запросами.

Постановка задачи и архитектурный подход

Стандартный путь получения данных из Telegram — это использование Webhook. Когда пользователь пишет боту, сервер Telegram отправляет POST-запрос на ваш URL. Задача состоит в том, чтобы этот запрос превратился во Внешнее событие внутри 1С. Мы проанализируем несколько стратегий: от простого опроса базы данных до использования специализированных внешних компонент (ВК), работающих с интерфейсом IAsyncEvent.

Вариант 1. Использование промежуточной базы данных и метода CHECKSUM

Если ваша инфраструктура уже включает UNIX-сервер, который принимает хуки и записывает их в MySQL, самым надежным (хотя и не самым быстрым) способом будет периодический опрос этой таблицы. Чтобы не вычитывать всю таблицу целиком, мы можем использовать эффективную проверку изменений.

Разберем алгоритм действий:

  1. На стороне UNIX-сервера скрипт принимает JSON от Telegram и делает INSERT в таблицу MySQL.
  2. В 1С 7.7 мы настраиваем «ожидание» через обработку ожидания.
  3. Для минимизации нагрузки на сеть используем запрос CHECKSUM TABLE.

Пример реализации логики проверки на стороне 1С:


Процедура ПроверитьНовыеСообщения()
    // Подключаемся к MySQL через ADODB.Connection
    Запрос = "CHECKSUM TABLE telegram_hooks";
    // Если результат чексуммы изменился по сравнению с прошлым разом
    Если ТекущаяЧексумма <> ПредыдущаяЧексумма Тогда
        // Читаем только новые строки и обрабатываем их
        ПредыдущаяЧексумма = ТекущаяЧексумма;
        ОбработатьНовыеЗаписи();
    КонецЕсли;
КонецПроцедуры

Этот метод прост, но имеет задержку, равную интервалу вызова ОбработкаОжидания.

Вариант 2. Использование компоненты HttpSrv7 для прямого приема хуков

Чтобы 1С реагировала мгновенно, нам нужно запустить внутри нее мини-веб-сервер. Существует специализированная компонента HttpSrv7. Она позволяет 1С слушать определенный TCP-порт. Как только на этот порт приходит HTTP-запрос (например, перенаправленный с вашего основного сервера), компонента генерирует штатное ВнешнееСобытие.

Рассмотрим, как это выглядит в коде Global.ert:


Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
    Если Источник = "HttpServer" Тогда
        // В переменной Данные содержится тело POST-запроса от Telegram
        ТекстСообщения = ИзвлечьТекстИзJSON(Данные);
        Сообщить("Получено сообщение: " + ТекстСообщения);
        // Здесь мы можем сразу создать документ или ответить пользователю
    КонецЕсли;
КонецПроцедуры

Преимущество: мгновенная реакция. Сложность: требуется проброс портов и настройка SSL-терминирования (так как Telegram работает только по HTTPS, а компонента обычно принимает «чистый» HTTP).

Вариант 3. Использование FormEx и мониторинга файловой системы

Проанализируем ситуацию, когда мы не хотим использовать сетевые компоненты внутри 1С. Мы можем использовать популярную библиотеку FormEx, которая умеет отслеживать изменения в файловой системе без таймеров, используя системные прерывания Windows.

Алгоритм работы:

  1. UNIX-сервер получает вебхук.
  2. Скрипт на сервере создает маленький файл-флаг в сетевой папке, доступной для 1С.
  3. FormEx через метод мониторинга каталога мгновенно вызывает внешнее событие в 1С.

Это «чистое» решение, которое не нагружает процессор постоянными циклами опроса и работает крайне стабильно в многопользовательской среде.

Вариант 4. Внешний мост (Bridge) на .NET или Python

Выясним причину, почему прямой опрос API Telegram из 1С 7.7 часто завершается ошибкой. Это связано с устаревшими протоколами безопасности TLS в Windows XP/2003, где часто крутится «семерка». Оптимальным решением будет создание небольшого приложения-посредника.

Посредник может:

Сравнение методов и рекомендации

Подведем итоги нашего анализа. Выбор метода зависит от ваших технических условий:

  1. Если важна простота внедрения: используйте периодический опрос MySQL с проверкой CHECKSUM TABLE. Это надежно и не требует регистрации сложных ВК.
  2. Если важна скорость реакции (real-time): выбирайте HttpSrv7 или схему с FormEx и файлами-флагами.
  3. Если 1С работает на старой ОС: вариант с внешним мостом-посредником на Python является единственно жизнеспособным для работы с SSL/TLS Telegram.

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

← На главную