Уведомления в Jabber

Только для готовых решений! Пожалуйста, не используйте для вопросов и обсуждений!

Модератор: ykolesnikov

Ответить
alex
OTRS Новобранец
Сообщения: 48
Зарегистрирован: 01 ноя 2010, 14:47
Откуда: Воронеж
Контактная информация:

Уведомления в Jabber

Сообщение alex » 24 май 2012, 15:00

Понадобилось сделать такую штуку, чтобы уведомления о новых заявках приходили агентам на jabber, помимо электронной почты.
Сделал, как описано по этой ссылке http://lists.otrs.org/pipermail/dev/200 ... 01400.html с небольшими поправками.
Все, что пришлось сделать для работы jabber - установить модуль Net::Jabber для perl и отредактировать файл /opt/otrs/Kernel/System/Ticket/Article.pm

В jabber приходят сообщения, содержащие номер заявки, тип уведомления и заголовок заявки, например:
[Заявка№2012052410000315] Новая заявка: test
Можно присылать весь текст заявки, указав заменив "body" => $Notification{Subject} на "body" => $Notification{Body} в добавляемом коде.

JabberID в моем случае всегда соответствует email, поэтому проблем с этим нет. В крайнем случае, сделать отдельное поле для JID не представляется особо сложным. По идее, поле просто добавляется в базу и Config.pm (как это делать в документации описано) после чего, его можно использовать в коде.

Также, можно указать тип сообщения type вместо headline, например chat.

Ниже привожу правки, вносимые в файл:

Код: Выделить всё

--- Article.pm.orig	2012-05-24 14:41:48.457272999 +0400
+++ Article.pm	2012-05-24 14:40:40.657272999 +0400
@@ -16,24 +16,32 @@
 use vars qw($VERSION);
 $VERSION = qw($Revision: 1.311 $) [1];
 
+## Jabber
+use Net::Jabber qw(Client) ;
+use Net::Jabber qw(Message) ;   
+use Net::Jabber qw(Protocol) ;
+use Net::Jabber qw(Presence) ;
+
+use vars qw ($connection @result $message);
+
 
 =head1 NAME
 
 Kernel::System::Ticket::Article - sub module of Kernel::System::Ticket
 
 =head1 SYNOPSIS
 
 All article functions.
 
 =head1 PUBLIC INTERFACE
 
 =over 4
@@ -2371,24 +2379,45 @@
     # send notify
     $Self->{SendmailObject}->Send(
         From => $Self->{ConfigObject}->Get('NotificationSenderName') . ' <'
             . $Self->{ConfigObject}->Get('NotificationSenderEmail') . '>',
         To       => $User{UserEmail},
         Subject  => $Notification{Subject},
         MimeType => $Notification{ContentType} || 'text/plain',
         Charset  => $Notification{Charset},
         Body     => $Notification{Body},
         Loop     => 1,
     );
 
+####################
+my $connection = Net::Jabber::Client->new();
+$connection->Connect( "hostname" => "jabber.ru","port" => '5222', "ssl" => "0" );
+my @result = $connection->AuthSend( "username" => "otrs","password" =>"1q2w3e","resource" => "DaemonMonitor", "ssl" => "0" );
+if ($result[0] ne "ok") {
+    $Self->{LogObject}->Log(
+        Priority => 'notice',
+        Message  => "Ident/Auth with server failed: $result[0] - $result[1]\n",
+    );
+}
+my $jid=$User{UserEmail};
+my $message = Net::Jabber::Message->new();
+$message->SetMessage( "to"           => $jid,
+                      "subject"      => "Ticket OTRS Alert",
+                      "type"         => "headline",
+                      "body"         => $Notification{Subject},
+                       "ssl"         => "0");
+$connection->Send($message);
+$connection->Disconnect();
+####################
+
     # write history
     $Self->HistoryAdd(
         TicketID     => $Param{TicketID},
         HistoryType  => 'SendAgentNotification',
         Name         => "\%\%$Param{Type}\%\%$User{UserEmail}",
         CreateUserID => $Param{UserID},
     );
Последний раз редактировалось alex 14 дек 2012, 23:48, всего редактировалось 1 раз.
OTRS::ITSM 5.0.5

andru
OTRS Новобранец
Сообщения: 11
Зарегистрирован: 09 сен 2011, 14:40

Re: Уведомления в Jabber

Сообщение andru » 08 июн 2012, 14:18

Отличное решение, спасибо
Настроил на свой корпоративный jabber сервер
Здесь DynamicFields -> Frontend::Agent::Preferences добавил дополнительное поле для агентов JabberID
и изменил кусок кода так

Код: Выделить всё

+    my $jid=$User{UserDynamicField_JabberID};
+    if ($jid) {
+        my $message = Net::Jabber::Message->new();
+       $message->SetMessage( "to"           => $jid,
+                              "subject"      => "Ticket OTRS Alert",
+                              "type"         => "headline",
+                              "body"         => $Notification{Subject},
+                              "ssl"         => "0");
+       $connection->Send($message);
+    }
+    $connection->Disconnect();
+    ####################
С уважением Андрей,
OTRS 5.0.1 ITSM 5.0.1
Centos 6.7
PostgreSQL 8.4.20

3JIou-TaTaPuH
OTRS Новобранец
Сообщения: 3
Зарегистрирован: 27 сен 2012, 13:22

