CDR после transfer и pickup
Не видно кем был пикапнут звонок (*8) в CDR
Сообщений: 156
|
CDR после transfer и pickup
Asterisk 1.4.19
Хотелось бы записывать в CDR в поля src и dst - именно те значения, которые были на момент окончания разговора (hangup). Если входящий звонок попадает на оператора (или группу), и пикапится (*8) каким-то экстеншеном, то запись в CDR такая:
${CDR(src)} - Номер звонящего
${CDR(lastdata)} - SIP/201&SIP/202&SIP/204|45|
${CDR(dst)} - s (ну "s" можно изменить на другое значение, придав экстеншн входному контексту)
Но из этого не видно, кто же все-таки разговаривал. Я уже не говорю о запаркованых, переданых и возвращеных звонках.
А эти данные хотелось бы использовать и для последующей записи (MixMonitor) звонка, чтобы имя файла состояло из того кто звонит (src) и кто отвечает (dst). Порывшись по форуму, обнаружил, что некоторых это тоже беспокоит и проблема решается или "отодвигается" путем каких-то внешних скриптов или добавлением дополнительных данных в read/write переменную ${CDR(userfield)}. Но все это как бы частные случаи.
Еще запутаней - звонок приходит с улицы по аналоговой линии, определяется его ${CALLERID(num)}=963XXXXXX, после приветствия звонок попадает на экстеншн 1004 - пикаплю (*8) этот звонок с 1025 и и по небольшому макросу через features - просматриваю значения некоторых переменых с 1025:
NoOp("SIP/1025-b6743e38", "CHANNEL: SIP/1025-b6743e38") in new stack
NoOp("SIP/1025-b6743e38", "DIALEDPEERNUMBER: 1004") in new stack
NoOp("SIP/1025-b6743e38", "CALLERID: 1025") in new stack
NoOp("SIP/1025-b6743e38", "CDR(SRC): 1025") in new stack
NoOp("SIP/1025-b6743e38", "CDR(DST): *8") in new stack
Как же все-таки грамотно писать CDR. Кто какими методами пользуется ?
- правильный диалплан (у меня более-менее стандартный - как в книжках учат);
- добавлением собственных макросов по пикапу, трансферу и парковке (но ведь уже есть features.conf, да и многие телефоны реализуют эти функции своими силами, а не через диалплан);
- выносить весь алгоритм отслеживания звонка в самописные скрипты php, shell, perl (попахивает кучей разных скриптов для разных ситуаций);
Заранее благодарен за понимание.
|
Откуда: Уфа
Сообщений: 5856
|
Re: CDR после transfer и pickup
я формирую cdr самостоятельно, со всеми нужными мне значениями.
Отследить трансферы средствами телефона вряд ли выйдет
|
Сообщений: 156
|
Re: CDR после transfer и pickup
Попытаюсь решить хотя бы тривиальную задачку (чтобы понять алгоритм отслеживания звонка). Надо при записи разговора использовать имена файлов в следующем формате (уже изменили vmail.cgi, чтобы пользователь зашедший просмотреть свой ящик vm - попутно видел свои записаные разговоры).
ВРЕМЯ_ЗАПИСИ-CLID_РЕАЛИЗУЮШЕГО_ЗВОНОК-CLID_ПОЛУЧИВШЕГО_ЗВОНОК
Как стало понятно, если звонок "переведенный", "пикапнутый", "паркованый", и т.д. да еще и средствами самого телефона, то нельзя доверять данным переменных CDR - кто звонит и куда звонит.
Алгоритм:
- при получении звонка из вне - создаем переменную Set(__CALL=I-${CALLERID(num)}, сразу после Answer(), в моем случае это единственный сценарий для всех входящих. Так же отмечаем, что это звонок входящий - I.
- при исходящих вызовах, в макросы вставляем Set(__CALL=O-${ARG1}), где ARG1 - это набираемый номер - куда мы звоним.
- в момент записи желаемого разговора анализируем переменную CALL - если начинается с I, тогда
exten => rec-in,1,NoOp(Incoming Call)
exten => rec-in,n,Set(CH_CUT=${CUT(CHANNEL,,1)})
exten => rec-in,n,Set(CH_CUT=${CUT(CH_CUT,/,2)})
exten => rec-in,n,Set(MONITOR_FILENAME=auto-${EPOCH}-${CALL:2}-${CH_CUT})
exten => rec-in,n,Goto(rec|1)
а если с O, тогда
exten => rec-out,1,NoOp(Outgoing Call)
exten => rec-out,n,Set(CH_CUT=${CUT(CHANNEL,,1)})
exten => rec-out,n,Set(CH_CUT=${CUT(CH_CUT,/,2)})
exten => rec-out,n,Set(MONITOR_FILENAME=auto-${EPOCH}-${CH_CUT}-${CALL:2})
exten => rec-out,n,Goto(rec|1)
Таким выворотом я добился желаемого формата имени записыаемого файла при всех провереных мною ситуациях (пикап, трансфер, входящий, исходящий).
Но,.... это в тестовом режиме - при одном звонке, а если одновременно совершается X звонков в разных направлениях - ....
Люди, не может быть так все запутано ?
|
Сообщений: 6521
|
Re: CDR после transfer и pickup
Многабукафф, ниасилил.
|
Сообщений: 156
|
Re: CDR после transfer и pickup
Блиин, разрыв моска ;-)
В общем случае - хочу чтобы из CDR (будь-то родной или дополнительный к родному) было понятно кто совершил звонок и кто его закончил, независимо от кол-ва прошедших трансферов, пикапов и парковок. Ну и соотв-но его длительность.
В частном случае - знать в любом месте диалплана (например для MONITOR_FILENAME) - кто начал звонок и с кем он сейчас разговаривает.
Выше описал свои изыскания по данному вопросу. Прошу сообщество поделится своими мнениями по решению данной проблемы.
|
Сообщений: 156
|
Re: CDR после transfer и pickup
так что, у всех обитателей этого форума CDR работает "так себе" ? или все-таки есть "луч света в темном царстве".
switch: я формирую cdr самостоятельно, со всеми нужными мне значениями...
как реализуете, какими средствами ...
является ли он универсальным, т.е. переносим ли на разные системы или только заточен под вашу ?
|
Сообщений: 6521
|
Re: CDR после transfer и pickup
Мнение такое:
биллинг - это как однорукий бандит. Будучи включеным в уголке в кафе где-то он приносит деньги хозяину, верно? (Картинка условная)
Поэтому, кого беспокоит CDR - тот или сам пилит/допиливает, если есть возможность, или покупает готовый + поддержку, если нет возможности разобраться.
Иначе вопросы эквивалентны - "Что-то мой банкомат стал мять купюры!" Подскажите, коллеги, что мне делать?
|
Сообщений: 1129
|
Re: CDR после transfer и pickup
CDR в астериске формируеться скверно
и использовать CDR можно токо условно
тоесть на простых операциях: позвонил дозвонился поговорил результат в CDR
во всех остальных случаях лучше либо не использовать CDR либо избегать ситуаций которые формируют CDR сложным образом трансферы и прочее
а мятые деньги можете отдавать мне
судовольствием проглажу их и буду использовать на свое усмотрение
ортодоксальный антиастерискер || антилинуксоид! (астериск || линукс) - иррациональное решение!. и здесь я тоже http://forum.asterisk.ru
|
Сообщений: 6521
|
Re: CDR после transfer и pickup
Отправил некоторое количество скопившихся мятых купюр.
Готовьте причал.
|
Откуда: Уфа
Сообщений: 5856
|
Re: CDR после transfer и pickup
мда-а-а-а
плавучий остров... интересно, каково на нем в шторм?
А про cdr: у мну функция пишет все события сразу в бд, что ей дал - то и пишет. Единственно пока не придумал как текущие значения billsec и duration вытащить.
|
|