First time here? Check out the FAQ!

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

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

0

Доброго времени суток. Один раз уже спрашивал(Эпизод 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 началась эта чехарда. В чем секрет? Что такого изменилось в обработке макросов?

спросил Aug 9 '14

Arxangel06 Gravatar Arxangel06
1 4 3

обновил Aug 9 '14

Comments

что вы не поняли в прошлом вопросе? теперь астериск корректно отрабатывает cdr. вам написали как обойти. других вариантов не напишут.

meral (Aug 10 '14)edit

Будьте первым, кто ответит на этот вопрос!

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: Aug 9 '14

Просмотрен: 209 раз

Обновлен: Aug 09 '14

Похожие вопросы:

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