Имеем диалплан:
Соответсвенно по моей логике получаем:[incoming]
exten => 000123,1,Goto(operators,1,1) ; Клиентский отдел.
[sub-recording]
exten => s,1,StopMixMonitor()
exten => _X,1,Set(CALLER=unknown)
exten => _X,n,GoToIf($[0${CALLERID(num)} = 0]?db)
exten => _X,n,Set(CALLER=${CALLERID(num)})
exten => _X,n(db),GotoIf($[0${DB(rec_a/${CALLERID(num)})} = 01]?record:stop)
exten => _X,n,GotoIf($[0${DB(rec_b/${EXTEN})} = 01]?record:stop)
exten => _X,n(record),MixMonitor(/var/records/${STRFTIME(,,%G/%m/%H_%M_%S)}_${CALLER}_${CALLED}.gsm)
exten => _X,n(stop),Return
[operators]
exten => 1,1,Gosub(sub-recording,${EXTEN},1)
exten => 1,n,Dial(SIP/101&SIP/102&SIP/103,,t)
1) Входящий с екстеншена 000123 переводится на контекст operators
2) Первая функция контекста operators вызывает контекст sub-recording
3) Выполняется функция StopMixMonitor()
4) CALLER=unknown
5) Если CALLERID(num)=0 тогда выполняем приоритет db, если нет - выполняем следующий по приоритету.
6) CALLER=${CALLERID(num)}
7) Предполагаю что задается линия для записи согласно rec_a и переходит к началу записи и последующему возвращению в контекст operators
8) Предполагаю что задается линия для записи согласно rec_b и переходит к началу записи и последующему возвращению в контекст operators
9) Старт записи в указанную папку с указанием параметров имени.
10) Возвращение в контекст operators
11) Вызов клиентов 101\102\103.
По факту диалплан срабатывает и ошибок не выдает. но в папочку(/var/records/) ничего не кладется.
Есть вопросы:
1) {CALLED} - встречается только в функции старта записи и участвует в формировании имени файла, выше нигде не определяется - меня это смущает.
2) Форма записи условий - $[0${DB(rec_a/${CALLERID(num)})} = 01] непонятен символ выделенный красножирным - в описании функции GoToIf и примерах аналогичных не нашел.
3) Впринципе мое понимание логики контектста смушает. Верно ли оно?
4) Ну и ваши рекомендации и видения