Страница 1 из 1

Запись разговоров - помогите разобраться с dialplan'ом

Добавлено: 11 дек 2013, 11:13
Aeooe
Пользуюсь вот этой инструкцией. Но не могу довести до результата.
Имеем диалплан:
[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) Ну и ваши рекомендации и видения

Re: Запись разговоров - помогите разобраться с dialplan'ом

Добавлено: 11 дек 2013, 13:27
awsswa
символа 0 там точно не должно быть

вообще в идеале вот так

exten => _X,n(db),GotoIf($["${DB(rec_a/${CALLERID(num)})}" = "01"]?record:stop)

посмотреть что там есть

exten => _X,n,NoOp(== ${DB(rec_a/${CALLERID(num)})} ==)
exten => _X,n(db),GotoIf($["${DB(rec_a/${CALLERID(num)})}" = "01"]?record:stop)

Re: Запись разговоров - помогите разобраться с dialplan'ом

Добавлено: 11 дек 2013, 15:05
Aeooe
не работает код...
Может кто поделится рабочим примером контекста для активации записи разговора? помогло бы разобраться

Re: Запись разговоров - помогите разобраться с dialplan'ом

Добавлено: 11 дек 2013, 15:22
Aeooe
Работает вот так:
[support]
exten => 2,1,Set(filename=${STRFTIME(${EPOCH},,%Y.%m.%d_%H:%M)}-${CALLERID(number)}-${EXTEN})
exten => 2,n,MixMonitor(/var/records/${filename}.wav)
exten => 2,n,Dial(SIP/100,20,t)
А хочется что бы работало вот так:
[sub-recording]

exten => s,1,Set(filename=${STRFTIME(${EPOCH},,%Y.%m.%d_%H:%M)}-${CALLERID(number)}-${EXTEN})
exten => _X.,1,MixMonitor(/var/records/${filename}.wav)
exten => _X.,n,Return

[operators]
exten => s,1,Gosub(sub-recording,${EXTEN},1)
exten => 1,1,Dial(SIP/101&SIP/102&SIP/103,,t)

Re: Запись разговоров - помогите разобраться с dialplan'ом

Добавлено: 11 дек 2013, 15:32
Aeooe
Так заработало:
[sub-recording]

exten => 1,1,Set(filename=${STRFTIME(${EPOCH},,%Y.%m.%d_%H:%M)}-${CALLERID(number)}-${EXTEN})
exten => 1,n,MixMonitor(/var/records/${filename}.wav)
exten => 1,n,Return


[operators]
exten => 1,1,Gosub(sub-recording,${EXTEN},1)
exten => 1,n,Dial(SIP/101&SIP/102&SIP/103,,t)
Но как и ожидалось ${EXTEN}=1

Хотелось бы реальный внутренний номер ответившего оператора

PS гудки в запись не попадают

Re: Запись разговоров - помогите разобраться с dialplan'ом

Добавлено: 11 дек 2013, 16:41
ded
У Вас сначала выполняется
Set(filename=${STRFTIME(${EPOCH},,%Y.%m.%d_%H:%M)}-${CALLERID(number)}-${EXTEN})
и только потом идёт групповой вызов
Dial(SIP/101&SIP/102&SIP/103,,t)

то есть имя файла сформировано, но мы ещё не знаем кто из 101 102 103 снимет трубку. Нам надо заглянуть в будущее, узнать кто из них ответил, вернуться на первый шаг и подставить его в имя файла?
Я предложу писать в /tmp/${tmp}
а потом после Нangup =- переименовывать. Кто ответил - это переменная, не ${EXTEN}, уж найдите!