Jabber
Материал из Xgu.ru
Содержание |
[править] История Jabber
История XMPP, ejabberd и Erlang в графическом представлении[1]:
[править] SRV-записи
Аналогом MX-записи для Jabber является специальная запись SRV. В этой записи указываются не только имена серверов, но и порты для обращения к ним.
Пример SRV-записей для Jabber (сервер jabber.example.com; домен example.com):
_jabber._tcp.example.com. IN SRV 0 0 5269 jabber.example.com. _xmpp-server._tcp.example.com. IN SRV 0 0 5269 jabber.example.com. _xmpp-client._tcp.example.com. IN SRV 0 0 5222 jabber.example.com.
SRV записи нужны в случае, если вы хотите получить имена пользователей Jabber ID (JID), совпадающими с e-mail. Также, это нужно, чтобы не прописывать вручную имя сервера в джаббер-клиентах.
Генератор записей: [1].
Проверить SRV запись:
dig -t SRV _xmpp-server._tcp.jabber.ru dig -t SRV _xmpp-client._tcp.jabber.ru
[править] Использование jabber в системном администрировании
[править] Модификация sendxmpp для отправки сообщений типа 'chat'
Многие jabber-клиенты (в частности freetalk) не хотят показывать сообщения типа message, которые sendxmpp отправляет по умолчанию. Если исправить тип сообщений на chat, всё работает хорошо.
Исправление необходимо сделать в функции:
<perl/>
sub xmpp_send_message ($$$$$$) {
my ($cnx,$rcpt,$comp,$subject,$headline,$msg) = @_;
my $type = 'message'; if ($headline) { $type='headline'; } # for some reason, MessageSend does not return anything $cnx->MessageSend('to' => $rcpt . ( $comp ? "\@$comp" : ), 'type' => $type, 'subject' => $subject, 'body' => $msg); xmpp_check_result('MessageSend',0,$cnx);
}
Нужно заменить строку
my $type = 'message';
на
my $type = 'chat';
Если номер строки известен, замена выполняется просто:
sudo sed -i '370 s/message/chat/' /usr/bin/sendxmpp
Если неизвестен, его можно определить так:
cat -n /usr/bin/sendxmpp | grep my.*type.*message
[править] Массовая рассылка указаний
Можно организовать рассылку оперативных инструкций техническому персоналу с помощью jabber'а.
%# cat <<LETTER | for i in admin1 admin2 admin3; do sendxmpp ${i}; done Привет! Сейчас будем гасить центральную серверную Приготовьтесь отвечать на телефонные звонки Вообще мы всех предупреждали, но сами знаете, почту никто не читает. Сейчас будут звонить Ну всё, я нажимаю shutdown -h now через 300 секунд Обратный отсчёт пошёл LETTER
Здесь вместо имён admin1, admin2, admin3 должны стоять настоящие jid.
[править] Уведомления monit
check device DiskRoot with path /dev/sda5 if space usage > 95% then exec '/usr/local/bin/sendxmpp-disk-alert.sh'
sendxmpp-disk-alert.sh
#!/bin/sh -e /bin/echo 'Маловато будет' | HOME=/root /usr/bin/sendxmpp user@jabber.aaaaa.com.ua
[править] Модификация sendxmpp для поддержки SRV
А точнее не самого sendxmpp, а библиотек, которые он использует.
Сначала установить модуль Net::DNS::Resolver для Perl:
%$ apt-get install libnet-dns-perl
В файле /usr/share/perl5/Net/XMPP/Connection.pm после 143 строки добавить:
srv => '_xmpp-client._tcp', to => $self->{SERVER}->{hostname},
Источник: [2].
[править] Оповещение в джаббер при звонке через астериск
При поступлении звонка на определённый номер астериск:
exten => 202,n,System(echo Zvonochki v studiyu: " ${STRFTIME(${EPOCH},,%d/\%m/\%Y-%H:%M:%S)} - ${CALLERID(all)} - ${CHANNEL} " | sendxmpp -f /var/lib/asterisk/.sendxmpprc server@unix.nt)
Мы можем сделать более масштабное решение:
например, мы хотим, чтобы при поступлении звонка
на номер 2XX, в соответствующий джаббер отправлялось сообщение.
Для этого будем использовать макрос и небольшой скрипт.
Макроконтекст в диалплане:
[macro-jabblog] exten => _2XX,n,Set(ENV(CALLERID)=${CALLERID(all)}) exten => _2XX,n,System(/usr/local/bin/jabblog ${EXTEN}) exten => s,n,Dial(SIP/${ARG1})
Использование этого макроконтекста:
exten => _2XX,1,Macro(jabblog,${EXTEN})
Скрипт /usr/local/bin/jabblog:
#!/bin/sh JABBTABLE=/etc/asterisk/jabbtable jid="`grep "^$1 " $JABBTABLE | awk '{print $2}'`" [ -z "$jid" ] || echo ${CALLERID} is calling | sendxmpp -f /var/lib/asterisk/.sendxmpprc "$jid"
Таблица соответствия:
201 igor@example.com 203 romchiko@example.com 221 gib@example.com
[править] Дополнительная информация
- http://sendxmpp.platon.sk/ (англ.)
- Рассылка уведомлений с помощью sendxmpp (рус.)
- Переход с ICQ на Jabber (сервер jabberworld.info)
- Jabber/XMPP Server List
- Jabber SRV record generator
[править] Примечания
- ↑ Источник: http://www.ejabberd.im/birthday-7