AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Ограничение количества вызовов

Newbies/FAQ Forum 6 сообщений -
#1

Привет! Нужно ограничить количество вызовов на один аппарат до 1. Нашел много инфы по этому поводу и делаю, как там написано, но что то не выходит каменный цветок! Вод код extensions.conf

Код:
[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! Что я делаю не так? Что нужно дописать или исправить?
#2

А если так:

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.
#3

Так работает, причем получилось как раз то что нужно, но все таки почему мой сценарий не рабочий?
#4

pbezpal @ Пн Окт 13, 2014 14:11 писал(а):
Так работает, причем получилось как раз то что нужно, но все таки почему мой сценарий не рабочий?


Возможно, вы оперируете канальной переменной как глобальной.

_________________
С уважением, DarkUser.
#5

DarkUser @ Пн Окт 13, 2014 15:16 писал(а):
Возможно, вы оперируете канальной переменной как глобальной.

А как это выяснить?

Added after 3 hours 26 minutes:

Вроде разобрались совместными усилиями! Теперь никогда не забуду, что надо писать функции в Астериске заглавными буквами
У меня exten=>s,1,Set(Group()=${ARG1})
Надо exten=>s,1,Set(GROUP()=${ARG1})
#6

Ура! Ура! Ура! Все заработал, как я и хотел! Получился такой сценарий

Код:
[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})