Комментарии 7
хорошая задумка, я на прошлой работе подобное оповещение через jabber настраивал.
Не хотите рассказать о своей реализации? Ведь как уже указывалось в данном посте «одну и ту же задачу можно решать по разному»…
Да! Было бы весьма любопытно.
Хорошо, завтра свяжусь с ребятами со старой работы и попрошу выделить мне доступ к конфигам asterisk.
Как и обещал =)
На сколько мне помнится res_jabber в asterisk 10 шел «из коробки».
При настройке в большей степени руководствовался этой статьей.
Выкладываю сразу же конфиги =)
Насйтроки файла jabber.conf:
Макрос для отправки сообщений в jabber: [вырезка и файла «extensions_custom.conf»]
Теперь переходим к вызову макроса, у меня за это так же отвечал файл «extensions_custom.conf»:
P.S.
Вся телефония была построена на 3 свистках.
На сколько мне помнится 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()
Спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Отправка уведомлений о пропущенных звонках из Asterisk