Как реализовать полноценный клиент Telegram (User API) в 1С:Предприятие

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

Стандартная интеграция 1С с Telegram обычно ограничивается использованием Bot API. Однако боты имеют существенные ограничения: они не могут инициировать диалог первыми (без предварительного сообщения от пользователя), не имеют доступа к списку контактов по номеру телефона и ограничены в работе с группами. Для решения задач полноценной CRM-системы часто требуется User API (MTProto), который позволяет 1С работать как «честный» клиент от имени реального пользователя.

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

Архитектура решения: Связка 1С и Python

Рассмотрим наиболее гибкий вариант реализации — создание промежуточного микросервиса на языке Python. Платформа 1С не поддерживает протокол MTProto напрямую, поэтому использование внешней библиотеки является оправданным шагом. В качестве основы выберем библиотеку Pyrogram (или аналогичную Telethon).

Схема взаимодействия выглядит следующим образом:

  1. Python-сервер: Подключается к серверам Telegram по протоколу MTProto. Он отвечает за авторизацию, получение обновлений в реальном времени и отправку команд.
  2. HTTP-интерфейс: Python-сервер поднимает локальный веб-сервер (например, на базе Flask или FastAPI), который принимает запросы от 1С.
  3. 1С:Предприятие: Отправляет HTTP-запросы к промежуточному серверу для отправки сообщений и получает входящие данные через механизм Webhooks или Longpolling.

Проанализируем реализацию метода получения сообщений. Чтобы 1С мгновенно узнавала о новом сообщении, на стороне 1С необходимо опубликовать HTTP-сервис. Python-сервер, получив апдейт от Telegram, будет пересылать его (POST-запрос) на адрес опубликованного сервиса 1С.

Работа с базой данных и кэширование

При создании клиента важно не перегружать основную базу 1С транзакциями по каждому мелкому событию (например, статусу «печатает»). Для хранения истории сообщений, временных метаданных и структуры таблиц удобно использовать SQLite.

Рассмотрим интересный подход: динамическая реструктуризация SQLite на основе JSON-описания. Мы можем передавать из 1С структуру требуемых таблиц, а Python-скрипт будет автоматически приводить базу SQLite к нужному виду. Это позволяет легко обновлять функционал расширения 1С без ручной правки схем данных на стороне внешнего сервиса.

Пример структуры метаданных в формате JSON для управления таблицами:


{
    "tables": {
        "messages": {
            "columns": ["id INTEGER PRIMARY KEY", "chat_id TEXT", "text TEXT", "date DATETIME"],
            "indexes": ["chat_id"]
        },
        "contacts": {
            "columns": ["user_id TEXT", "phone TEXT", "name TEXT"]
        }
    }
}

Реализация на стороне 1С: Расширение и интерфейс

Для минимизации вмешательства в типовые конфигурации (УТ, ERP, УНФ) логично реализовать функционал в виде расширения. Внутри расширения создаются:

Проанализируем программный код отправки текстового сообщения через наш микросервис:


Функция ОтправитьСообщениеВТелеграм(Телефон, ТекстСообщения)
    
    Запрос = Новый HTTPЗапрос("/send_message");
    СтруктураДанных = Новый Структура;
    СтруктураДанных.Вставить("phone", Телефон);
    СтруктураДанных.Вставить("message", ТекстСообщения);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
    СтрокаJSON = ЗаписьJSON.Закрыть();
    
    Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);
    
    Соединение = Новый HTTPСоединение("localhost", 8080); // Наш Python-сервис
    Ответ = Соединение.ОтправитьДляОбъекта(Запрос);
    
    Возврат Ответ.КодСостояния = 200;
    
КонецФункции

Альтернативные методы реализации

Если использование Python в инфраструктуре нежелательно, рассмотрим альтернативные пути:

  1. Библиотека WTelegramClient (.NET): Если сервер 1С работает на Windows, можно написать внешнюю компоненту (Native API) или использовать COM-объект на базе C#. Эта библиотека реализует MTProto и позволяет работать с Telegram напрямую из 1С.
  2. TDLib (Telegram Database Library): Это официальная библиотека от разработчиков Telegram. Она наиболее стабильна, но требует серьезных навыков программирования на C++ или использования готовых оберток для создания внешней компоненты 1С.

Бизнес-применение и возможности

Разработка собственного клиента открывает возможности, недоступные ботам:

Риски и предостережения

Важно помнить: Telegram строго наказывает за злоупотребление User API. При использовании самописных клиентов необходимо получить официальные api_id и api_hash на портале my.telegram.org.

Основные причины блокировок при работе через 1С:

Выясним причину, почему стоит предпочесть User API вместо Системы взаимодействия 1С. Хотя Система взаимодействия имеет штатный шлюз в Telegram, она работает только через ботов. Если ваша стратегия продаж подразумевает «живое» общение и инициативный контакт с клиентом, то разработка собственного MTProto-клиента — единственный путь интеграции.

Таким образом, разработка клиента Telegram на 1С — это сложная, но оправданная задача для автоматизации CRM-процессов. Наиболее жизнеспособной архитектурой сегодня является использование Python-сервиса в качестве прослойки, что позволяет совместить мощь библиотек обработки протокола с бизнес-логикой платформы 1С.

← На главную