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

Проблема с CDR

0

Добрый день,

У меня возникла такая ситуация. есть допустим 4 номера, 2 сип и 2 мобильных. Если первый сип не берет некоторое время трубку или он офлайн то звонок поступает на мобильный, если мобильный не берут или он офлайн но звнокок идет на вторую пару сип-мобильный. Реализую это так

exten => XXXXXXXXXX,1,Background(hi)
exten => XXXXXXXXXX,2,WaitExten(1)
exten => XXXXXXXXXX,3,GotoIfTime(20:00-10:00|*|*?voicemail,s,1)
exten => XXXXXXXXXX,4,GotoIfTime(*|sat-sun|*?voicemail,s,1)
exten => XXXXXXXXXX,5,Set(channel=${FILTER(0123456789qwertyuiopasdfghjklzxcvbnm,${CDR(channel)})})
exten => XXXXXXXXXX,6,Set(fname=${EPOCH}-${CHANNEL(channeltype)}-${channel})
exten => XXXXXXXXXX,7,MixMonitor(/home/asteriskftp/${fname}.wav,b)
exten => XXXXXXXXXX,8,Answer()
exten => XXXXXXXXXX,9,Dial(SIP/1101,15,t)
exten => XXXXXXXXXX,10,GotoIf($["${DIALSTATUS}" = "BUSY"]?12:11)
exten => XXXXXXXXXX,11,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?12:12)
exten => XXXXXXXXXX,12,Dial(SIP/AST/050XXXXXXX,15,t)
exten => XXXXXXXXXX,13,GotoIf($["${DIALSTATUS}" = "BUSY"]?15:14)
exten => XXXXXXXXXX,14,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?15:15)
exten => XXXXXXXXXX,15,Dial(SIP/1102,30,t)
exten => XXXXXXXXXX,16,GotoIf($["${DIALSTATUS}" = "BUSY"]?18:17)
exten => XXXXXXXXXX,17,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?18:18)
exten => XXXXXXXXXX,18,Dial(SIP/AST/095XXXXXXX,30,t)
exten => XXXXXXXXXX,19,GotoIf($["${DIALSTATUS}" = "BUSY"]?voicemail,s,1)
exten => XXXXXXXXXX,20,GotoIf($["${DIALSTATUS}" = "NOANSWER"]?voicemail,s,1)
exten => XXXXXXXXXX,21,Hangup()

Проблема заключается в том что если первый абонент не снимает трубку, а второй или дальше... снимает, то файл записи разговора пишется не для того абонента, потому что CDR не меняется. То есть переменная fname по сути формируется уже при звонке абоненту 1101 и дальше как бы оно не прыгало по диалплану она такой и остается, а мне необходимо что бы для всех (4х в данном случае) абонентов были разные CDR (ну или EPOCH) ну и fname как следствие.

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

спросил 2011-09-12 12:40:44 +0400

godlike Gravatar godlike flag of Ukraine
814 91 20 54

2 Ответа

1

это называется горе от ума)

используйте forkCDR/resetCDR в зависимости от того что вам надо получить

ну и mixmonstop/mixmon заново.

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

ответил 2011-09-12 13:22:20 +0400

meral Gravatar meral flag of Ukraine
21228 23 18 169
http://pro-sip.net/

обновил 2011-09-12 13:23:20 +0400

Comments

а если я перед каждым вызовом диала буду вставлять exten => XXXXXXXXXX,5,Set(channel=${FILTER(0123456789qwertyuiopasdfghjklzxcvbnm,${CDR(channel)})}) exten => XXXXXXXXXX,6,Set(fname=${EPOCH}-${CHANNEL(channeltype)}-${channel}) эти две строки, это переопределит переменные? godlike ( 2011-09-12 15:15:00 +0400 )редактировать
а если я перед каждым вызовом диала буду вставлять exten => XXXXXXXXXX,5,Set(channel=${FILTER(0123456789qwertyuiopasdfghjklzxcvbnm,${CDR(channel)})}) exten => XXXXXXXXXX,6,Set(fname=${EPOCH}-${CHANNEL(channeltype)}-${channel}) эти две строки, это переопределит переменные? godlike ( 2011-09-12 15:15:01 +0400 )редактировать
или не ${CDR(channel)} а ${CDR(dstchannel)} godlike ( 2011-09-12 15:15:29 +0400 )редактировать
можно. но вам все равно надо делать mixmonStop/mixmon. ибо он же не подхватит новые переменные. рекомендую макрос написть. кстати у вас странные проверки. они в любом случае идут дальше. а в чем смлыс?)) meral ( 2011-09-12 15:27:19 +0400 )редактировать
ну типа если занято то прыгать в следующий диал, а если чета другое то проверить не ноуансввер ли :) Как то написал да и работает вроде godlike ( 2011-09-12 15:34:56 +0400 )редактировать
ну как оно у вас работает если у вас по ноуансвер прыжок на одно и то же вне зависимости от условия?) meral ( 2011-09-12 22:00:23 +0400 )редактировать
на прыжки еще раз посмотрю) а по поводу темы, спасибо, помогло. :) godlike ( 2011-09-13 14:48:47 +0400 )редактировать
да че там смотреть . у вас стоит прыгать на 15 ИЛИ ОПА!! на другую? 15. где логика? meral ( 2011-09-13 19:53:35 +0400 )редактировать
0

Можно в экстеншене h использовать переменную DIALEDPEERNUMBER. И из нее уже узнавать ответивший номер.

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

ответил 2011-09-12 13:42:58 +0400

samael28 Gravatar samael28
211 2 6
http://odicom.com.ua/

Comments

угу. и как это ему поможет поменять имя файла записи? вы прочитали до конца? meral ( 2011-09-12 13:54:17 +0400 )редактировать
В том же h и менять. Я до конца дочитал. samael28 ( 2011-09-12 16:11:09 +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 ленту новостей

Статистика

Задан: 2011-09-12 12:40:44 +0400

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

Обновлен: Sep 12 '11

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