Telemonitor — объединяем Telegram и 1С

Не так давно Telegram предоставил API для создания ботов. Telemonitor — программа, позволяющая легко настроить собственного бота для работы с 1С.

Что это такое?

Telegram набирает всё большую популярность. Недавно сервис предоставил платформу для создания ботов. Telemonitor — это прослойка между API Telegram и 1С/OneScript, позволяющая легко настроить функционал собственного бота. Кто-то задастся вопросом, а зачем вообще нужна какая-то дополнительная программа, ведь все можно организовать и в 1С. Конечно можно, но, на мой взгляд, это не всегда удобно. Во-первых, более или менее удобный функционал есть только в версии 8.3. Во-вторых, надо постоянно держать запущенным сеанс. Telemonitor, конечно, тоже имеет свои недостатки, но работать с ним, думаю будет удобнее.

Как это работает?

Схема работы Telegram и Telemonitor 1С
Telemonitor опрашивает бота с заданной периодичностью. При получении новой команды программа создает соединение с базой данных через ComConnector, и выполняет указанный для команды код, через вызов процедуры Выполнить(). Количество COM-соединений никак не ограничивается, поэтому одновременно можно отправлять боту несколько команд.

Как настроить своего бота?

Как зарегистрировать бота рассказывать, думаю, смысла нет — в интернете полно примеров, И так, открываем каталог Telemonitor и видим файл settings.ini. В нем необходимо задать token для бота, полученный при регистрации. При желании можно изменить интервал опроса бота и параметры соединения. Теперь рассмотрим папку databases, в ней будем описывать базы и команды.
Настройка Telegram и Telemonitor 1С
Для каждой базы данных, в которой будем использовать бота создаем папку с произвольным названием латиницей. Для примера я использую базы FileAccounting82 и ServerTrade83. В каждой папке необходимо разместить файл database.ini, в котором указывается строка соединения с базой (сейчас в меня полетят тухлые помидоры, но да, пароль хранится в чистом виде) и используемая версия 1С. Кстати, 8.1 не поддерживается. Кодировка у ini файла должна быть Windows-1251.

Теперь настало время описать команды. В той же папке создаем файлы *.tcm. Каждый такой файл — это просто текст в кодировке UTF-8, содержащий описание команды и код, выполняемый в 1С. Первой строкой идет описание, далее — исполняемый код.
Команды Telegram и Telemonitor 1С

Если мы хотим увидеть какой-либо отклик от бота, тогда необходимо заполнить переменную Результат. В данном примере бот вернет описание пользователей, работающих в базе или скажет: «Нет активных пользователей». При создании своих команд помните, что весь код помещается в конструкцию Выполнить(), поэтому он имеет некоторые ограничения, думаю сами догадываетесь какие. Чтобы бот вернул файл, например, вы хотите получать какой-нибудь отчет или прайс, то в коде команды необходимо заполнить переменную Результат_Файл.

Что получилось в итоге?

После того, как мы создали каталоги для баз данных и файлы с командами, наш бот знает, какие команды у него есть, и что с ними делать.

Имя каждой команды складывается из имени базы данных и имени файла tcm. Запросим у бота список команд. И так, бот, /start !
Список команд бота Telegram
Ух ты! Работает! Давай-ка, бот, нам список активных пользователей.
Выполнение команд ботом Telegram
Эх, не было печали, а теперь вот каждое утро общаюсь с ботом и смотрю, все ли с базами в порядке 🙂

Что дальше?

Программу, она кстати использует NET Framework 4.0, писал для собственных нужд, но, если кому пригодится, буду очень рад. Буду рад предложениям по улучшению и расширению функционала.

