Как настроить стабильную отправку сообщений из 1С в Telegram Bot API в условиях сетевых ограничений

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

Разработка Telegram-ботов на платформе 1С:Предприятие стала стандартной задачей для автоматизации оповещений, получения отчетов и взаимодействия с клиентами. Однако разработчики часто сталкиваются с технической преградой: сервер 1С, находящийся внутри локального контура предприятия, не может отправить исходящий запрос к API Telegram (api.telegram.org) из-за сетевых ограничений или блокировок со стороны провайдеров. Для автоматической отправки аналитики в мессенджер можно воспользоваться расширением для рассылки отчетов в Telegram.

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

Ограничение Telegram: может ли бот писать первым?

Прежде чем переходить к обходу сетевых ограничений, важно прояснить фундаментальное правило работы самой платформы Telegram. Бот не может самостоятельно начать диалог с пользователем, если тот ни разу ему не писал. Это защита от спама.

Для того чтобы бот мог отправить сообщение пользователю, должны быть соблюдены условия:

  1. Пользователь должен зайти в бота и нажать кнопку Старт (отправить команду /start).
  2. В базе данных 1С должен быть сохранен уникальный идентификатор чата с этим пользователем (chat_id).

Как только 1С зафиксировала chat_id, система может отправлять сообщения этому пользователю в любой момент времени (например, по регламентному заданию ночью или при проведении документа). Для реализации взаимодействия и отправки сообщений можно использовать обработку для работы с Telegram-ботом из 1С.

---

Почему публичные прокси и MTProxy не подходят для 1С

Многие разработчики совершают типичные ошибки при попытке быстро настроить обход блокировок:

Выяснив эти ограничения, рассмотрим жизнеспособные и стабильные технические альтернативы.

---

Вариант 1. Использование сетевого протокола IPv6

Проанализируем ситуацию с блокировками. Очень часто регуляторы и провайдеры блокируют адреса Telegram только по протоколу IPv4. При этом IPv6-подсети мессенджера остаются полностью доступными и не попадают под ограничения.

Если провайдер, к которому подключен ваш сервер 1С, предоставляет полноценный доступ по IPv6, вы можете отправлять запросы напрямую на api.telegram.org без использования дополнительных прослоек, VPN и прокси.

Выясним, поддерживает ли ваш сервер IPv6. Для этого можно выполнить команду в консоли сервера (для Windows):

ping -6 api.telegram.org

Если пакеты успешно проходят и вы видите IPv6-адрес в ответе, значит, этот способ вам подходит. В коде 1С не потребуется вносить никаких изменений — операционная система сама выберет приоритетный протокол IPv6 для обращения к серверу Telegram.

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

Вариант 2. Использование бесплатного сервиса Cloudflare Workers (Реверс-прокси)

Если у вас нет возможности администрировать собственный прокси-сервер, идеальным решением является использование serverless-платформы Cloudflare Workers. Мы можем создать легковесный скрипт-перенаправитель, который будет выступать в роли доверенного моста между 1С и Telegram.

Разберем по шагам, как это работает:

  1. Cloudflare имеет огромную сеть серверов по всему миру, его IP-адреса практически никогда не блокируются корпоративными или государственными файрволами.
  2. Вы бесплатно регистрируетесь на Cloudflare и создаете новый Worker.
  3. Пишете простой JavaScript-код (буквально 10 строк), который принимает любой запрос к вашему Worker, меняет домен в адресе на api.telegram.org, отправляет его в Telegram и возвращает ответ обратно в 1С.

Пример кода для Cloudflare Worker:


addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  // Подменяем адрес нашего воркера на адрес API Телеграм
  url.hostname = 'api.telegram.org'
  
  const modifiedRequest = new Request(url, {
    method: request.method,
    headers: request.headers,
    body: request.body
  })
  
  return fetch(modifiedRequest)
}

После публикации вы получите уникальный адрес вида https://my-telegram-proxy.workers.dev. Теперь в коде 1С вместо обращения к официальному API вы будете слать запросы на этот адрес.

Посмотрим на пример кода в 1С для отправки сообщения через Cloudflare Worker:


