gifts2017

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

Опубликовал Александр Шкураев (salexdv) в раздел Администрирование - Сервисные утилиты

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

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

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

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

Схема работы

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

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

Как зарегистрировать бота рассказывать, думаю, смысла нет. В интернете полно примеров, на Инфостарте, кстати, тоже есть очень полезная публикация. И так, открываем каталог Telemonitor и видим файл settings.ini. В нем необходимо задать token для бота, полученный при регистрации. При желании можно изменить интервал опроса бота и параметры соединения. Теперь рассмотрим папку databases, в ней будем описывать базы и команды.

Структура каталогов

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

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

Команда, исполняемая ботом

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

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

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

Имя каждой команды складывается из имени базы данных и имени файла tcm. Запросим у бота список команд. И так, бот, /start !

Список команд бота

Ух ты! Работает! Давай-ка, бот, нам список активных пользователей.

Выполнение команды

Эх, не было печали, а теперь вот каждое утро общаюсь с ботом и смотрю, все ли с базами в порядке :-)

Что дальше?

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

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

  • 12.08.2015
  • Добавил команду /screen для получения скриншота.
  • Добавил возможность отправки файлов.
  • 23.10.2015
  • В команду теперь можно передавать параметры. В 1С все параметры будут доступны в реквизите "ПараметрыКоманды" через запятую
  • В settings.ini добавил параметр [SafeMode1C] для запуска кода в небезопасном режиме.
  • 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С. Все пробелы в параметрах, переданных в команду заменяются на знак подчеркивания "_".

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

Скачать файлы

Наименование Файл Версия Размер
Telemonitor.zip 129
.zip 1,92Mb
08.08.16
129
.zip 20161121 1,92Mb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Александр Шалимов (shalimski) 10.08.15 04:25
Отличная идея! Все работает.
2. Алексей Ларин (roofless) 10.08.15 09:26
тут http://infostart.ru/public/372352/ нужна платформа не меньше 8.3.6, какая нужна для вашего телемонитора?
3. Александр Шкураев (salexdv) 10.08.15 09:39
4. Дмитрий Дидковский (didkovskij) 12.08.15 13:33
Спасибо, всё работает!

А есть возможность возвращать не текст, а прикреплять файл, например?
5. Александр Шкураев (salexdv) 12.08.15 14:00
(4) didkovskij, нет, пока только текст. Можно доработать. Опишете, зачем такое надо?
6. Александр Шкураев (salexdv) 12.08.15 14:55
(4) didkovskij, добавил такую возможность. Для примера код команды:
Результат_Файл = КаталогВременныхФайлов()  + "result.xls";
ТабДокумент = Новый ТабличныйДокумент();
ТабДокумент.Область(1, 1, 1, 1).Текст = "Тестовый файл";
ТабДокумент.Записать(Результат_Файл, ТипФайлаТабличногоДокумента.XLS97);

Т.е. необходимо заполнить переменную Результат_Файл, тогда Telemonitor отправит указанный файл боту.
adhocprog; didkovskij; +2 Ответить 2
7. Олег Веселов (sml) 12.08.15 17:45
ТС, похоже с планировщиками оконными не знаком?
8. Александр Шкураев (salexdv) 12.08.15 17:49
9. Алексей (Операция1Ы) 12.08.15 18:19
Круто, а исходники будут?
10. Александр Шкураев (salexdv) 12.08.15 18:40
(9) Операция1Ы, не планировал выкладывать.
11. Дмитрий Дидковский (didkovskij) 13.08.15 04:39
(6) salexdv, например в 1с формируется файл (отчёт, график и т.п.) хочется его прикрепить, чтобы пользователь смог его посмотреть. Спасибо за возможность!
12. Дмитрий Дидковский (didkovskij) 13.08.15 04:43
(7) sml, ну так то можно и web сервис поднять и приложение под андроид написать. Одну и ту же задачу можно кучей разных способов реализовать. Мне идея и реализация понравилась. Например, кто захочет тот и получит нужную информацию, а не так как в планировщике по заданным параметрам, выполнять одно и тоже действие :)
13. Павел Одинцов (Darklight) 17.08.15 10:40
Что-то фишку не просёк. Идея общаться с ботом текстовыми командами не впечатлила
Разве не удобнее
1. Сделать отдельную БД, которая будет собирать состояния из целевых баз и показывать сводно при старте и по отдельности на весь экран (без каких-либо запросов со стороны оператора)
2. Нужные дополнительные сведения получать в один-два клика мыши в отельных окнах
3. Получать из базы периодические рассылки важной контроллируемой информации по электронной почте / SMS и по любым иным каналам сваязи
14. Алексей Т. (CratosX) 17.08.15 12:02
(13) Darklight,
Что-то фишку не просёк.

