Как реализовать поддержку MTProto в 1С для работы с Telegram-ботами?

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

При разработке интеграции 1С с Telegram многие разработчики сталкиваются с проблемой стабильности соединения. Использование стандартных публичных SOCKS5-прокси часто приводит к временным разрывам связи («отвалам»), которые могут длиться от нескольких минут до часов. В поиске более надежных решений возникает вопрос: можно ли задействовать специализированный протокол MTProto (Mobile Transport Protocol) непосредственно в коде 1С, используя стандартный объект ИнтернетПрокси?

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

Различие между Bot API и MTProto API: корень проблемы

Для начала проанализируем ситуацию с точки зрения архитектуры Telegram. Это критически важный момент, который часто упускают разработчики. Telegram предоставляет два принципиально разных интерфейса для взаимодействия:

  1. Telegram Bot API: Это высокоуровневый интерфейс, предназначенный для создания ботов. Он работает исключительно по протоколу HTTPS. Когда вы используете в 1С объект HTTPСоединение для отправки сообщений, вы обращаетесь именно к Bot API. Этот протокол поддерживает стандартные способы проксирования: HTTP-прокси и SOCKS5.
  2. Telegram API (MTProto API): Это низкоуровневый протокол, на котором работают официальные клиентские приложения (мобильные телефоны, десктоп-версии). Именно этот протокол поддерживает MTProto-прокси и требует наличия специального секретного ключа (Secret).

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

Почему 1С не может работать с MTProto «из коробки»

Проанализируем технические ограничения платформы 1С. Объект ИнтернетПрокси является оболочкой над системными библиотеками операционной системы (Windows или Linux). Поскольку MTProto — это узкоспециализированный протокол, разработанный командой Telegram, он не является системным стандартом проксирования.

Чтобы 1С смогла отправить запрос через MTProto, она должна была бы уметь инкапсулировать (заворачивать) стандартный HTTPS-трафик в пакеты, зашифрованные специфическим ключом Telegram. Встроенные средства платформы, такие как HTTPЗапрос и HTTPСоединение, этого делать не умеют. Они ожидают, что прокси-сервер просто передаст их пакеты дальше (как в случае с HTTP/SOCKS), а не будет требовать сложной предварительной обфускации трафика.

Решение №1: Использование TDLib через внешнюю компоненту

Если ваша задача требует именно протокола MTProto (например, вы создаете не бота, а полноценное клиентское приложение — «юзербота»), рассмотрим вариант использования TDLib (Telegram Database Library). Это мощная библиотека от создателей Telegram, которая берет на себя все сложности работы с MTProto, включая шифрование и обход блокировок.

Для реализации этого в 1С необходимо выполнить следующие шаги:

  1. Найти или написать самостоятельно внешнюю компоненту (ВК) на языке C++ или C#, которая будет выступать «мостом» между 1С и TDLib.
  2. Загрузить компоненту в 1С с помощью команды УстановитьВнешнююКомпоненту.
  3. Взаимодействовать с Telegram не через HTTPСоединение, а через методы этой компоненты.

В этом случае объект ИнтернетПрокси в 1С вообще не используется. Библиотека TDLib сама управляет соединением, а вы лишь передаете ей параметры прокси и секретный ключ в виде строки.

Решение №2: Настройка собственного реверс-прокси (Рекомендуется)

Выясним наиболее стабильный и современный способ обхода ограничений без использования MTProto внутри 1С. Это создание собственного HTTPS-шлюза (реверс-прокси) на зарубежном сервере. Рассмотрим, как это работает:

Вместо того чтобы настраивать прокси в самой 1С, мы меняем адрес обращения. Вместо прямого адреса api.telegram.org мы обращаемся к нашему собственному серверу (например, на базе Nginx), развернутому в юрисдикции, где Telegram не заблокирован.

Пример логики взаимодействия:


// Вместо обращения к api.telegram.org
Сервер = "my-proxy-server.com";
Соединение = Новый HTTPСоединение(Сервер, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/bot" + Токен + "/sendMessage");
// ... заполнение параметров сообщения ...
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Посмотрим на преимущества этого метода:

Техническая деталь про ключи MTProto

Разберем вопрос автора темы про «ключ», который часто встречается в настройках MTProto. Этот секрет (Secret) используется для предотвращения обнаружения трафика системами DPI (Deep Packet Inspection). Существует несколько типов секретов:

Поскольку 1С не поддерживает алгоритм хэширования трафика с использованием этого ключа перед отправкой в сокет, использование этих данных в стандартном объекте ИнтернетПрокси невозможно технически. Никакое «правильное» указание порта или хоста в 1С не заставит платформу применить этот ключ.

Итог

Проанализировав ситуацию, мы приходим к выводу: использовать MTProto-прокси через встроенный объект ИнтернетПрокси в 1С невозможно. Для стабильной работы Telegram-бота в 1С следует использовать либо надежный платный SOCKS5-прокси с авторизацией, либо (что гораздо лучше) настроить собственный реверс-прокси на зарубежном VPS. Это обеспечит максимальную отказоустойчивость и избавит от необходимости искать сложные технические решения для протоколов, которые платформа 1С не поддерживает нативно.

← На главную