&НаСервере
Процедура ОтправитьСообщениеЧерезВоркер(ТокенБота, ИдентификаторЧата, ТекстСообщения)
    
    // Вместо api.telegram.org используем наш адрес на Cloudflare
    АдресРесурса = "my-telegram-proxy.workers.dev";
    ПутьЗапроса = "/bot" + ТокенБота + "/sendMessage";
    
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить("chat_id", ИдентификаторЧата);
    ПараметрыЗапроса.Вставить("text", ТекстСообщения);
    
    // Кодируем параметры в формат JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
    СтрокаЗапроса = ЗаписьJSON.Закрыть();
    
    // Настраиваем HTTP-запрос
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type", "application/json");
    
    Запрос = Новый HTTPЗапрос(ПутьЗапроса, Заголовки);
    Запрос.УстановитьТелоИзСтроки(СтрокаЗапроса, КодировкаТекста.UTF8);
    
    // Cloudflare всегда работает по защищенному протоколу HTTPS (порт 443)
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
    Соединение = Новый HTTPСоединение(АдресРесурса, 443,,,,, ЗащищенноеСоединение);
    
    Попытка
        Ответ = Соединение.ОтправитьДляОбработки(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            ЗаписьЖурналаРегистрации("TelegramBot", УровеньЖурналаРегистрации.Информация,,, "Сообщение успешно отправлено");
        Иначе
            ЗаписьЖурналаРегистрации("TelegramBot", УровеньЖурналаРегистрации.Предупреждение,,, "Ошибка отправки. Код: " + Ответ.КодСостояния);
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("TelegramBot", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
    КонецПопытки;
    
КонецПроцедуры

Плюс этого метода в том, что лимит бесплатного тарифа Cloudflare составляет 100 000 запросов в сутки. Для большинства корпоративных ботов этого хватит с огромным запасом.

---

Вариант 3. Аренда дешевого VPS и поднятие собственного HTTPS/SOCKS5 прокси

Если корпоративная политика безопасности запрещает использовать сторонние облачные сервисы вроде Cloudflare, оптимальным выходом будет аренда виртуального сервера (VPS/VDS) в зарубежном дата-центре или у провайдера, чьи IP-адреса не заблокированы.

На этом сервере системный администратор может поднять собственный прокси-сервер (например, с помощью ПО 3proxy или Squid). Доступ к нему закрывается логином и паролем, чтобы посторонние не могли использовать ваши мощности.

Рассмотрим подробнее, как подключить собственный прокси в коде 1С. Для этого используется объект платформы ИнтернетПрокси:


&НаСервере
Функция ПолучитьНастройкиПрокси()
    
    Прокси = Новый ИнтернетПрокси;
    
    // Указываем протокол https, адрес вашего VPS и порт прокси-сервера
    Прокси.Установить("https", "198.51.100.50", 3128); 
    
    // Если на вашем прокси настроена авторизация
    Прокси.Пользователь = "my_proxy_user";
    Прокси.Пароль = "my_strong_password";
    
    Возврат Прокси;
    
КонецФункции

&НаСервере
Процедура ОтправитьСообщениеЧерезСвойПрокси(ТокенБота, ИдентификаторЧата, ТекстСообщения)
    
    АдресРесурса = "api.telegram.org";
    ПутьЗапроса = "/bot" + ТокенБота + "/sendMessage?chat_id=" + ИдентификаторЧата + "&text=" + КодироватьСтроку(ТекстСообщения, СпособКодированияСтроки.КодироватьИменаUPORT);
    
    Запрос = Новый HTTPЗапрос(ПутьЗапроса);
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
    
    // Получаем настроенный объект прокси
    ОбъектПрокси = ПолучитьНастройкиПрокси();
    
    // Передаем прокси восьмым параметром в конструктор HTTPСоединение
    Соединение = Новый HTTPСоединение(АдресРесурса, 443,,,,, ЗащищенноеСоединение, ОбъектПрокси);
    
    Попытка
        Ответ = Соединение.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            // Обработка успешного ответа
        КонецЕсли;
    Исключение
        // Обработка ошибок сети
    КонецПопытки;
    
КонецПроцедуры

---

Вариант 4. Прозрачное проксирование на уровне ОС сервера (VPN / Маршрутизация)

Для крупных баз данных 1С, где задействовано множество интеграций, прописывать настройки прокси-серверов в коде каждого HTTP-запроса не всегда удобно. Более профессиональный подход — перенос логики обхода ограничений на уровень операционной системы, где развернут кластер 1С:Предприятия.

Рассмотрим схему реализации этого метода:

  1. Системный администратор настраивает на сервере 1С туннель VPN (например, используя современный и быстрый протокол WireGuard или VLESS).
  2. В таблице маршрутизации операционной системы создается статическое правило: направлять весь трафик, предназначенный для диапазонов IP-адресов Telegram, через созданный VPN-интерфейс. Весь остальной локальный трафик продолжает идти напрямую через основного провайдера.
  3. Разработчик 1С пишет стандартный лаконичный код без использования объекта ИнтернетПрокси. Операционная система сервера сама прозрачно для 1С перенаправляет пакеты в обход блокировок.

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

---

Сравнение Webhook и Long Polling в условиях блокировок

Существует два подхода к получению входящих сообщений от пользователей: Webhook (вебхук) и Long Polling (длинные опросы через getUpdates).

Резюме

Мы проанализировали основные методы решения проблемы интеграции 1С и Telegram при нестабильной связи. Для небольших компаний и быстрой разработки отлично подойдет вариант с Cloudflare Workers благодаря простоте настройки и отсутствию затрат. Для крупных корпоративных информационных систем наиболее надежным и масштабируемым решением будет настройка VPN-маршрутизации на уровне ОС сервера или использование собственного выделенного прокси-сервера.

← На главную