как минимум Телеграм быстр и не требователен, зачастую уже установлен. Установка "отдельной базы" тяжела, требует мобильной платформы
15. Александр Шкураев (salexdv) 17.08.15 12:30
(13) Darklight, здесь уже писали про планировщик заданий, что в принципе равносильно периодическим рассылкам, как пишите вы.
Но идея бота не в периодических оповещениях, а в предоставлении информации по требованию. Мне не нужно получать каждый день SMS (электронное письмо и т.д.) о том что все хорошо/все пропало. Я хочу видеть информацию, только когда у меня душа заболела.
16. yuran yuyu (yuran2000) 17.08.15 15:11
Идея хорошая, но не везде есть возможность запускать чужие программы.
Пытаюсь на 1С это же написать, по обмену сообщениями трудности не возникло, но вот отправку файла так и не победил.
Думаю, что не туда вставляю Токен.
Т.е., что б бот что-то сделал в базе и отправил отчет в виде файла.
Может, распишите принцип этого процесса?
17. Александр Шкураев (salexdv) 17.08.15 16:18
(16) yuran2000, я сам не с первого раза отправил файл, скорее всего ошибка в формировании тела multipart/form-data и определении ContentLength. Попробую сделать в 1С такое и напишу.
18. Александр Шкураев (salexdv) 17.08.15 22:03
(16) yuran2000, к сожалению мне не удалось отправить данные 1С на api.telegram.org с помощью multipart/form-data. Испытывал на методе sendMessage, передавая поля chat_id и text. Передавать пробовал с помощью WinHttp.WinHttpRequest.5.1, Msxml2.SERVERXMLHTTP и встроенного HTTPСоединение. Если указывать протокол http, то возвращается ошибка 301, либо text is empty, а если использовать, как положено, https - вылет по таймауту. Причем тело multipart/form-data точно правильное взял его из Telemonitor.
Если найдете решение, дайте знать.
Тело запроса выглядит так

------------ebcd4ec6dea948099c4c47ca5c9541bd
Content-Disposition: form-data; name="chat_id"

XXXXXXXXX
------------ebcd4ec6dea948099c4c47ca5c9541bd
Content-Disposition: form-data; name="text"

test
------------ebcd4ec6dea948099c4c47ca5c9541bd--
...Показать Скрыть
19. eugenie zheludkov (eugeniezheludkov) 18.09.15 03:24
(18) salexdv, Возился как то с POST "multipart/form-data", оказалось, что кроме boundry, общий пакет делится на несколько пакетов по 2500 байт (точно не помню размер). все браузеры делят, отправляется за несколько посылок.
из RFC http://www.ietf.org/rfc/rfc2388.txt ничего особо не понять , нужно смотреть примеры кода на гитхабе и тд
20. Александр Шкураев (salexdv) 18.09.15 07:33
(19) eugeniezheludkov, возможно, но мне и меньшего объема сообщение не удавалось отправить. Пример сообщением выше (18)
21. Сергей Филькин (FSerg) 18.09.15 22:42
(18) salexdv, дня три мучался с отправкой файла в телеграмм из 1С.
Из-за того что 1Ска не может рабоать с двоичными данными - единственный способ, которым получилось сформировать правильный запрос - это ОбъединитьФайлы().

Вот такой код у меня заработал:
Сервер = "api.telegram.org";	
врТекст = КодироватьСтроку(СокрЛП(ТестСообщения), СпособКодированияСтроки.КодировкаURL, КодировкаТекста.UTF8);	

СтрокаСоединения = "/bot"+СокрЛП(Объект.АпиКлюч)+"/sendPhoto";