Re: Уведомления в Jabber

Сообщение 3JIou-TaTaPuH » 01 окт 2012, 12:05

Доброго дня суток! Уважаемый andru и alexus не могли бы вы выложть свои Article.pm пожалуйста.
С уважением go6PbIu-ТaТаРuН

adminfree
OTRS Новобранец
Сообщения: 41
Зарегистрирован: 23 июн 2014, 09:20

Re: Уведомления в Jabber

Сообщение adminfree » 17 июл 2014, 09:37

Подправили для того, чтоб в сообщения джаббера приходила ссылка на тикет для агента.
Мало ли кому пригодится.

Код: Выделить всё


my $connection=new Net::XMPP::Client();
$connection->Connect(hostname=>"jabber.local");
$connection->AuthSend(username=>"user", password=>"pass", resource=>"jabber");
my $message=new Net::XMPP::Message();
$message->SetMessage(to=>"$User{UserLogin}\@jabber.local",
                 from=>"user@jabber.local",
                 subject=>"$Notification{Subject}" ,
                 body=>"http://localhost/otrs/index.pl?Action=AgentTicketZoom;TicketID=$Param{TicketID}"
                 );
    $connection->Send($message);
    $connection->Disconnect();

#FreeBSD 10::OTRS 3.3.7
Debian 7.6:: OTRS 3.3.8

firebolt
OTRS Новобранец
Сообщения: 178
Зарегистрирован: 13 сен 2012, 13:46

Re: Уведомления в Jabber

Сообщение firebolt » 23 дек 2014, 07:01

Кому удалось добиться работы уведомлений в jabber на OTRS версии 4? Отпишитесь, пожалуйста. Киньте конфиг!
Версия OTRS (6.0.10)
Debian 9 Stretch
Версия СУБД (MySQL 5.7.22)

DrainSPb
OTRS Новобранец
Сообщения: 4
Зарегистрирован: 29 янв 2015, 14:05

Re: Уведомления в Jabber

Сообщение DrainSPb » 29 янв 2015, 14:48

День добрый!
Удалось настроить уведомления в Jabber агентов на OTRS 4.0.5 после 2х недель ковыряния в коде и инете (выше описанные методы замечательно работали в 3.х.х версии но напрочь не работали в 4.х.х):
1. Ставим пакет: Jabber-Connection-0.04 и все, что ему потребуется.http://search.cpan.org/~qmacro/Jabber-Connection-0.04/
2. По аналогии с предыдущими решениями правим файл Article.pm
2.1 В начало :

Код: Выделить всё

## Jabber
use Jabber::Connection;
use Jabber::NodeFactory;
use Jabber::NS qw(:all);
2.2 после # send notify и перед # write history:

Код: Выделить всё

 # Connect and Jab message

my $nf = new Jabber::NodeFactory;

my $c = new Jabber::Connection(
  server => 'ServerName',
  log    => 1,
);

$c->connect or die "oops: ".$c->lastError;
$c->register_handler('message', \&message);
$c->auth('JabUser', 'Password', 'JabUser');

my $JID1 = $User{UserLogin};
my $JID = $JID1 . 'JabDomain';
my $m = $nf->newNode('message');
$m->insertTag('body')->data($Notification{Subject}, 'http://OTRS.FQDN/otrs/index.pl?Action=AgentTicketZoom;TicketID=$Param{TicketID}');
$m->attr('to', $JID);
$c->send($m);
$c->send('<presence/>');

#my $iq = $nf->newNode('iq');
#$iq->attr('type', IQ_GET);
#$iq->attr('to', 'localhost');
#$iq->insertTag('query', NS_TIME);
#$c->send($iq);

#$c->process(5);

$c->disconnect;

#sub message {
#  my $node = shift;
#  print "Received --> ", $node->toStr, "\n";
#}
### END Jab message
3. Код слегка модифицирован. В частности добавлена переменная $JID для извлечения логина агента и добавления к нему домена Джаббера.
Часть кода комментирована т.к. функционал не востребован(так понимаю он для приема сообщений, что мне не нужно).

P.S. Может кому поможет не терять много времени как мне.
P.P.S Не являюсь специалистом по Perl и Debian.
OTRS + ITSM 4.0.5
on Debian

kostya
OTRS Новобранец
Сообщения: 1
Зарегистрирован: 10 авг 2017, 12:11

Re: Уведомления в Jabber

Сообщение kostya » 10 авг 2017, 12:38

Добрый день,
Подскажите пожалуйста, у кого нибудь работает уведомление на Jabber в OTRS 5 ?
Пробовал вышеописанные методики, результата ноль

В 5-й версии /opt/otrs/Kernel/System/Ticket/Article.pm переработан, непонятно куда вставлять код для Jabber-а,
нет # send notify вставил перед # write history.
В логах Апача множественные ошибки "Article.pm: subroutine <> redefined at /opt/otrs//Kernel/System/Ticket/Article.pm line xxxx"
"Global symbol requires explicit package name at /opt/otrs//Kernel/System/Ticket/Article.pm line yyyy", где "yyyy" строка добваляемго кода, например "my $jid=$User{UserDynamicField_JabberID};".
При попытке созадть заявку вылетат в "Internal Server Error".
...

Ответить