Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2014-08-09 17:51:30 +0400

Arxangel06 Gravatar Arxangel06

Записи в CDR, эпизод 2

Доброго времени суток. Один раз уже спрашивал(Эпизод 1), решение не нашлось. Зато теперь есть еще куча новых вводных. Итак имеем: Обработка входящего звонка:

; Вызываем абонента
exten => [13]XX,100,Dial(SIP/${EXTEN},30,tTm(${EXTEN})M(callid^${CALLERID(all)}^${CALLERID(num)}^${EXTEN}))
exten => _[13]XX,101,Set(CDR(dialstatus)=${DIALSTATUS})
exten => _[13]XX,102,Set(CDR(from_ext)=${CALLERID(num)})
exten => _[13]XX,103,Set(CDR(to_ext)=${EXTEN})
exten => _[13]XX,104,Set(to_ext=${EXTEN})
exten => _[13]XX,105,GoTo(sL-${DIALSTATUS},1)

Как видно, в конце выполняется переадресация на на другой экстеншн. Экстеншн для статуса Busy:

exten => sL-BUSY,1,PlayBack(/usr/local/share/asterisk/sounds/menu/hello812)
exten => sL-BUSY,n,Macro(tovoice,${to_ext})

И снова все вроде бы просто, на втором шаге выполняется макрос. Приведу начало и финал макроса, т.к. именно здесь кроется тайна:

[macro-tovoice]
; ${ARG1} - to
; Проверяем, включена ли условная переадресация
exten => s,1,TrySystem(/usr/local/share/asterisk/fexists.sh /usr/local/share/asterisk/sounds/busyforward/today/${ARG1})
exten => s,n,GotoIf($["${SYSTEMSTATUS}" = "SUCCESS"]?fw_today_on)
exten => s,n,TrySystem(/usr/local/share/asterisk/fexists.sh /usr/local/share/asterisk/sounds/busyforward/always/${ARG1})
exten => s,n,GotoIf($["${SYSTEMSTATUS}" = "SUCCESS"]?fw_always_on)
exten => s,n,Goto(fw_off)

и финал

; Условная переадресация выключена, предлагаем оставить сообщение
exten => s,n(fw_off),Macro(voicemail,${ARG1})
exten => s,n,Hangup

Таким образом, в финале мы попадаем в другой макрос, его приведу полностью:

[macro-voicemail]
; ${ARG1} - to
exten => s,1,Playback(/usr/local/share/asterisk/sounds/menu/hello821)
exten => s,n,Read(digito,,1,,,10)
exten => s,n,GoToIf($["${digito}" = "9"]?tovoice)
exten => s,n,Hangup
exten => s,n,MacroExit
exten => s,n(tovoice),VoiceMail(${ARG1})
exten => s,n,Hangup

Если второй макрос выполняется полностью, то в таблицу CDR в mysql падает очень замечательная запись о том, кто, куда когда звонил. Но если звонящий не дождется окончания выполнения первой команды во втором макросе, то в таблицу вместо адресата упадет sL-BUSY. Что любопытно, в asterisk 1.6 это работало без единого сбоя на протяжении 3 лет, после переезда на asterisk 11 началась эта чехарда. В чем секрет? Что такого изменилось в обработке макросов?

Записи в CDR, эпизод 2

Доброго времени суток. Один раз уже спрашивал(Эпизод 1), решение не нашлось. Зато теперь есть еще куча новых вводных. Итак имеем: Обработка имеем обработку входящего звонка:

; Вызываем абонента
exten => [13]XX,100,Dial(SIP/${EXTEN},30,tTm(${EXTEN})M(callid^${CALLERID(all)}^${CALLERID(num)}^${EXTEN}))
exten => _[13]XX,101,Set(CDR(dialstatus)=${DIALSTATUS})
exten => _[13]XX,102,Set(CDR(from_ext)=${CALLERID(num)})
exten => _[13]XX,103,Set(CDR(to_ext)=${EXTEN})
exten => _[13]XX,104,Set(to_ext=${EXTEN})
exten => _[13]XX,105,GoTo(sL-${DIALSTATUS},1)

Как видно, в конце выполняется переадресация на на другой экстеншн. Экстеншн для статуса Busy:

exten => sL-BUSY,1,PlayBack(/usr/local/share/asterisk/sounds/menu/hello812)
exten => sL-BUSY,n,Macro(tovoice,${to_ext})

И снова все вроде бы просто, на втором шаге выполняется макрос. Приведу начало и финал макроса, т.к. именно здесь кроется тайна:

[macro-tovoice]
; ${ARG1} - to
; Проверяем, включена ли условная переадресация
exten => s,1,TrySystem(/usr/local/share/asterisk/fexists.sh /usr/local/share/asterisk/sounds/busyforward/today/${ARG1})
exten => s,n,GotoIf($["${SYSTEMSTATUS}" = "SUCCESS"]?fw_today_on)
exten => s,n,TrySystem(/usr/local/share/asterisk/fexists.sh /usr/local/share/asterisk/sounds/busyforward/always/${ARG1})
exten => s,n,GotoIf($["${SYSTEMSTATUS}" = "SUCCESS"]?fw_always_on)
exten => s,n,Goto(fw_off)

и финал

; Условная переадресация выключена, предлагаем оставить сообщение
exten => s,n(fw_off),Macro(voicemail,${ARG1})
exten => s,n,Hangup

Таким образом, в финале мы попадаем в другой макрос, его приведу полностью:

[macro-voicemail]
; ${ARG1} - to
exten => s,1,Playback(/usr/local/share/asterisk/sounds/menu/hello821)
exten => s,n,Read(digito,,1,,,10)
exten => s,n,GoToIf($["${digito}" = "9"]?tovoice)
exten => s,n,Hangup
exten => s,n,MacroExit
exten => s,n(tovoice),VoiceMail(${ARG1})
exten => s,n,Hangup

Если второй макрос выполняется полностью, то в таблицу CDR в mysql падает очень замечательная запись о том, кто, куда когда звонил. Но если звонящий не дождется окончания выполнения первой команды во втором макросе, то в таблицу вместо адресата упадет sL-BUSY. Что любопытно, в asterisk 1.6 это работало без единого сбоя на протяжении 3 лет, после переезда на asterisk 11 началась эта чехарда. В чем секрет? Что такого изменилось в обработке макросов?

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.