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

Запись разговоров.

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

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

Ответить
souljapanic
Сообщения: 10
Зарегистрирован: 01 фев 2014, 06:30

Запись разговоров.

Сообщение souljapanic »

Есть такой контекст:

exten => _X.,1,NoOp(Incoming_to_test);
exten => _X.,n,Set(TIMEOUT(digit)=3);
exten => _X.,n,Set(TIMEOUT(response)=3);
exten => _X.,n,Set(CDR(accountcode)="test");
exten => _X.,n,Set(CHANNEL(language)=ivr_test);
exten => _X.,n,SetMusicOnHold(test);
exten => _X.,n,Set(dir=/mnt/nfs/);
exten => _X.,n,Set(newdir=${STRFTIME(${EPOCH},,%Y%m%d)});
exten => _X.,n,Set(savedir=${dir}${newdir});
exten => _X.,n,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_8${CALLERID(num)});
exten => _X.,n,GotoIf($["${CALLERID(num)}" = "3822900070"]?test);
exten => _X.,n,NoOp(${dir});
exten => _X.,n,NoOp(${newdir});
exten => _X.,n,NoOp(${savedir});
exten => _X.,n,NoOp(${fname});
exten => _X.,n,NoOp(${CALLERID(num)});
exten => _X.,n,system(mkdir ${dir}${newdir});
exten => _X.,n,Answer;
exten => _X.,n,Playback(privet);
exten => _X.,n,WaitExten(0.1);
exten => _X.,n,MixMonitor(${savedir}/${fname}.wav,b);
exten => _X.,n,Dial(SIP/1001&SIP/1002&SIP/1003&SIP/1004&SIP/1005,15,tTgm);
exten => _X.,n,NoOp(Line_DIALSTATUS=${DIALSTATUS});
exten => _X.,n,GotoIf($[${DIALSTATUS}=NOANSWER]?noans);
exten => _X.,n,Hangup(16);
exten => _X.,n(noans),MixMonitor(${savedir}/${fname}.wav,b);
exten => _X.,n,Dial(SIP/1001&SIP/1002&SIP/1003&SIP/1004&SIP/1005&SIP/1006,45,tTgm);
exten => _X.,n,NoOp(Line_DIALSTATUS=${DIALSTATUS});
exten => _X.,n,Hangup(16);

Когда вызов попадает в этот контекст, происходит звонок сразу на несколько внутренних номеров и происходит запись разговоров. В имени файла в который пишется разговор нет внутреннего номера на котором ответили на звонок.

Как узнать на какой внутренний ответили, может есть какая-та переменная?

Нужно чтобы в имени файла записанного разговора был ещё и внутренний номер, переименовать файл смогу потом в exten h или как-то ещё, мне вот главное узнать, на какой внутренний ответили.

Или может запись разговоров в таком случае можно как-то через макросы сделать?

Может меня кто-то направить в правильную сторону?
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Запись разговоров.

Сообщение ded »

У Вас сначала формируется имя файла записи разговора
exten => _X.,n,Set(fname=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_8${CALLERID(num)});
потом передаётся это имя для записи в MixMonitor
exten => _X.,n,MixMonitor(${savedir}/${fname}.wav,b);
в этот момент мы ещё не знаем кто возьмёт трубку!
Вот только тут дальше начинают звонить телефоны
exten => _X.,n,Dial(SIP/1001&SIP/1002&SIP/1003&SIP/1004&SIP/1005,15,tTgm);

Самое правильное - по завершении разговора вызывать запись через макрос, например

Код: Выделить всё

[macro-record-enable]
exten => s,1,GotoIf($["${BLINDTRANSFER}" = ""]?check)
exten => s,n,ResetCDR(w)
exten => s,n,StopMixMonitor()
exten => s,n(check),ExecIf($["${ARG1}"=""]?MacroExit())
exten => s,n,GotoIf($["${ARG2}"="Group"]?Group:OUT)
exten => s,n(Group),Set(LOOPCNT=${FIELDQTY(ARG1,-)})
exten => s,n,Set(ITER=1)
exten => s,n(begin),GotoIf($["${CUT(DB(AMPUSER/${CUT(ARG1,-,${ITER})}/recording),=,3)}" != "Always"]?continue)
exten => s,n,Set(TEXTEN=${CUT(ARG1,-,${ITER})})
exten => s,n,Set(CALLFILENAME=g${TEXTEN}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID})
exten => s,n,Goto(record)
exten => s,n(continue),Set(ITER=$[${ITER}+1])
exten => s,n,GotoIf($[${ITER}<=${LOOPCNT}]?begin)
exten => s,n(OUT),GotoIf($["${ARG2}"="IN"]?IN)
exten => s,n,ExecIf($["${CUT(DB(AMPUSER/${ARG1}/recording),\\\|,1):4}" != "Always"]?MacroExit())
exten => s,n,Set(CALLFILENAME=OUT${ARG1}-${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID})
exten => s,n,Goto(record)
exten => s,n(IN),ExecIf($["${CUT(DB(AMPUSER/${ARG1}/recording),\\\|,2):3}" != "Always"]?MacroExit())
exten => s,n,Set(CALLFILENAME=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${UNIQUEID})
exten => s,n(record),MixMonitor(${EVAL(${MIXMON_DIR})}${CALLFILENAME}.${MIXMON_FORMAT},,${MIXMON_POST})
exten => s,n,MacroExit()

; end of [macro-record-enable]
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Запись разговоров.

Сообщение virus_net »

ded писал(а):Самое правильное - по завершении разговора вызывать запись через макрос
ded видимо хотел сказать "начинать запись в момент ответа", т.е. тогда когда уже ясно кому пришел вызов:

Код: Выделить всё

exten => _X.,n,Dial(SIP/1001&SIP/1002&SIP/1003&SIP/1004&SIP/1005,60,tiM(record-enable))
а в макросе record-enable уже есть возможность получить и "кто" и "кому".

Так же рекомендую в название файла всегда добавлять UNIQUEID вызова.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
ded
Сообщения: 15628
Зарегистрирован: 26 авг 2010, 19:00

Re: Запись разговоров.

Сообщение ded »

Right!
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH