Как отправлять документы из УНФ 3 в Telegram без изменения конфигурации?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как отправлять документы из УНФ 3 в Telegram без изменения конфигурации?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38968
      Фото аватараOdineski
      Участник

        в унф 3 нужно добавить возможность отправки документов по телеграмм аналогично тому, как

      • #38969
        bot_avaOdin — Одинэсник
        Участник

          Ваше сообщение оборвалось на фразе «аналогично тому, как…». Но для УНФ 3 обычно требуется отправка в Telegram одного из вариантов:

          1. печатной формы документа;
          2. файла из присоединенных файлов;
          3. счета, заказа, акта, накладной в PDF;
          4. документа с кнопкой «Отправить в Telegram»;
          5. автоматическая отправка клиенту после проведения документа.

          Для УНФ 3 правильнее делать это расширением, без изменения конфигурации. Общая схема такая:

          — в расширении добавить команду в форму документа;
          — получить печатную форму или присоединенный файл;
          — сохранить его во временный файл;
          — отправить файл методом Telegram sendDocument;
          — токен бота и настройки хранить в константах либо в регистре сведений расширения;
          — идентификатор чата хранить у клиента, контактного лица или в отдельном регистре сведений.

          ## 1. Что потребуется создать в расширении

          В расширении УНФ 3:

          ### Общий модуль

          Создайте общий модуль, например:

          Свойства:

          — серверный;
          — экспортный;
          — вызов сервера, если команда вызывается из управляемой формы.

          ### Регистр сведений «НастройкиTelegram»

          Можно добавить регистр сведений с периодичностью «Непериодический».

          Измерения:

          Ресурсы:

          Реквизиты:

          Для одного бота достаточно одной записи с ключом:

          Токен Telegram имеет примерно такой вид:

          Токен нельзя хранить непосредственно в коде расширения.

          ## 2. Отправка файла в Telegram из 1С

          Для отправки файла Telegram используется метод:

          В запросе необходимо передать multipart/form-data:

          — chat_id;
          — document;
          — при необходимости caption.

          Ниже приведен рабочий пример серверной функции общего модуля. Она принимает путь к файлу, идентификатор чата и подпись.

          Функция получения токена может выглядеть так:

          ## 3. Как получить идентификатор чата Telegram

          Пользователь должен сначала написать боту любое сообщение, например:

          После этого можно временно вызвать метод:

          В ответе будет структура примерно такого вида:

          Значение:

          это идентификатор чата, куда можно отправлять документы.

          Для рабочего варианта лучше не вводить chat_id вручную в документе. В УНФ 3 его можно хранить:

          — в карточке контрагента;
          — в карточке контактного лица;
          — в дополнительном реквизите клиента;
          — в отдельном регистре сведений расширения.

          Например, отдельный регистр сведений:

          Измерения:

          Ресурсы:

          Так можно отправлять документ нужному клиенту автоматически.

          ## 4. Кнопка в форме документа УНФ 3

          В расширении нужно создать команду формы, например:

          Команду подключить к форме нужного документа. В зависимости от задачи это может быть:

          — Заказ клиента;
          — Реализация товаров и услуг;
          — Счет на оплату;
          — Акт выполненных работ;
          — Коммерческое предложение;
          — Заказ поставщику;
          — Счет на оплату покупателю.

          Обработчик команды формы:

          Серверная процедура:

          Названия реквизитов Объект.Ссылка, Объект.Дата и структура формы могут отличаться в конкретной форме УНФ 3, поэтому этот фрагмент нужно адаптировать к форме документа.

          ## 5. Как получить PDF печатной формы

          Здесь есть два варианта.

          ### Вариант 1. Использовать уже существующий присоединенный PDF

          Если в УНФ документ уже имеет присоединенный файл, нужно получить его двоичные данные и записать во временный файл:

          После этого файл передается в:

          ### Вариант 2. Сформировать печатную форму документа

          Если нужно отправлять именно печатную форму, ее сначала формируют в ТабличныйДокумент, затем сохраняют в PDF:

          После этого выполняется отправка файла в Telegram.

          Важно: в типовой УНФ конкретные процедуры получения печатной формы зависят от документа и версии конфигурации. Для каждого документа нужно определить:

          — имя макета;
          — имя печатной формы;
          — процедуру формирования табличного документа;
          — наличие дополнительных параметров печати.

          Поэтому универсально сформировать PDF для всех документов УНФ одной процедурой без проверки конкретной версии конфигурации нельзя.

          ## 6. Автоматическая отправка после проведения

          Если требуется отправлять документы автоматически, не нужно отправлять их прямо из обработчика ПриЗаписи или ОбработкаПроведения. Это может замедлить проведение и привести к ошибке записи документа при временной недоступности Telegram.

          Лучше сделать очередь отправки:

          ### Регистр сведений «ОчередьTelegram»

          Измерения:

          Реквизиты:

          Статусы:

          При проведении документа в очередь записывается задание. Регламентное задание раз в минуту:

          1. выбирает документы со статусом Ожидает;
          2. формирует PDF;
          3. отправляет файл;
          4. меняет статус на Отправлен;
          5. при ошибке увеличивает счетчик попыток;
          6. сохраняет текст ошибки.

          Такой вариант надежнее, поскольку временная ошибка сети или Telegram не блокирует работу пользователей в УНФ.

          ## 7. Что важно учесть

          ### Ограничение размера файла

          Telegram ограничивает размер отправляемого через Bot API документа. Для обычных счетов, актов и накладных в PDF проблем обычно нет, но крупные архивы и сканы могут не отправиться.

          ### Ограничение подписи

          Подпись к документу не должна быть слишком длинной. Для обычного описания документа достаточно:

          ### Кодировка

          Файл отправляется как бинарные данные. Не нужно читать PDF как текст и перекодировать его.

          ### Идентификатор чата

          Telegram-бот не может первым написать пользователю. Клиент обязательно должен сначала открыть бота и отправить ему сообщение.

          ### Группы

          Для отправки в группу бот должен быть добавлен в группу. Для группы идентификатор чата обычно отрицательный, например:

          ### Безопасность

          Не следует:

          — хранить токен в общем модуле;
          — записывать токен в текст ошибки;
          — передавать токен пользователю;
          — публиковать URL с токеном в журналах регистрации;
          — разрешать отправку документов без проверки прав пользователя.

          Для УНФ 3 оптимальный первый вариант такой: добавить в форму документа команду «Отправить в Telegram», сформировать PDF печатной формы, получить chat_id клиента из регистра сведений и вызвать sendDocument. Рекомендую посмотреть здесь: https://core.telegram.org/bots/api#senddocument и https://infostart.ru/1c/articles/1528057/

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С