Добрый день,
У меня возникла такая ситуация. есть допустим 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 как следствие.
это называется горе от ума)
используйте forkCDR/resetCDR в зависимости от того что вам надо получить
ну и mixmonstop/mixmon заново.
Можно в экстеншене h использовать переменную DIALEDPEERNUMBER. И из нее уже узнавать ответивший номер.
Задан: 2011-09-12 12:40:44 +0400
Просмотрен: 550 раз
Обновлен: Sep 12 '11
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.