Как стать автором
Обновить

Комментарии 7

хорошая задумка, я на прошлой работе подобное оповещение через jabber настраивал.
Не хотите рассказать о своей реализации? Ведь как уже указывалось в данном посте «одну и ту же задачу можно решать по разному»…
Да! Было бы весьма любопытно.
Хорошо, завтра свяжусь с ребятами со старой работы и попрошу выделить мне доступ к конфигам asterisk.
Как и обещал =)

На сколько мне помнится res_jabber в asterisk 10 шел «из коробки».

При настройке в большей степени руководствовался этой статьей.

Выкладываю сразу же конфиги =)

Насйтроки файла jabber.conf:
[general]
debug=no                              ;;Turn on debugging by default.
autoprune=yes                          ;;Auto remove users from buddy list.
autoregister=yes                       ;;Auto register users from buddy list.

[asterisk]                              ;;label
type=client                             ;;Client or Component connection
serverhost=jabber.ru                     ;;Route to server for example,
                                        ;;      talk.google.com
username=asterisk@jabber.ru/мегажабер        ;;Username with optional roster.
secret=****                           ;;Password
port=5222                               ;;Port to use defaults to 5222
;usetls=no                               ;;Use tls or not
;usesasl=no                              ;;Use sasl or not
buddy=xrays72@jabber.ru              ;;Manual addition of buddy to list.
status=online
statusmessage="какой-то статус чтобы значть что астериск живой =)"         ;;Have custom status message for
                                        ;;Asterisk.
timeout=5


Макрос для отправки сообщений в jabber: [вырезка и файла «extensions_custom.conf»]
[macro-jabba]
exten = s,1,Set(acc=_rokky_@jabber.ru)
exten = s,n,Jabberstatus(Asterisk,${acc},STATUS) ;; получаем статус jabber контакта, которому хотим отправить сообщение
exten = s,n,ExecIf($[${STATUS}>5]?Set(acc=xrays72@jabber.ru)) ;; если он офлайн,  
exten = s,n,Jabberstatus(Asterisk,${acc},STATUS) ;; то получаем статус следующего контакта, который почти всегда онлайн
exten = s,n,Set(multiText=${BASE64_DECODE(${ARG2})}) ;; декодируем текст сообщения на случай того если это смс из нескольких сообщений
exten = s,n,Jabbersend(Asterisk,${acc},${ARG1} ${multiText}) ;; наконец-то отправляем сообщение через jabber


Теперь переходим к вызову макроса, у меня за это так же отвечал файл «extensions_custom.conf»:
[dongle-incoming]
; sms
exten = sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten = sms,n,Set(multiText=${SMS_BASE64})
exten = sms,n,Macro(jabba,${DONGLENUMBER} - ${CALLERID(num)},${multiText})
exten = sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENUMBER} - ${CALLERID(num)}: ${multiText}' >> /home/voip/monitor/sms.txt)
exten = sms,n,Hangup()

; ussd
exten = ussd,1,Verbose(Incoming USSD: ${USSD})
exten = ussd,n,Set(multiText=${USSD_BASE64})
exten = ussd,n,Macro(jabba,${DONGLENUMBER},${multiText})
exten = ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENUMBER}: ${multiText}' >> /home/voip/monitor/ussd.txt)
exten = ussd,n,Hangup()  
					
; входящий
exten = s,1,Answer() ; поднимаем трубку при входящем звонке
....
exten = s,n,Macro(jabba,Звонок от ${CALLERID(num)})
...

P.S.
Вся телефония была построена на 3 свистках.
если кому-то интересно, то прикладываю весь конфиг из файла «extensions_custom.conf».
«extensions_custom.conf»
[macro-jabba]
exten = s,1,Set(acc=_rokky_@jabber.ru)
exten = s,n,Jabberstatus(Asterisk,${acc},STATUS)
exten = s,n,ExecIf($[${STATUS}>5]?Set(acc=xrays72@jabber.ru))
exten = s,n,Jabberstatus(Asterisk,${acc},STATUS)
exten = s,n,ExecIf($[${STATUS}>5]?Set(acc=_rokky_@jabber.ru))
exten = s,n,Set(multiText=${BASE64_DECODE(${ARG2})})
exten = s,n,Jabbersend(Asterisk,${acc},${ARG1} ${multiText})
					
[dongle-incoming]
; sms
exten = sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten = sms,n,Set(multiText=${SMS_BASE64})
exten = sms,n,Macro(jabba,${DONGLENUMBER} - ${CALLERID(num)},${multiText})
exten = sms,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENUMBER} - ${CALLERID(num)}: ${multiText}' >> /home/voip/monitor/sms.txt)
exten = sms,n,Hangup()

; ussd
exten = ussd,1,Verbose(Incoming USSD: ${USSD})
exten = ussd,n,Set(multiText=${USSD_BASE64})
exten = ussd,n,Macro(jabba,${DONGLENUMBER},${multiText})
exten = ussd,n,System(echo '${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)} - ${DONGLENUMBER}: ${multiText}' >> /home/voip/monitor/ussd.txt)
exten = ussd,n,Hangup()  
					
; входящий
exten = s,1,Answer() ; поднимаем трубку при входящем звонке
exten = s,n,ExecIf($[${DONGLEPROVIDER}=MTS]?Goto(sh,1))
exten = s,n,Set(CHANNEL(musicclass)=default) ; выбераем класс для музыки на удержании 
exten = s,n,ExecIf($[${DONGLENAME}=dongle0]?Set(idDongle=1):Set(idDongle=0))
exten = s,n,Set(mts=Dongle/dongle${idDongle}/8)
exten = s,n,Set(rokky=91993872**)
exten = s,n,Set(besbka=91299956**)
exten = s,n,Set(xrays=91992215**)
exten = s,n,Set(djjd=9123939***)
exten = s,n,Macro(jabba,Звонок от ${CALLERID(num)})
exten = s,n,WaitExten(1) ; Ждем ввода в течении 1 секунды ( но здесь используем эту функцию для задержки перед приветствием)
exten = s,n,Set(rpath=/home/voip/monitor/) ; путь где хранятся записи
exten = s,n,Set(fname=${STRFTIME(${EPOCH},,${rpath}%Y/%m/%d/%H_%M)}-${CALLERID(num)}) ; название записываемого разговора
exten = s,n,Set(convert=nice -n 19 /usr/bin/lame -b 16  --silent "${fname}.wav"  "${fname}.mp3" && rm -f "${fname}.wav") ; из wav в mp3
exten = s,n,MixMonitor(${fname}.wav,,${convert}) ; включаем запись, после окончания разговора запустится перекодирование
exten = s,n,Background(/var/lib/asterisk/sounds/hello) ; проигрываем приветствие
exten = s,n,Set(CALLERID(all)=${CALLERID(num)})
exten = s,n,Goto(t,1) ; если во время приветствия ничего не нажали, то звонок для Кости (через симку для внутренней связи)
					
exten = t,1,Dial(SIP/100,5,m)
exten = t,n,Dial(${mts}${rokky},50,m) ; если ничего не ввели, то звонок для Кости (дозвон идет 50 с., если нет ответа, то следующий шаг)
exten = t,n,Hangup ; ложим трубку

exten = i,1,Goto(t,1) ; если ввели ошибочный номер для связи с сотрудником, то звонок для Константина

exten = sh,1,Set(xrays=91992215**)
exten = sh,n,ExecIf($[${CALLERID(num):2}=${xrays}]?Goto(11,1):Hangup) 

exten = 11,1,AGI(restart.php) ; рестарт компа
exten = 11,n,Hangup()

exten = 22,1,AGI(restart_eth.php) ; рестарт сетевой карты, нужно после рестарта точки доступа
exten = 22,n,Hangup()

exten = 100,1,Goto(t,1) ; звонок для Кости

exten = 200,1,Dial(SIP/${EXTEN},5,m)
exten = 200,n,Dial(${mts}${besbka},50,m) ; звонок для Алексея
exten = 200,n,Goto(t,1) ; нет ответа, звонок для Кости

exten = 300,1,Dial(SIP/${EXTEN},5,m)
exten = 300,n,Dial(${mts}${xrays},50,m) ; звонок для Филиппа
exten = 300,n,Goto(t,1) ; нет ответа, звонок для Кости

exten = 500,1,Dial(SIP/${EXTEN},5,m)
exten = 500,n,Dial(${mts}${djjd},50,m) ; звонок для Айрата
exten = 500,n,Goto(t,1) ; нет ответа, звонок для Кости

exten = 666,1,Goto(500,1) ; пожелание Айрата

exten = 0,1,Answer()
exten = 0,n,Goto(fax,${EXTEN},1)

[fax]
exten = s,1,Set(FAXFILE=/home/voip/ftp/fax/${STRFTIME(${EPOCH},,%Y%m%d-%H:%M:%S)}-${CALLERID(num)})
exten = s,n,NoOp(new fax: ${FAXFILE})
exten = s,n,receivefax(${FAXFILE}.tif)
exten = s,n,System(test -f ${FAXFILE}.tif && tiff2pdf -o ${FAXFILE}.pdf ${FAXFILE}.tif)
exten = s,n,Hangup()    
					
[sip]
; звонки из sip в sip
exten = _XXX,1,Set(rpath=/home/voip/monitor/) ; путь где хранятся записи
exten = _XXX,n,Set(fname=${STRFTIME(${EPOCH},,${rpath}%Y/%m/%d/sip_inside/%H_%M)}-${CALLERID(num)}-${EXTEN}) ; название записываемого разговора
exten = _XXX,n,Set(convert=nice -n 19 /usr/bin/lame -b 16  --silent "${fname}.wav"  "${fname}.mp3" && rm -f "${fname}.wav") ; из wav в mp3
exten = _XXX,n,MixMonitor(${fname}.wav,,${convert}) ; включаем запись, после окончания разговора запустится перекодирование
exten = _XXX,n,Dial(SIP/${EXTEN},10,tT) ; звоним
;exten = _XXX,n,SayDigits(9876543210)
exten = _XXX,n,Hangup

; звонки из sip на городские номера (пример: набираем в sip 500500)
exten = _XXXXXX,1,Set(rpath=/home/voip/monitor/) ; путь где хранятся записи
exten = _XXXXXX,n,Set(fname=${STRFTIME(${EPOCH},,${rpath}%Y/%m/%d/sip_tmn/%H_%M)}-${CALLERID(num)}-${EXTEN}) ; название записываемого разговора
exten = _XXXXXX,n,Set(convert=nice -n 19 /usr/bin/lame -b 16  --silent "${fname}.wav"  "${fname}.mp3" && rm -f "${fname}.wav") ; из wav в mp3
exten = _XXXXXX,n,MixMonitor(${fname}.wav,,${convert}) ; включаем запись, после окончания разговора запустится перекодирование
exten = _XXXXXX,n,Dial(Dongle/dongle1/${EXTEN},30)  ; звонок через симку для внутренней связи, ожидания ответа 20 секунд
exten = _XXXXXX,n,Hangup

; звонки из sip на номера с кодом города либо мобиьные (пример: набираем в sip 9224500500)
exten = _XXXXXXXXXX,1,Set(rpath=/home/voip/monitor/) ; путь где хранятся записи
exten = _XXXXXXXXXX,n,Set(fname=${STRFTIME(${EPOCH},,${rpath}%Y/%m/%d/sip_all/%H_%M)}-${CALLERID(num)}-${EXTEN}) ; название записываемого разговора
exten = _XXXXXXXXXX,n,Set(convert=nice -n 19 /usr/bin/lame -b 16  --silent "${fname}.wav"  "${fname}.mp3" && rm -f "${fname}.wav") ; из wav в mp3
exten = _XXXXXXXXXX,n,MixMonitor(${fname}.wav,,${convert}) ; включаем запись, после окончания разговора запустится перекодирование
exten = _XXXXXXXXXX,n,Dial(Dongle/dongle1/+7${EXTEN},30) ; звонок через симку для внутренней связи
exten = _XXXXXXXXXX,n,Hangup

; узнаем баланс 
exten = 101,1,DongleSendUSSD(dongle0,*102#)
exten = 101,n,Hangup()

exten = 102,1,DongleSendUSSD(dongle1,*100#)
exten = 102,n,Hangup()

; текущее время
exten = 060,1,PlayBack(welcome)
exten = 060,n,PlayBack(digits/today)
exten = 060,n,SayUnixTime(,,a)
exten = 060,n,SayUnixTime(,,k)
exten = 060,n,PlayBack(hours)
exten = 060,n,SayUnixTime(,,M)
exten = 060,n,PlayBack(minutes)
exten = 060,n,PlayBack(goodbye)
exten = 060,n,Hangup()

; дикт0фон
exten = 98,1,Answer()
exten = 98,n,Record(/tmp/myrecord%d:wav)
exten = 98,n,Wait(1)
exten = 98,n,Playback(${RECORDED_FILE})
exten = 98,n,Wait(1)
exten = 98,n,Hangup()

Зарегистрируйтесь на Хабре, чтобы оставить комментарий