Boundary = "----"+Строка(Новый УникальныйИдентификатор());

//Определяем массив для процедуры ОбъединитьФайлы 
МассивФайловДляОбъединения = Новый Массив; 

//Формируем начальный фрагмент файла POST-запроса 
ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt"); 
ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8); 

//Формируем конечный фрагмент файла POST-запроса 
ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt"); 
ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);

ТекстДляОтправки = "";

// ЧАТ
ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;	
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС;	
ТекстДляОтправки = ТекстДляОтправки + СокрЛП(Объект.АйдиЧата) + Символы.ПС;

// ПОДПИСЬ	
ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;	
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""caption""" + Символы.ПС + Символы.ПС;	
ТекстДляОтправки = ТекстДляОтправки + СокрЛП("Название картинки!") + Символы.ПС;

// ФОТО
ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;	
ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""photo""; filename=""01.jpg""" + Символы.ПС;	
ТекстДляОтправки = ТекстДляОтправки + "Content-Type: image/jpeg" + Символы.ПС;

ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки );
ФайлОтправкиНачало.Закрыть(); 
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало); 

МассивФайловДляОбъединения.Добавить(СокрЛП(Объект.ИмяФайла)); 

ТекстДляОтправки = "" + Символы.ПС;
ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary+"--";
ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
ФайлаОтправкиКонец.Закрыть(); 
МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец); 

ИмяФайлаОтправки = "C:\1C_Base\post.txt";
ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);


HTTPЗапрос = Новый HTTPЗапрос;
Заголовки = Новый Соответствие;

HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive"); 
HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary); 

HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);	
HTTPЗапрос.АдресРесурса = СтрокаСоединения; 

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);
HTTPСоединение = Новый HTTPСоединение(Сервер,,,,,, ЗащищенноеСоединение);

Попытка 
ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
Исключение
Сообщить("Ошибка выполенния запроса!");
КонецПопытки;

ДанныеКакСтрока = ОтветHTTP.ПолучитьТелоКакСтроку();
Сообщить("Отчет:");
Сообщить(ДанныеКакСтрока);
...Показать Скрыть
SirStefan; DmitryNPK; CSiER; adhocprog; JohnyDeath; el-gamberro; +6 Ответить 2
22. Александр Шкураев (salexdv) 19.09.15 10:29
(21) FSerg, спасибо! Обязательно попробую
23. Кирилл Ширинский (el-gamberro) 30.09.15 16:34
(21) FSerg, спасибо за разжевывание. :)
Тоже такое попробую.
24. Alexander Masson (mrmasson) 13.10.15 09:00
Идея хороша. решил воспользоватся. Опишу недостатки, которые мешают в полной мере насладиться разработкой:
1. мало документации с Вашей стороны.
2. т.к. код выполняется в безопасном режиме, некоторые вещи невозможно реализовать, например, перезагрузку сервера. Пытаюсь отключить безопасный режим, но...
Ошибка при вызове метода контекста (ЗапуститьПриложение)
Установлен безопасный режим. Выполнение операции запрещено


