Пример связи 1С и мессенджера Telegram. Получение данных из 1С запросом из Telegram

Пример связи 1С и мессенджера Telegram. Получение данных из 1С запросом из Telegram

Для начала зарегистрируем бота, получим его id - токен. В Telegram для этого создан специальный бот — @BotFather. Добавляем его в контакт. Получаем получаем список его команд, написав ему /start.

Введите команду /newbot — бот попросит придумать имя нашему новому боту (оно должно оканчиваться на «bot»). BotFather предоставит токен бота и ссылку для добавления бота в контакты. Проверим полученный токен с помощью ссылки api.telegram.org/bot<TOKEN>/getMe

Этого, в принципе, достаточно.

2. Создание обработки в 1С

Создадим внешнюю обработку. Добавим реквизиты обработки строковый переменной длины «Бот», «Токен», «Сервер».

Т.к. обработку не будем привязывать к конкретной конфигурации, то список понимаемых команд будем хранить в табличной части обработки «ТаблицаПонимаемыхКоманд» (а так, в принципе, команды можно хранить в справочнике конфигурации).

Реквизиты ТЧ строковые: «Имя», «ВыполняемоеДействие», «Параметр», «Описание»

Команды пользователя (те, которые он буде писать боту) по той же причине будем хранить в табличной части «КомандыПользователей» (если не делать обработку универсальной, то, конечно, предпочтительно использовать регистр сведений – далее, в листингах кода укажем примеры и для регистра сведений тоже).

Реквизиты ТЧ: числовые «chat_id», «date», булево «Выполнено» и строковый «Команда»

Теперь создадим управляемую форму обработки, назначим ее основной и разместим реквизиты «Бот» и «Токен» (необязательно, но для наглядности):

Также создадим реквизит формы «Дерево» – тип «ДеревоЗначений». В нем будут отображаться чаты. Для наглядности выведем его на форму. Колонки дерева создадим программно (см.далее).

Для события формы ПриСозданииНаСервере добавим процедуру:

Создадим команду формы «ПоказатьСообщения», выведем ее на форму в виде кнопки и Обработчик команды

Обратите внимание, что для протокола «https» порт указывается 443

Если Вы используете версию 1С 8.3.6 и выше, то в процедура ПрочитатьДвоичныеДанныеОтвета() будем использовать новый объект ЧтениеJSON().

В процедуре ЗаполнитьРС() будем заполнять табличную часть «КомандыПользователей» (или же регистр сведений). (код процедуры далее).

Процедура ЗаполнитьСтруктуруИзОтветаJSON() заполняет дерево чатов:

Если Вы используете версию 1С ниже 8.3.6 то процедура ПрочитатьДвоичныеДанныеОтвета() будет такой:

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

Процедура ЗаполнитьСтруктуруИзОтветаJSON() – это парсер JSON и рекурсивное заполнение дерева для версии ниже 1С 8.3.6:

Теперь опишем процедуру, заполняющую табличную часть «КомандыПользователей» либо регистр сведений:

Если вы будете использовать регистр сведений (я назвал его «КомандыПользователей»), то закомментируйте/раскомментируйте соответствующие участки кода.

Обратите внимание, что если версия ниже 1С 8.3.6, то в коде переменную Параметр надо преобразовать из Юникода (этот участок обозначен в коде в комментарии):

Для этого используем две функции Юникод – парсер (он нужен только для версии 1С ниже 8.3.6):

В процедуре ЗаполнитьРС() вызывается функция ВыполнитьКомандуБота(ЗаписьРегистра, Параметр), где ЗаписьРегистра – это строка табличной части ТаблицаПонимаемыхКоманд. Параметр – параметр команды (то, что написал боту пользователь).

Вот и все – обработка прилагается.

Отдельное спасибо пользователю Инфостарт igo1 - перекодировка из Юникода (Unicode) в строку.

Основу для построения чата для версии 1С ниже 8.3.6 (парсер JSON) получил отсюда

UPD. В комментариях был задан вопрос " как отправлять файлы ".

Вот текст процедуры, которая выполняет отчет "Продажи" (на СКД), сохраняет результат в Excel и отправляет в Telegram:

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Столкнулся вот с такой ошибкой:

: Ошибка при вызове метода контекста (ПрочитатьДвоичныеДанныеОтвета) ПрочитатьДвоичныеДанныеОтвета(ДвоичныеДанныеОтвета); по причине: Переполнение стека встроенного языка на сервере по причине:

Обработка.ТелеграммБот.Форма.Форма.Форма : 32 : СформироватьДерево(ДеревоЗн, ДеревоЗн, ЧтениеJSON); Обработка.ТелеграммБот.Форма.Форма.Форма : 71 : СформироватьДерево(Дерево, НовСтр, ЧтениеJSON); Обработка.ТелеграммБот.Форма.Форма.Форма : 75 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON, ЧтениеJSON.ТекущееЗначение); Обработка.ТелеграммБот.Форма.Форма.Форма : 83 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON); . Обработка.ТелеграммБот.Форма.Форма.Форма : 75 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON, ЧтениеJSON.ТекущееЗначение); Обработка.ТелеграммБот.Форма.Форма.Форма : 83 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON); Обработка.ТелеграммБот.Форма.Форма.Форма : 75 : СформироватьДерево(Дерево, СтрДерево, ЧтениеJSON, ЧтениеJSON.ТекущееЗначение); Обработка.ТелеграммБот.Форма.Форма.Форма : 0 по причине: Переполнение стека встроенного языка на сервере

📎📎📎📎📎📎📎📎📎📎