Пишем Jabber-бот


В статье рассмотрен один из способов создания механизма рассылки оповещений посредством 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»);  // адресат
       
Если ТипЗнч(Текст) = Тип(«СписокЗначений») тогда
            Для каждого
тмп из Текст Цикл
               
т.ДобавитьСтроку(тмп);
            КонецЦикла;
        Иначе
           
т.ДобавитьСтроку(Строка(Адресат) + «, » + Текст);
        КонецЕсли;

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

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

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

Попытка

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

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

7 Comments

  1. klel

    Прикольная штучка спамить наверно можно?

    Reply
  2. Dimasik2007

    Ну в пределах контакт-листа робота можно. 🙂

    Reply
  3. EvgeniuXP

    выкладывал файлы на диск C:Jabber, но файлы не берутся почему-то ботом, в итоге — не работает ничего… подключение происходит, судя по коду VS2010, исключение не вызывается…. сообщение первое выводит SEND to адрес джаб-сервера и всё… так одна строка и висит… пробовал джаббер, миранду и 1С на одном компе

    Reply
  4. EvgeniuXP

    файлы создавал txt, первую строку имя_пользователя@адрес джаббера, вторая строка — текст… и другие выкладывал файлы, типа имя_пользователя@имя.домена — файлы не берутся и не удаляются и ничего не отправляется… бот в миранде должен быть в онлайне? — у меня он в онлайн не выходил… но и ошибки при подключении не было в VS2013.

    Reply
  5. EvgeniuXP

    c Openfir-ом не дружит…

    Reply
  6. Dimasik2007

    Прекрасно работает с версией Openfire 3.8.2, года три уже как. Правда, OF не обновлял, может на новых и не работает.

    Бот всегда должен быть в онлайне. За счет этого осуществляется быстрая отправка множества сообщений адресатам.

    Reply
  7. EvgeniuXP

    (8) не получается его завести… уже изучил питон (xmpp) и написал почти уже свой бот на нем — коннект, прием от бота (pywin32) и отправка уже получилась (и тоже через службу залепил).

    Reply

Leave a Comment

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