а так однозначный плюс
25. Александр Шкураев (salexdv) 13.10.15 10:52
(24) mrmasson, спасибо за отзыв!
Да, действительно весь код запускается во внешней обработке, которая создается в безопасном режиме.
Я добавлю в настройки возможность запускать небезопасный режим.
А насчет документации даже и не знаю, что сказать. Я тут постарался максимально просто и доступно объяснить как все работает. Как создавать свои команды для бота написал. Если есть какие-то вопросы, пишите, обязательно отвечу.
26. Александр Шкураев (salexdv) 23.10.15 11:45
(24) mrmasson, добавил возможность запуска кода в небезопасном режиме. Нужно в settings.ini добавить строку
[SafeMode1C]
Enabled=0
27. Евгений Мартыненков (JohnyDeath) 30.10.15 09:27
Я все-таки не понял, почему отдельная программа, а не планировщик или http-сервис в самой 1С? Зачем лишняя прослойка?
28. Александр Шкураев (salexdv) 30.10.15 10:04
(27) JohnyDeath, чтобы получать информацию, когда она действительно нужна. Не будем брать в расчет всякие отказы, когда что-то не работает. В этом случае, конечно, удобнее планировщиком опрашивать какие-то параметры и, в случае возникновения критической ситуации, оповещать об этом.
Telemonitor немного про другое. Например, для обновления конфигурации БД требуется реструктуризация, которую невозможно выполнить с работающими пользователями. Дело к вечеру, а пользователи все работают. С помощью Telegram можно отправить команду боту, пусть будет /MyBase_GetActiveUsers. Когда увидим, что пользователей нет, можно запустить /MyBase_UpdateDB.
Другой пример, хотим увидеть сколько задач выставлено нам в базе, отправляем /MyBase_GetTasks UserID. Или нужно узнать сколько новых заказов ждут обработки, тогда /MyBase_GetNewOrders.
Вариантов возможного использования масса, причем использовать бота может не только админ/программист, а директор, менеджер, бухгалтер и т.д.
Надеюсь теперь идея ясна.
29. Евгений Мартыненков (JohnyDeath) 30.10.15 16:34
(28) salexdv, идею-то я сразу понял. Я не понял почему все это нельзя обрабатывать на стороне 1С, используя, например, http-сервис?
Или, если лень заморачиваться с публикацией сервиса, создать регламентное задание, в котором будет периодически вызываться getUpdates телеграма?

Вы же создаете дополнительную прослойку, которая плюс ко всему имеет закрытый код.
30. Александр Шкураев (salexdv) 02.11.15 09:10
(29) JohnyDeath, программа использует NET.Framework, поэтому посмотреть код, нет никаких проблем.
Http-сервисы, конечно, можно использовать, можно даже и без них обойтись, но тогда придется либо изменять конфигурацию и держать web-сервер, либо постоянно держать открытым сеанс с обработкой, которая будет вызывать getUpdates. Так что в любом случае, как вы говорите "прослойка", какая-никакая, а нужна. Весь вопрос в том, самому её делать, либо взять готовую.
Моё решение позволяет все делать без изменения конфигурации(й) и не писать самому взаимодействие с Telegram API, а сосредоточится только на создании функционала бота.
Как я уже отмечал ранее, программа изначально писалась для собственных нужд, поэтому я никого не призываю пользоваться именно моим "велосипедом", тут каждый волен сделать свой.
31. Денис Харченко (nomadon) 20.11.15 11:39
32. Александр Шкураев (salexdv) 20.11.15 12:50
(31) nomadon, спасибо я оценил уже. Отличная вещь!
33. Maxim Goncharov (maxx) 25.01.16 11:49
Подскажите, а то мало знаю по всякими месенджерам, боты, которые вы создаёте, доступны абсолютно другим пользователям Telegram. То есть я могу найти вашего бота и им воспользоваться злонамеренно?
34. Александр Шкураев (salexdv) 25.01.16 14:40
(33) maxx, если вы знаете имя бота, то сможете его найти и пользоваться
35. Евгений Мартыненков (JohnyDeath) 26.01.16 08:48
(33), (34) но вроде как в боте можно прописать желаемых участников или схему входа (по паролю и т.п.), т.е. при желании левые акки к вам не придут
36. Александр Шкураев (salexdv) 26.01.16 08:58
(35) JohnyDeath, можно команды без пароля не принимать. Да и найти бота не зная его точного имени сложно
37. Владимир Гусев (adhocprog) 12.02.16 15:28
38. Алексей Митин (amitin78) 02.03.16 21:04
Всем Доброго вечера. Подскажите студенту как заполнить файл settings. Всем заранее спасибо.
39. Алексей Митин (amitin78) 02.03.16 21:25
Разобрался.
Просьба подсказать как задать выполнение команды Боту в 1с. Для примера сделать Синхронизацию. Сам так сказать процесс.
40. Алексей Митин (amitin78) 02.03.16 21:36
И само собой как запустить саму 1с перед этим. Буду благодарен за подсказки.
41. Александр Шкураев (salexdv) 03.03.16 08:57
(40) amitin78, 1с запускать не надо. Telemonitor сам создает Com-соединение, когда получает команду. Что именно вам не понятно с командами? Файлы *.tcm - это и есть описание команд. Имя файла - это имя команды. Первая строка в файле - тектовое описание команды, начиная со второй строки - исполняемый в 1С код.
42. Алексей Митин (amitin78) 03.03.16 19:42
salexdv Спасибо с этим разобрался.
После этого возникло большое желание использовать данный момент в разных задачках. Просьба добавить функционал запуска BAT файлов. Поясню: файловая база, есть задачки которые делает робот через запуск BAT файлов по времени. Используя Ваш Телемонитор можно это дело сделать по нажатию команд в Телеграмме. Очень удобно было-бы. Как дополнение к запланированным процессам. Заранее спасибо.
43. Александр Шкураев (salexdv) 03.03.16 21:46
(42) amitin78, так запускаете батники через 1С, и ничего дорабатывать не придется :-)
Напишите в команде
ЗапуститьПриложение(<ПутьКФайлуBat>);
44. Алексей Митин (amitin78) 04.03.16 22:28
(43) salexdv, Фся фишка запускать все по команде удаленно с телефона, планшета, компьютера. Как я с телефона дам команду в 1с? А вот через Ваш Telemonitor должно получиться. Просьба доработать функционал. Благодарных пользователей будет много как поймут плюсы. Спасибо.
45. Александр Шкураев (salexdv) 05.03.16 10:45
(44) amitin78, вы, видимо, не совсем поняли принцип работы. Посмотрите на схему вначале статьи. Вы с телефона в Telegram отдаете команду, а уже Telemonitor выполняет код команды в 1С. Получается вы на смартфоне выбираете команду "ЗапуститьBAT", а на компьютере, где стоит 1С и Telemonitor выполняется код
ЗапуститьПриложение(<ПутьКФайлуBat>);
. Таким образом через 1С запускается батник в системе.
46. Алексей Митин (amitin78) 05.03.16 10:55
Это(45) salexdv, Это конечно да. То есть без 1с вообще не будем никакого действия? А вот скан например тоже средствами 1с сделан? Если тогда моя идея идет немного дальше. Запустить Батник не привлекая 1с. Это не возможно сделать?
47. Алексей Митин (amitin78) 05.03.16 12:26
salexdv как подсказали получилось УРА (ЗапуститьПриложение(<ПутьКФайлуBat>);).

Вопрос: создаю свой файл для команды *.tcm, не сразу подхватывает Телеграмм как команду. Ему время надо для этого, просьба уточнить.
48. Александр Шкураев (salexdv) 05.03.16 14:12
(47) amitin78, все команды считываются только при запуске Telemonitor. На ходу новые команды не подхватываются.
49. Il Il (Il) 16.03.16 07:47
Классный и удобный бот!
есть маленькая хотелки:
- возможно ли в ini файлах баз прописывать каким юзерам телеграмма есть доступ? соответственно у этого юзера будут видны только команды его базы.
- и сделать разрешение/запрет на команды /screen также нужным юзверям?
ЗЫ. можу простимулировать на пивасик, для поднятия боевого тонуса ;)
50. Александр Шкураев (salexdv) 16.03.16 10:14
(49) Il, а почему именно в ini базы данных? Может лучше в глобальных настройках бота?
51. Il Il (Il) 16.03.16 13:20
(50) salexdv, в глобальном ini нет списка баз.
а так к примеру база А иванову, петрову, база Б всем, база С петрову и сидорову...
52. Il Il (Il) 16.03.16 13:30
(50) ну и до кучи (что-то я разошелся ::) передавать в 1с параметром имя юзверя телеги (тоже можно вынести в настройку вкл/выкл)
53. Александр Шкураев (salexdv) 17.03.16 12:30
(51) Il, ограничение по именам пользователей добавил. Описание в секции "Последние изменения".
54. Il Il (Il) 17.03.16 16:44
(53) salexdv, вот спасибо!
скажи куда благодарность можно перевести (тел, ya, visa)?
такие интересные идеи уже мона реализовать с этим функционалом...
55. Александр Шкураев (salexdv) 17.03.16 17:06
(54) Il, спасибо сказали, уже хорошо :-) Я в первую очередь для себя делал программу, а раз ещё кому-то пригодилось - вообще отлично.
vasiliy_b; +1 Ответить
56. Andrey Rozhkov (Andrey_R91) 17.03.16 19:06
Доброго времени суток.
Отписываюсь в данной теме так как она более приближенная к моей задаче.
Для начала опишу конечную цель:
Нужно с определенных чатов удалять/добавлять пользователей, имея их номера телефонов.
Я так понимаю, бот телеграма нам не совсем здесь интересен, по этому нужно использовать именно методы обычного API.

В API есть методы управления чатами. Но не совсем понятно как можно узнать ID добавляемого контакта, зная его телефон?

Может кто сталкивался с подобной ситуацией? Кто-то сталкивался с взаимосвязью 1С - API Telegram ?
Буду благодарен за направления мыслей в нужную сторону :)
57. Александр Шкураев (salexdv) 18.03.16 08:57
(56) Andrey_R91, к сожалению, не встречал такого функционала
58. Евгений Булатов (Dobermann86) 30.03.16 11:35
Кто нибудь подскажет как ботом получить файл(или фото) в 1С и дальше сохранить его на HDD?
59. Александр Шкураев (salexdv) 30.03.16 12:48
(58) Dobermann86,
Чтобы бот вернул файл, например, вы хотите получать какой-нибудь отчет или прайс, то в коде команды необходимо заполнить переменную Результат_Файл.

Сформируйте файл в 1С, сохраните на диск и поместите полное имя файла в переменную Результат_Файл
60. Александр Шкураев (salexdv) 30.03.16 12:49
(58) Dobermann86, вот здесь (6) я показывал, как такое сделать.
61. Алексей (zhurba) 11.04.16 00:42
Оч.полезная штуковина! Спасибо ))

Пожелания :)
a. Было бы очень хорошо запускатьTelemonitor как сервис (!!!)
b. Хорошо бы иметь возможность настраивать "белый" список пользователей для каждой команды;
с. мелочь, но все же - в контекстное меню по иконке в трее добавить "Перезапустить".
62. Алексей (zhurba) 11.04.16 00:45
Вдогонку:

d. Передавать в 1С имя пользователя, который отправил команду.
63. Алексей (zhurba) 11.04.16 23:06
(62) И еще одна "хотелка":

