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

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

удалить закрыть спам изменить тег редактировать

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

Arxangel06 Gravatar Arxangel06
1 4 3

обновил 2014-08-09 17:52:18 +0400

Comments

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

meral ( 2014-08-10 07:03:30 +0400 )редактировать

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

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 ленту новостей

Статистика

Задан: 2014-08-09 17:51:30 +0400

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

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

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

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