Пример связи 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 по причине: Переполнение стека встроенного языка на сервере