Последние изменения:

  • 12.08.2015
    Добавил команду /screen для получения скриншота.
    Добавил возможность отправки файлов.
  • 23.10.2015
    В команду теперь можно передавать параметры. В 1С все параметры будут доступны в реквизите «ПараметрыКоманды» через запятую
    В settings.ini добавил параметр [SafeMode1C] для запуска кода в небезопасном режиме.
  • 07.10.2015
    Добавил возможность выводить команды в виде кнопок клавиатуры. Такие команды описываются отдельным файлом, но расширение у него должно быть *.tcm_b вместо *.tcm. Параметры кнопок задаются в секции [Buttons] ini-файла.
    Команды в виде кнопок доп.клавиатуры
  • 17.03.2016
    Добавил ограничение доступа по имени пользователя Telegram (username). Ограничения можно задать как на бота целиком, так и на базу данных. Для этого в файлах settings.ini и database.ini есть секция [WhiteList] и параметр Users. Именя пользователей, которым разрешен доступ, следует указывать через запятую. В этой же секции файла settings.ini можно ограничить доступ пользователям к получению скриншотов. Имя параметра, отвечающего за данное ограничение — ScreenOwners
  • 15.04.2016
    Добавил поддержку команд с запросом параметров. Для того, чтобы бот запросил параметр, необходимо в коде команды использовать переменную ДиалогСПараметрами.
    Ниже представлен пример команды с запросом трех параметров

    // Подключение к базе данных
    МассивПараметров = Новый Массив();
    Подстроки = СтрЗаменить(ПараметрыКоманды, ",", Символы.ПС);
    Для Сч = 1 По СтрЧислоСтрок(Подстроки) Цикл
    	Параметр = СокрЛП(СтрПолучитьСтроку(Подстроки, Сч));
    	Если ЗначениеЗаполнено(Параметр) Тогда
    		МассивПараметров.Добавить(Параметр);
    	КонецЕсли;
    КонецЦикла;
    Если МассивПараметров.Количество() < 3 Тогда
    	ДиалогСПараметрами = Истина;
    	Заголовки = Новый Соответствие();
    	Заголовки[0] = "Введите первый параметр:";
    	Заголовки[1] = "Отлично! Теперь укажите второй:";
    	Заголовки[2] = "Почти готово! Третий параметр и заканчиваем:";
    	Результат = Заголовки[МассивПараметров.Количество()];
    Иначе
    	// Здесь выполнение какого-то кода...
    	Результат = "Команда выполнена со следующими параметрами:" + Символы.ПС;
    	Результат = Результат + "1) " + МассивПараметров[0] + Символы.ПС;
    	Результат = Результат + "2) " + МассивПараметров[1] + Символы.ПС;
    	Результат = Результат + "3) " + МассивПараметров[2];
    КонецЕсли;
    

    Ну и результат работы

    Команда с запросом параметров Команда с запросом параметров

    При написании таких команд надо понимать, что Telemonitor не поддерживает COM-соединение между запросами параметров у пользователя. При передаче каждого параметра создается новое соединение и в код каманды передаются все полученные параметры, поэтому в описании команды нет смысла инициализировать какие-либо переменные и выполнять действия, в надежде, что они будут доступны при передаче следующего параметра.
    Также, теперь в коде команды есть доступ к имени пользователя Telegram, и полному идентификатору команды. Для этого используются переменные username, first_name, last_name и command

  • 22.11.2016
    Добавлена поддержка OneScript(1Script). Для тех, кто не в курсе, что это такое вот ссылка и вот. Скрипты необходимо размещать в папке scripts c расширением *.os. Примеры скриптов есть в архиве с программой. Команды для OneScript имеют некоторые особенности, но не сильно отличаются от таковых для 1С. Все пробелы в параметрах, переданных в команду заменяются на знак подчеркивания «_».
  • 06.04.2018
    Команды для OScript можно делать в виде кнопок. Для этого файл команды должен быть с расширением *.os_b
  • 18.04.2018
    Добавлена поддержка SOCKS5. В settings.ini секция [Proxy], параметр Type

[stextbox id=»info»]

Описание settins.ini

[Main] — основные настройки

BotToken — токен бота, для которого настраивается Telemonitor
Interval — интервал опроса бота на наличие новых команд для выполнения (сек)

[Proxy] — подключение через прокси-сервер

UseProxy (0/1) — Использовать прокси для соединения с сервером telegram
Server — Адрес прокси
Port — Порт прокси
Username — Имя пользователя
Password — Пароль
Type — (0 — HTTP, 1 — SOCKS5) — тип прокси

[Debug] — отладка (логгирование)

Enabled (0/1) — включение режима отладки для записи расширенной информации в telemonitor.log

[SafeMode1C] — безопасный режим

Enabled (0/1) — запуск кода 1С в безопасном режиме

[Buttons] — дополнительная клавиатура Telegram

ShowStartButton (0/1) — показывать кнопку для запроса списка команд
HideButtonsAfterMessage (0/1) — скрывать кнопки доп.клавиатуры после получения сообщения
NumRowsOfButtons — количество кнопок доп.клавиатуры в одном ряду
UsePictures (0/1) — показывать пиктограммы на кнопках доп.клавиатуры

[WhiteList] — ограничение доступа к боту

Users — именя пользователей Telegram (username), которым разрешен доступ
ScreenOwners- именя пользователей, которым разрешено получить скриншоты
[/stextbox]

P.S. Писал быстро, поэтому возможны какие-нибудь ошибки. Буду благодарен, если вы сообщите о таковых.

[stextbox id=»download»]
Telemonitor.zip
[/stextbox]

9 комментариев к записи «Telemonitor — объединяем Telegram и 1С»

  1. Можете добавить возможность отключить сообщения «Неизвестная команда» и «У вас нет доступа к данной команде»
    И как нибудь попроще вести лог сообщений. Так же записывать туда координаты локации, если присылают локацию.
    Большое спасибо за проделанную работу. Отличный бот!

  2. Добрый день. Подскажите, пожалуйста, что означает ошибка
    «! 30.06.2017 17:14:07 — Не удалось выполнить команду «/base_ActiveUsersCount»: Адресат вызова создал исключение.
    Ошибка инициализации библиотеки модулей»?
    Какой библиотеки модулей не хватает?

  3. На сколько я понял, очень удобная вещь для системного администратора, удаленно контролировать работу 1С. Для рядового пользователя тут вариантов нет никаких?

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

  4. Господа, что делаю не так, забиваю нужный токен, а в логах тем временем:
    » Settings.ini: не заполнен токен бота» хотя ctrl-C => ctrl-V этот токен.
    Может кто сталкивался?)

  5. Добрый день.
    А у вас исходников самой программы программы где нибуть на git нету. кое что поправить и добавить хочется…

  6. Добрый день.
    Кто нибудь может подсказать в чем ошибка?
    worker error: Ссылка на объект не указывает на экземпляр объекта.

Добавить комментарий для Василий (iklife.ru) Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *