Сделал, как описано по этой ссылке http://lists.otrs.org/pipermail/dev/200 ... 01400.html с небольшими поправками.
Все, что пришлось сделать для работы jabber - установить модуль Net::Jabber для perl и отредактировать файл /opt/otrs/Kernel/System/Ticket/Article.pm
В jabber приходят сообщения, содержащие номер заявки, тип уведомления и заголовок заявки, например:
Можно присылать весь текст заявки, указав заменив "body" => $Notification{Subject} на "body" => $Notification{Body} в добавляемом коде.[Заявка№2012052410000315] Новая заявка: test
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},
);