Перейти к содержимому
ZEVSLAB

Отчёты из 1С в Telegram с разграничением доступа по ролям

Разбор подхода: сотрудники получают отчёты учётной системы в мессенджере, бот вынесен за пределы 1С, права проверяются в 1С при каждом запросе, а офис не открывает наружу ни одного порта.

Архитектурный разборТорговые и дистрибьюторские команды

Контекст

Рассмотрим торговую компанию с полевой командой: торговые представители, супервайзеры, руководство. Продажи, остатки и работа сотрудников учитываются в 1С. Отчёты в ней есть, но открыть их можно только с рабочего компьютера, а торговый большую часть дня проводит в дороге.

Поэтому отчёты просят у офиса: звонком, сообщением, письмом. Кто-то в офисе формирует отчёт, выгружает и пересылает. Мессенджер у сотрудников уже есть, и он открыт весь день.

Проблема

Отчёт зависит от человека в офисе. Супервайзер не может посмотреть продажи команды перед встречей, если некому их выгрузить.

Доступ к 1С вне офиса — это риск. Удалённый рабочий стол или веб-клиент для каждого торгового означает лицензии, пароли на телефонах и учётную систему, открытую в интернет.

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

Ограничения

Учётная система не должна становиться доступной из интернета: это первое, о чём спросит ответственный за безопасность. Отсюда следует, что все соединения должны инициироваться изнутри офиса.

Права должны совпадать с теми, что действуют в компании: торговый видит только свои продажи, супервайзер — свою команду, директор — всё. Проверка в интерфейсе бота не считается: её обходят подменой параметра.

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

Диагностика

Инвентаризация отчётов. Какие отчёты нужны, кому, с какими фильтрами, сколько времени формируется каждый и можно ли сформировать его на сервере без открытия формы. Отчёт, который формируется дольше минуты, требует другой схемы обмена, и это нужно знать до оценки.

Источник ролей. Где в 1С определено, кто торговый, а кто супервайзер, и как описан состав команды. Если этого нет, роль придётся завести — это отдельная работа на стороне учётной системы.

Качество телефонов. Вход строится на номере телефона в карточке сотрудника. Устаревшие и общие номера всплывают на этом шаге, а не после запуска.

Сетевой путь. Есть ли у сервера 1С исходящий доступ и где разместить сервер бота. От ответа зависит, как устроен защищённый канал.

Предлагаемая архитектура

Бот — отдельный сервис. Он отвечает только за мессенджер: кнопки, диалог, выбор параметров, отправку файлов. Бизнес-логики в нём нет, данных он не хранит.

1С отвечает на несколько вопросов. Через HTTP-сервис учётная система сообщает, кто этот пользователь, какие отчёты ему доступны, какие значения можно выбрать в фильтрах, и формирует сам отчёт в PDF.

Меню строится по описанию из 1С. Учётная система отдаёт список отчётов с типами фильтров. Бот рисует кнопки по этому описанию, поэтому новый отчёт не требует правки бота.

Вход по контакту из мессенджера. Сотрудник нажимает системную кнопку «Поделиться номером». Бот принимает контакт, только если он принадлежит самому отправителю, и передаёт номер в 1С для поиска сотрудника.

Канал открывает офис. Сервер 1С сам поднимает защищённый туннель к серверу бота. HTTP-сервис доступен только внутри туннеля и под отдельной учётной записью с минимальными правами.

Реализация

Работа идёт параллельно с двух сторон. Описание обмена согласуется в первую очередь: по нему разработчик 1С делает HTTP-сервис, а бот разрабатывается на заглушке, не дожидаясь учётной системы. Стыковка — проверка готового описания, а не совместная отладка.

Так интерфейс выглядит для сотрудника. Ниже три сценария: отчёт по запросу, сводка по расписанию с кратким разбором и вопрос голосом с оповещением по порогу.

Демонстрация интерфейса
  1. 01Вход по номеру телефонаСотрудник нажимает «Поделиться номером». Бот принимает только собственный контакт пользователя — чужой номер подставить нельзя.
  2. 02Меню по роли1С узнаёт сотрудника и его роль. Супервайзер видит только положенные ему отчёты.
  3. 03Параметры кнопкамиПериод, бренд и сотрудник выбираются кнопками. В списке сотрудников — только его команда.
  4. 04PDF из 1СПосле подтверждения 1С формирует отчёт с ограничениями роли, бот присылает PDF.
