VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
Aeooe
Сообщения: 143
Зарегистрирован: 28 авг 2013, 15:49

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

Сообщение 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) Ну и ваши рекомендации и видения
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

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

Сообщение 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)
платный суппорт по мере возможностей
Aeooe
Сообщения: 143
Зарегистрирован: 28 авг 2013, 15:49

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

Сообщение Aeooe »

не работает код...
Может кто поделится рабочим примером контекста для активации записи разговора? помогло бы разобраться
Aeooe
Сообщения: 143
Зарегистрирован: 28 авг 2013, 15:49

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

Сообщение 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)
Aeooe
Сообщения: 143
Зарегистрирован: 28 авг 2013, 15:49

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

Сообщение 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 гудки в запись не попадают
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение 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}, уж найдите!
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH