gifts2017

Пишем Jabber-бот

Опубликовал Dmitry Dmitry (Dimasik2007) в раздел Программирование - Практика программирования

В статье рассмотрен один из способов создания механизма рассылки оповещений посредством Jabber-уведомлений.

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

Проект, который Вы можете скачать во вложении (Visual Studio 2010), основан на библиотеке agsXMPP — программной библиотеке, с помощью которой можно реализовать как клиентскую, так и серверную часть XMPP. В настоящий момент agsXMPP считается устаревшей и ей на смену была разработана MatriX. Но она в отличие от agsXMPP распространяется только на коммерческих условиях.Двойная лицензия позволяет использовать её в проектах с закрытым исходным кодом.

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

 

Обратите внимание, логин-пароль jabber-бота и другие параметры подключения прописаны в коде приложения - опять же, в рамках моих нужд.

Настройка путей

В коде прописан путь C:\jabber, в который программа должна иметь права на чтение и удаление файлов. 

Для пользователей эта папка прописывается как сетевая (возможно скрытой, через $), с доступом на создание файлов.

 

Формат файла

Текстовый файл, расширение .txt, текст в UTF-8

1-я строка: адресат в jabber (пример: admin@jabber.ru)

2-я строка и последующие: текст сообщения.

 

Пример использования


//Адресат - спр. "Пользователи"

Процедура УведомлениеВЧат(Адресат, Текст) Экспорт
    попытка
       
т = новый ТекстовыйДокумент;
       
// внимание, нижеследующий блок нужно заменить на свой
        // для переданного пользователя нужно получить логин
        // например, свойство пользователя
        jabber  ПолучитьJabberАдрес(Адресат);


       
т.ДобавитьСтроку(jabber + "@192.168.0.3");  // адресат
       
Если ТипЗнч(Текст) = Тип("СписокЗначений") тогда
            Для каждого
тмп из Текст Цикл
               
т.ДобавитьСтроку(тмп);
            КонецЦикла;
        Иначе
           
т.ДобавитьСтроку(Строка(Адресат) + ", " + Текст);
        КонецЕсли;

       
т.Вывод = истина;
        // также не забудьте правильно указать каталог
        т.Записать("\\SERVER\JABBER\"+Строка(новый УникальныйИдентификатор()) + ".txt", КодировкаТекста.UTF8);

    исключение
       
// обработка нехватки прав на файловый вывод и т.п.
   
конецПопытки;
КонецПроцедуры

Использование в коде в исключениях:

Попытка

    ... куча кода ...
Исключение
   
// сразу узнаем!!!
   
_СистемныеОповещения.УведомлениеВЧат(Справочники.Пользователи.НайтиПоНаименованию("Админ"), ОписаниеОшибки());
КонецПопытки

Одно из удобных применений - это использование в длительных регламентных заданиях, когда хочется узнать статус текущего процесса. Для этого необходимо в код разместить периодический вызов jabber-оповещения, например: "Перепровожу УУУ док. из ХХХ". Также, т.к. программа вынесена из 1С, ее возможно использовать в других приложениях, способных сформировать текстовый файл в указанном формате.



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

Наименование Файл Версия Размер Кол. Скачив.
ServerJabberBot.zip
.zip 601,61Kb
20.03.12
38
.zip 601,61Kb 38 Скачать

См. также

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

Комментарии

1. Dimon (klel) 23.03.12 21:34
Прикольная штучка спамить наверно можно?
2. Dmitry Dmitry (Dimasik2007) 23.03.12 22:38
Ну в пределах контакт-листа робота можно. :)
5. EvgeniuXP EvgeniuXP (EvgeniuXP) 17.02.15 19:19
выкладывал файлы на диск C:\Jabber, но файлы не берутся почему-то ботом, в итоге - не работает ничего... подключение происходит, судя по коду VS2010, исключение не вызывается.... сообщение первое выводит SEND to адрес джаб-сервера и всё... так одна строка и висит... пробовал джаббер, миранду и 1С на одном компе
6. EvgeniuXP EvgeniuXP (EvgeniuXP) 17.02.15 19:22
файлы создавал txt, первую строку имя_пользователя@адрес джаббера, вторая строка - текст... и другие выкладывал файлы, типа имя_пользователя@имя.домена - файлы не берутся и не удаляются и ничего не отправляется... бот в миранде должен быть в онлайне? - у меня он в онлайн не выходил... но и ошибки при подключении не было в VS2013.
7. EvgeniuXP EvgeniuXP (EvgeniuXP) 20.02.15 19:24
8. Dmitry Dmitry (Dimasik2007) 20.02.15 23:08
Прекрасно работает с версией Openfire 3.8.2, года три уже как. Правда, OF не обновлял, может на новых и не работает.
Бот всегда должен быть в онлайне. За счет этого осуществляется быстрая отправка множества сообщений адресатам.
Прикрепленные файлы:
9. EvgeniuXP EvgeniuXP (EvgeniuXP) 24.02.15 22:46
(8) не получается его завести... уже изучил питон (xmpp) и написал почти уже свой бот на нем - коннект, прием от бота (pywin32) и отправка уже получилась (и тоже через службу залепил).
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа