Доброго времени суток. Один раз уже спрашивал(Эпизод 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 началась эта чехарда. В чем секрет? Что такого изменилось в обработке макросов?
Задан: 2014-08-09 17:51:30 +0400
Просмотрен: 209 раз
Обновлен: Aug 09 '14
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
что вы не поняли в прошлом вопросе? теперь астериск корректно отрабатывает cdr. вам написали как обойти. других вариантов не напишут.
meral ( 2014-08-10 07:03:30 +0400 )редактировать