Многие разработчики, поддерживающие системы на платформе 1С:Предприятие 8.2 или ранних версиях 8.3, столкнулись с внезапным прекращением работы интеграции с Telegram. При попытке отправить сообщение через стандартный объект HTTPСоединение возникает ошибка "SSL connect error". Проанализируем причины этой проблемы и разберем по шагам доступные способы её решения, от простого обновления до настройки "костылей", если переход на новую платформу невозможен.
Разберем ситуацию с технической точки зрения. Telegram API постоянно повышает требования к безопасности передаваемых данных. Основная проблема заключается в том, что старые версии 1С используют встроенные библиотеки OpenSSL прошлых поколений, которые не поддерживают современные стандарты шифрования. Рассмотрим ключевые факторы:
HTTPСоединение в 1С 8.2 часто некорректно формирует этот параметр.Проанализируем сообщения экспертов: наиболее стабильным и правильным решением является обновление технологической платформы. Судя по техническим тестам, полноценная поддержка необходимых протоколов шифрования (TLS 1.2 и выше) появилась в релизах 8.3.9.х и выше.
Важно учитывать, что если ваша конфигурация работает на обычных формах, вы можете установить современную платформу 1С 8.3, сохранив при этом "Режим совместимости" с версией 8.2. Однако, для корректной работы SSL иногда требуется поднять режим совместимости хотя бы до 8.3.8. Рассмотрим алгоритм действий:
Посмотрим на пример кода, который должен работать на современной платформе без использования прокси:
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
Соединение = Новый HTTPСоединение("api.telegram.org", 443, , , , 30, ЗащищенноеСоединение);
ТекстЗапроса = "bot" + Токен + "/sendMessage?chat_id=" + IDЧата + "&text=" + ТекстСообщения;
Запрос = Новый HTTPЗапрос(ТекстЗапроса);
Ответ = Соединение.Получить(Запрос);
Если обновление платформы категорически запрещено (например, из-за риска поломать сложную кастомную конфигурацию), воспользуемся тем фактом, что внешние утилиты, такие как cURL, работают с Telegram корректно. Поскольку curl.exe поддерживает современные TLS и умеет работать с SOCKS5, мы можем использовать его как "транспорт".
Разберем, как реализовать вызов через ЗапуститьПриложение. Создадим вспомогательную функцию для отправки сообщения:
Процедура ОтправитьЧерезCurl(Токен, ЧатID, Текст)
ПутьКCurl = "C:\curl\curl.exe"; // Путь к исполняемому файлу curl
ПроксиСервер = "socks5://user:pass@127.0.0.1:1080";
URL = "https://api.telegram.org/bot" + Токен + "/sendMessage";
Параметры = "-X POST " + URL + " -d chat_id=" + ЧатID + " -d text=" + Текст + " --proxy " + ПроксиСервер;
Команда = ПутьКCurl + " " + Параметры;
ЗапуститьПриложение(Команда, , Истина);
КонецПроцедуры
Преимущество этого метода в том, что cURL берет на себя всю сложность работы с сертификатами и современными протоколами шифрования, возвращая в 1С уже готовый результат (если настроить перенаправление вывода в файл).
Системный компонент PowerShell использует возможности .NET Framework, который обновляется независимо от 1С. Рассмотрим вариант использования Invoke-WebRequest. Этот метод особенно хорош тем, что PowerShell версии 5.1 и выше нативно поддерживает TLS 1.2.
Проанализируем пример скрипта, который можно сформировать динамически из 1С:
Скрипт = "
|[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|$url = 'https://api.telegram.org/bot" + Токен + "/sendMessage'
|$body = @{chat_id='" + IDЧата + "'; text='" + Текст + "'}
|Invoke-WebRequest -Uri $url -Method Post -Body $body
|";
ТекстСкрипта = СтрЗаменить(Скрипт, "|", "");
ПутьКФайлу = "C:\temp\tg_send.ps1";
// Записываем ТекстСкрипта в файл и запускаем:
// powershell.exe -ExecutionPolicy Bypass -File C:\temp\tg_send.ps1
Этот способ позволяет избежать проблем с SOCKS5 в объекте WinHttpRequest, так как .NET умеет работать с системными настройками прокси Windows.
Рассмотрим наиболее элегантный архитектурно, но сложный в настройке метод — создание SSL-туннеля. Этот способ позволяет 1С обращаться к Telegram по обычному незащищенному протоколу HTTP на локальный адрес, а внешняя программа будет "оборачивать" этот трафик в современный SSL/TLS.
Проанализируем схему работы через утилиту Stunnel:
api.telegram.org:443.api.telegram.org на localhost и порт на 8080.ЗащищенноеСоединениеOpenSSL в 1С больше не нужен, так как соединение до локального порта идет по HTTP.Пример настройки соединения в 1С при использовании локального моста:
// Теперь обращаемся к локальному порту, который проброшен через Stunnel
Соединение = Новый HTTPСоединение("127.0.0.1", 8080);
ТекстЗапроса = "bot"+ИмяБота+"/sendMessage?chat_id="+Получатель+"&text="+ТекстСообщения;
Запрос = Новый HTTPЗапрос(ТекстЗапроса);
Ответ = Соединение.Получить(Запрос);
Многие пытаются использовать COMОбъект("WinHttp.WinHttpRequest.5.1") в качестве альтернативы. Разберем, почему это не всегда помогает. Хотя WinHTTP в современных версиях Windows (10, 11, Server 2016+) поддерживает TLS 1.2, он крайне плохо работает с SOCKS5 прокси. Если ваш регион требует использования прокси именно этого типа, WinHttpRequest выдаст ошибку или проигнорирует настройки прокси. Кроме того, на старых ОС (Windows Server 2008) поддержку TLS 1.2 в WinHTTP нужно включать принудительно через реестр, что добавляет хлопот системным администраторам.
Выясним, какой путь выбрать именно вам:
Помните, что использование бесплатных публичных прокси (особенно HTTP) небезопасно для передачи токенов ваших ботов. Всегда используйте либо свои SOCKS5-серверы, либо надежные VPN-решения на уровне операционной системы.