Макет на вымышленных данных: бренды, сотрудники и цифры придуманы. Показано поведение интерфейса, а не работающая система.

Отчёты по расписанию и оповещения хранятся в 1С: кому какой отчёт присылать и какие пороги отслеживать, задаёт администратор учётной системы. Бот забирает их сам, поэтому направление соединений не меняется.

Краткий разбор к отчёту строится по цифрам, которые 1С отдаёт вместе с PDF. Модель формулирует вывод, но не вычисляет показатели: каждое число в разборе взято из учётной системы.

Надёжность и нештатные ситуации

  • Отчёт формируется долго. Сотрудник видит, что отчёт готовится. Если формирование дольше допустимого, запрос переводится в очередь, и бот присылает файл по готовности.
  • 1С недоступна. Бот отвечает понятным сообщением, а администратор получает оповещение. Запросы не теряются молча.
  • Номер телефона у нескольких сотрудников. Привязка не выполняется, бот предлагает обратиться к администратору. Угадывать сотрудника нельзя.
  • Сотрудник уволен или заблокирован. Статус проверяется в 1С при каждом обращении, поэтому доступ закрывается сразу, без отдельного действия в боте.
  • Повторное нажатие кнопки. Пока отчёт формируется, второй такой же запрос от того же сотрудника не запускается.
  • Ответ модели не по формату. Разбор не отправляется, сотрудник получает отчёт без него. Отчёт важнее комментария.

Безопасность и работа с данными

Бот не хранит отчёты и номера телефонов: файл передаётся сотруднику и не остаётся на сервере бота. Связь аккаунта с сотрудником, роли и журнал запросов живут в 1С.

Сервер бота закрыт снаружи: вход только по ключам, лишние порты закрыты, обновления безопасности ставятся автоматически. Ключи доступа к мессенджеру и к модели хранятся в окружении сервера и не попадают в репозиторий.

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

Решения

Какие решения заложены и какие альтернативы отвергнуты

У каждого решения была более простая альтернатива. Здесь — почему она не подходит.

  1. 01

    Бот вне 1С

    Почему так

    Диалоги, кнопки и отправка файлов — сильная сторона готовых библиотек для ботов. 1С остаётся тем, что умеет лучше всего: сотрудники, права, данные и отчёты.

    От чего отказались

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

  2. 02

    Каталог отчётов описывает 1С

    Почему так

    Бот строит меню и кнопки фильтров по описанию, которое отдаёт 1С. Новый отчёт — изменение в одном месте.

    От чего отказались

    Отчёты и фильтры, зашитые в коде бота. Каждое изменение требует работы двух разработчиков и согласования между ними.

  3. 03

    Права проверяет 1С при каждом запросе

    Почему так

    Бот передаёт только идентификатор пользователя Telegram. Кто это и что ему можно, решает учётная система, поэтому подмена параметра ничего не открывает.

    От чего отказались

    Скрывать недоступные кнопки в боте. Ограничение в интерфейсе обходится подменой параметра в запросе.

  4. 04

    Только исходящие соединения

    Почему так

    Офис сам открывает защищённый канал к серверу бота. Снаружи до 1С добраться не через что.

    От чего отказались

    Публикация 1С в интернет через обратный прокси. Это открывает учётную систему для перебора паролей и уязвимостей веб-сервера.

Итог

Ожидаемый эффект

Для архитектурного сценария это ожидаемое поведение, а не отчёт о достигнутых показателях. Критерии успеха определяются и проверяются на данных конкретного проекта.

  • Сотрудник получает отчёт в мессенджере без доступа к 1С и без отдельного пароля
  • Ограничения по роли проверяются в 1С при каждом запросе, а не скрытием кнопок
  • Офис не открывает входящих портов, учётная система не видна из интернета
  • Новый отчёт подключается описанием в 1С, без изменений в коде бота
  • Блокировка сотрудника в 1С сразу закрывает ему доступ к боту

Похожий процесс есть в вашей системе?

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