е. Хотелось бы иметь возможность в папку с описанием базы положить файл "nocommand.tcm" и передавать в него сообщения от пользователя без слеша - не команды. Это позволит реализовывать "многоходовые" команды (как в @BotFather и пр.), т.е. сначала бот получает команду, а потом задает пользователю вопрос и ждет от него ответ (команды с параметрами менее юзабильные).
64. Александр Шкураев (salexdv) 12.04.16 08:53
(63) zhurba, спасибо за отзыв и пожелания. У меня была мысль реализовать "диалог" с ботом, но пока, к сожалению, совсем нет на это времени. Программа писалась буквально за 2 дня для решения одной насущной проблемы. Все остальные доработки делаю, когда есть свободное время, а это случается нечасто.
65. Алексей (zhurba) 12.04.16 15:03
Обнаружилась неприятная "фича" :(

В чате случайно задел кнопку с микрофоном. Записанное аудио отправилось боту и тот "повис" - все последующие команды не обрабатываются. То же самое происходит если отправить боту фоточку.

"Полечил" бота отправкой через браузер команды getUpdate со смещением.
Хотел подключить к боту своих юзверей, но увы, придется пользоваться только мне одному...
66. Александр Шкураев (salexdv) 12.04.16 15:48
67. Александр Шкураев (salexdv) 14.04.16 11:31
(65) zhurba, ошибка, приводившая к зависанию, исправлена.
68. Александр Шкураев (salexdv) 15.04.16 10:41
(63) zhurba, добавил поддержку диалоговых команд. Теперь код команды можно описать так, чтобы бот запрашивал дополнительные параметры. Если есть возможность, проверьте и отпишитесь.
69. Sergei Karpushev (brrart) 27.06.16 22:19
Отличная штуковина. Всё просто и понятно. Супер!!!!
70. Владимир Конырев (Vladimir_Konyrev) 25.08.16 14:44
(68) salexdv,
Добрый день, подскажите можно ли организовать чат без установки каких-либо доп. приложений на сервер (все работают в терминале)?
71. Александр Шкураев (salexdv) 25.08.16 14:50
(70) Vladimir_Konyrev, приложение в каком-то смысле для создания чата, но не между людьми. Диалог Человек <-> Бот Telegram - вот назначение программы. Для создания чатов между сотрудниками вам надо найти что-то другое.
72. Сергей Голубкин (Снежный_человек) 06.09.16 14:24
Добрый день! Если включить бота в группу, то он понимает только команду /start. Если общаться с ботом напрямую, то понимает все команды, созданные мной в настройках. Хотелось бы, чтоб в группе он тоже работал. В группе все видят, кто, когда, какие команды боту давал.
73. Александр Шкураев (salexdv) 06.09.16 15:20
(72) Снежный_человек, с группами не работал. Обязательно проверю
74. Сергей Голубкин (Снежный_человек) 06.09.16 15:51
Есть еще вопрос, долго ли ждет бот параметра, когда используется команда с параметрами? Настраивается ли таймаут?
75. Александр Шкураев (salexdv) 06.09.16 16:27
(74) Снежный_человек, таймаута нет, бот будет ожидать бесконечно
76. Сергей Голубкин (Снежный_человек) 07.09.16 10:54
При тестировании в файловом режиме все ок. При тестировании в клиент серверном режиме на той же базе исполняемый код команды (пытаюсь провести документ) вываливается в исключение со следующей ошибкой

Ошибка при вызове метода контекста (Записать)
ЗаявкаОбъект.Записать(РежимЗаписиДокумента.Проведение);
по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ПередЗаписьюЗаявки ()
77. Сергей Голубкин (Снежный_человек) 07.09.16 10:56
Процедура "ПередЗаписьюЗаявки()" находится в общем серверном модуле и на нее ссылается мной добавленная подписка на событие. Первый ее параметр - Источник
78. Сергей Голубкин (Снежный_человек) 07.09.16 10:58
Подозреваю, что то не так у вас в приложении с исполнением кода 1С &НаКлиенте и &НаСервере
79. Сергей Голубкин (Снежный_человек) 07.09.16 11:27
Другими словами, если использовать подписку на событие документа "ПередЗаписью", то при исполнении процедуры этой подписки в общем серверном модуле с использованием параметра "Источник" в клиент серверном варианте не работает. Текст ошибки выше.
80. Александр Шкураев (salexdv) 07.09.16 11:27
(78) Снежный_человек, в описании программы сказано, что весь код выполняется через метод Выполнить(). Всё это работает в режиме внешнего соединения. Проверьте свою конфигурацию на работу в режиме "Внешнее соединение" и "Внешнее соединение (клиент-сервер)". Думаю, проблема как раз в этом.
81. Сергей Голубкин (Снежный_человек) 07.09.16 13:56
Да, все верно. В указанном общем модуле установил галку "Внешнее соединение". Все заработало.
82. Сергей Голубкин (Снежный_человек) 15.09.16 15:25
Добрый день! Поставил нескольким юзверям. Обнаружил проблему зависания приложения телемонитор, причем, если жать на зависший экземпляр правой кнопкой мыши в трэе, то нет появления меню Выход. причем бот реагирует на команду старт, выдает список доступных команд, но на полученную из списка команду никак не реагирует. Лечится убиванием процесса telemonitor в диспетчере задач и перезапуском. До следующего повторения зависания.
83. Сергей Голубкин (Снежный_человек) 15.09.16 15:25
Файл лога ошибок не создается
84. Александр Шкураев (salexdv) 15.09.16 16:00
(83) Снежный_человек, у себя такого поведения не встречал. Что за операционная система?
85. Сергей Голубкин (Снежный_человек) 15.09.16 16:39
Windows 2008 Server. Я, правда, создал каждому юзеру отдельного бота и запускал несколько приложений в одном терминальном сеансе, причем переименовывал файл Telemonitor.exe в ****.exe, , где *** имя пользователя латиницей, чтобы видеть, чья именно копия телемонитора отваливается. Сейчас оставил только одну копию, проверить на предмет конфликта запущеных копий. Пока работает, часа 2
86. Александр Шкураев (salexdv) 15.09.16 17:45
(85) Снежный_человек, на Windows Server никогда не запускал, тем более несколько копий. Надо будет проверить, хотя на первый взгляд я тут никаких проблем не вижу. У меня месяцами работает и всё отлично.
87. Сергей Голубкин (Снежный_человек) 16.09.16 09:42
Я тоже не думаю, что может быть проблема с копиями. Еще наблюдение, что отваливались те копии, где Telegram на Айфоне. Хотя, скорее всего, совпадение. Какая разница, на чем клиент, если телемонитор общается с ботом...
88. Александр Шкураев (salexdv) 16.09.16 09:55
(87) Снежный_человек, нет, тут точно разницы нет т.к. телемонитор работает только с API Telegram. Проверю все варианты, какие смогу.
89. Сергей Голубкин (Снежный_человек) 16.09.16 11:38
Заметил сегодня подвисание тех копий телемонитора, которые за период своей работы вообще не получали ни одной команды от пользователя. Не реагирует на правую кнопку мыши в трэе. После этого пробую дать команду - в ответ тишина. Перезапускаю - работает.
90. Сергей Голубкин (Снежный_человек) 19.09.16 11:24
Добрый день! Все выходные телемонитор работал нормально (только одна копия сейчас запущена). Сегодня при получении первой команды от пользователя выдалась ошибка при выполнении команды.
В лог сегодня записалось сообщение 19.09.2016 12:09:55 - Не удалось выполнить команду "/1C_Utverdit": Адресат вызова создал исключение.
Выдано исключение типа "System.OutOfMemoryException".

Перезапустил телемонитор - все заработало. Использование памяти на серваке на этот помент 78 Гб занято из 98 Гб.
91. Сергей Голубкин (Снежный_человек) 19.09.16 11:31
Уточнение к предыдущему посту: ошибка возникла не при первом получении команды от пользователя. До возникновения ошибки он успешно утверждал заявки в течение минут 10, штук 8 утвердил, потом возникла ошибка.
92. Сергей Голубкин (Снежный_человек) 19.09.16 22:15
Еще более локализовал проблему. После первого запуска телемонитора он в диспетчере задач занимает около 13 мб. После получения команды, в момент создания сеанса с базой 1С он растет в размере занимаемой памяти и потом, по завершении сеанса, ее отпускает, но(!) не до прежнего размера, а занимает больше. И с каждой командой все больше и больше. Особенно это проявляется в командах с параметром. У меня директор утверждает заявки по одной по команде с параметром и каждое следующее выполнение команды увеличивает размер памяти, занимаемый телемонитором. 10-15 заявок подряд - рост с 13 мб до 500 мб. Возможно, рано или поздно памяти не хватит. Возможно, надо очищать память после полного выполнения команды?
93. Александр Шкураев (salexdv) 20.09.16 08:56
(92) Снежный_человек, спасибо за описание. Вы пробовали новую версию, ссылку на которую я отправил вам вчера? В ней, кстати, исправил несколько недочетов по использованию памяти.
94. Сергей Голубкин (Снежный_человек) 20.09.16 10:12
Добрый день! Потестировал, не работает вообще, даже в ответ на /start тишина. Вернул прежнюю версию. Заметил, что в старой версии при запуске телемонитора он сразу занимает примерно 13 Мб памяти и медленно растет, а в новой чуть более 9 и не растет ни сам, ни при команде
95. Александр Шкураев (salexdv) 20.09.16 10:14
(94) Снежный_человек, а какой Interval стоит в Settings.ini?
96. Сергей Голубкин (Снежный_человек) 20.09.16 10:42
Interval=1, что в старом дистрибутиве, что в новом. Я не менял сам
97. Александр Шкураев (salexdv) 20.09.16 10:51
(96) Снежный_человек, в логах что-нибудь есть в новой версии?
98. Сергей Голубкин (Снежный_человек) 20.09.16 10:54
Нет, на команды не реагирует, лог не создает, размер используемой памяти не меняется при получении команды
99. Александр Шкураев (salexdv) 20.09.16 11:10
(98) Снежный_человек, можете скинуть мне Settings.ini без BotToken на почту (отправил в ЛС)?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа