| Код: |
| [macro-limit] exten => s,1,Set(Group()=${ARG1}) exten => s,n,Set(Calls=${GROUP_COUNT(${ARG1}@in)}) exten => s,n,GotoIf($[${Calls}>1]?111) exten => s,n,Dial(SIP/${ARG1},20,tT) exten => s,111,Verbose(1, ***Количество вызовов ${Calls} больше лимита) exten => s,n,Set(DIALSTATUS=CHANUNAVAIL) [office] exten => _5.,1,Verbose(1, ***** Вызов абонента ${EXTEN} *****) exten => _5.,n,Macro(limit,${EXTEN}) |
Однако при вызове выдает такой сценарий
| Код: |
| -- Executing [5001@office:1] Verbose("SIP/5000-00000000", "1, ***** Вызов абонента 5001 *****") in new stack ***** Вызов абонента 5001 ***** -- Executing [5001@office:2] Macro("SIP/5000-00000000", "limit,5001") in new stack -- Executing [s@macro-limit:1] Set("SIP/5000-00000000", "Group()=5001") in new stack -- Executing [s@macro-limit:2] Set("SIP/5000-00000000", "Calls=0") in new stack -- Executing [s@macro-limit:3] GotoIf("SIP/5000-00000000", "0?111") in new stack -- Executing [s@macro-limit:4] Dial("SIP/5000-00000000", "SIP/5001,20,tT") in new stack |
Т.е. количество вызовов всегда 0! Что я делаю не так? Что нужно дописать или исправить?
exten=>s,1,NoOp(Инициация локального звонка)
same=>n,ChanIsAvail(SIP/${EXTEN},s)
same=>n,NoOp(Статус: ${AVAILSTATUS})
same=>n,NoOp(SIP/${EXTEN} состояние вызываемого пира: ${DEVICE_STATE(SIP/${EXTEN})})
;
; Памятка:
; Device State - 1 - NOT_INUSE
; Device State - 2 - INUSE
; Device State - 3 - BUSY
; Device State - 4 - INVALID
; Device State - 5 - UNAVAILABLE
; Device State - 6 - RINGING
;----------------------------------------------------------------
;2. На основании полученного статуса выполним нужное действие
;----------------------------------------------------------------
same=>n,GotoIf($["${DEVICE_STATE(SIP/${EXTEN})}" = "NOT_INUSE"]?40)
same=>n,NoOp(Превышен лимит звонков или пир не существует!)
same=>n,Hangup()
;----------------------------------------------------------------
same=>40,NoOp(Начинаем обработку локального звонка.)
;----------------------------------------------------------------
same=>n,Dial(SIP/${ARG1},20,tT)
same=>n,Hangup()
_________________
С уважением, DarkUser.
| pbezpal @ Пн Окт 13, 2014 14:11 писал(а): |
| Так работает, причем получилось как раз то что нужно, но все таки почему мой сценарий не рабочий? |
Возможно, вы оперируете канальной переменной как глобальной.
_________________
С уважением, DarkUser.
| DarkUser @ Пн Окт 13, 2014 15:16 писал(а): |
| Возможно, вы оперируете канальной переменной как глобальной. |
А как это выяснить?
Added after 3 hours 26 minutes:
Вроде разобрались совместными усилиями! Теперь никогда не забуду, что надо писать функции в Астериске заглавными буквами
У меня exten=>s,1,Set(Group()=${ARG1})
Надо exten=>s,1,Set(GROUP()=${ARG1})
| Код: |
| [macro-limit-group] exten=>s,1,Set(GROUP()=${ARG1}) exten=>s,n,Set(CALLS=${GROUP_COUNT(${GROUP()})}) exten=>s,n,GotoIf($[${CALLS}>1]|?inuse) exten=>s,n,Dial(SIP/${ARG1},20,tT) exten=>s,n(inuse),Set(DIALSTATUS=BUSY) [office] exten => _5XXX,1,Macro(limit-group,${EXTEN}) |