Разработка Telegram-ботов на платформе 1С:Предприятие стала стандартной задачей для автоматизации оповещений, получения отчетов и взаимодействия с клиентами. Однако разработчики часто сталкиваются с технической преградой: сервер 1С, находящийся внутри локального контура предприятия, не может отправить исходящий запрос к API Telegram (api.telegram.org) из-за сетевых ограничений или блокировок со стороны провайдеров. Для автоматической отправки аналитики в мессенджер можно воспользоваться расширением для рассылки отчетов в Telegram.
При этом входящие запросы через вебхуки (Webhook) могут частично доходить, но полноценная работа бота невозможна без стабильной отправки сообщений в одностороннем порядке (например, регламентная рассылка уведомлений сотрудникам). В этой статье мы подробно разберем, как решить проблему доставки исходящих пакетов из 1С в Telegram, проанализируем доступные технологии и выберем наиболее надежные варианты.
Прежде чем переходить к обходу сетевых ограничений, важно прояснить фундаментальное правило работы самой платформы Telegram. Бот не может самостоятельно начать диалог с пользователем, если тот ни разу ему не писал. Это защита от спама.
Для того чтобы бот мог отправить сообщение пользователю, должны быть соблюдены условия:
/start).chat_id).Как только 1С зафиксировала chat_id, система может отправлять сообщения этому пользователю в любой момент времени (например, по регламентному заданию ночью или при проведении документа). Для реализации взаимодействия и отправки сообщений можно использовать обработку для работы с Telegram-ботом из 1С.
---
Многие разработчики совершают типичные ошибки при попытке быстро настроить обход блокировок:
HTTPСоединение. Платформа физически не умеет работать по протоколу MTProto, поэтому настроить 1С через MTProxy напрямую невозможно.Выяснив эти ограничения, рассмотрим жизнеспособные и стабильные технические альтернативы.
---
Проанализируем ситуацию с блокировками. Очень часто регуляторы и провайдеры блокируют адреса Telegram только по протоколу IPv4. При этом IPv6-подсети мессенджера остаются полностью доступными и не попадают под ограничения.
Если провайдер, к которому подключен ваш сервер 1С, предоставляет полноценный доступ по IPv6, вы можете отправлять запросы напрямую на api.telegram.org без использования дополнительных прослоек, VPN и прокси.
Выясним, поддерживает ли ваш сервер IPv6. Для этого можно выполнить команду в консоли сервера (для Windows):
ping -6 api.telegram.org
Если пакеты успешно проходят и вы видите IPv6-адрес в ответе, значит, этот способ вам подходит. В коде 1С не потребуется вносить никаких изменений — операционная система сама выберет приоритетный протокол IPv6 для обращения к серверу Telegram.
Важный нюанс: В некоторых корпоративных сетях системные администраторы отключают протокол IPv6 по соображениям безопасности или из-за особенностей маршрутизации. Кроме того, некорректно настроенный IPv6 может приводить к ошибкам формата потока в самом кластере 1С. Перед внедрением обязательно проконсультируйтесь с сетевым инженером вашей компании. ---
Если у вас нет возможности администрировать собственный прокси-сервер, идеальным решением является использование serverless-платформы Cloudflare Workers. Мы можем создать легковесный скрипт-перенаправитель, который будет выступать в роли доверенного моста между 1С и Telegram.
Разберем по шагам, как это работает:
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 запросов в сутки. Для большинства корпоративных ботов этого хватит с огромным запасом.
---
Если корпоративная политика безопасности запрещает использовать сторонние облачные сервисы вроде 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 Тогда
// Обработка успешного ответа
КонецЕсли;
Исключение
// Обработка ошибок сети
КонецПопытки;
КонецПроцедуры
---
Для крупных баз данных 1С, где задействовано множество интеграций, прописывать настройки прокси-серверов в коде каждого HTTP-запроса не всегда удобно. Более профессиональный подход — перенос логики обхода ограничений на уровень операционной системы, где развернут кластер 1С:Предприятия.
Рассмотрим схему реализации этого метода:
ИнтернетПрокси. Операционная система сервера сама прозрачно для 1С перенаправляет пакеты в обход блокировок.Этот способ является наиболее отказоустойчивым в долгосрочной перспективе, так как исключает человеческий фактор при написании кода в 1С и позволяет централизованно управлять маршрутами сети.
---
Существует два подхода к получению входящих сообщений от пользователей: Webhook (вебхук) и Long Polling (длинные опросы через getUpdates).
setWebhook требует успешного исходящего запроса от 1С.Мы проанализировали основные методы решения проблемы интеграции 1С и Telegram при нестабильной связи. Для небольших компаний и быстрой разработки отлично подойдет вариант с Cloudflare Workers благодаря простоте настройки и отсутствию затрат. Для крупных корпоративных информационных систем наиболее надежным и масштабируемым решением будет настройка VPN-маршрутизации на уровне ОС сервера или использование собственного выделенного прокси-сервера.