Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / CDR после transfer и pickup

CDR после transfer и pickup

Не видно кем был пикапнут звонок (*8) в CDR
1 2>
Сообщений: 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 (попахивает кучей разных скриптов для разных ситуаций);

Заранее благодарен за понимание.

2009-10-11 03:22

Avatara of switch
Откуда: Уфа
Сообщений: 5856

Re: CDR после transfer и pickup

я формирую cdr самостоятельно, со всеми нужными мне значениями.
Отследить трансферы средствами телефона вряд ли выйдет
http://www.lynks.ru - Решения телефонии, мини-АТС, VoIP на основе Trixbox и Asterisk
2009-10-11 09:55

Сообщений: 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 звонков в разных направлениях - ....

Люди, не может быть так все запутано ?
2009-10-12 14:56

Сообщений: 6521

Re: CDR после transfer и pickup

Многабукафф, ниасилил.
2009-10-12 16:19

Сообщений: 156

Re: CDR после transfer и pickup

Блиин, разрыв моска ;-)

В общем случае - хочу чтобы из CDR (будь-то родной или дополнительный к родному) было понятно кто совершил звонок и кто его закончил, независимо от кол-ва прошедших трансферов, пикапов и парковок. Ну и соотв-но его длительность.

В частном случае - знать в любом месте диалплана (например для MONITOR_FILENAME) - кто начал звонок и с кем он сейчас разговаривает.

Выше описал свои изыскания по данному вопросу. Прошу сообщество поделится своими мнениями по решению данной проблемы.
2009-10-12 16:54

Сообщений: 156

Re: CDR после transfer и pickup

так что, у всех обитателей этого форума CDR работает "так себе" ? или все-таки есть "луч света в темном царстве".

switch:

я формирую cdr самостоятельно, со всеми нужными мне значениями...


как реализуете, какими средствами ...

является ли он универсальным, т.е. переносим ли на разные системы или только заточен под вашу ?
2009-10-14 18:46

Сообщений: 6521

Re: CDR после transfer и pickup

Мнение такое:
биллинг - это как однорукий бандит. Будучи включеным в уголке в кафе где-то он приносит деньги хозяину, верно? (Картинка условная)
Поэтому, кого беспокоит CDR - тот или сам пилит/допиливает, если есть возможность, или покупает готовый + поддержку, если нет возможности разобраться.

Иначе вопросы эквивалентны - "Что-то мой банкомат стал мять купюры!" Подскажите, коллеги, что мне делать?
2009-10-14 19:09

Сообщений: 1129

Re: CDR после transfer и pickup

CDR в астериске формируеться скверно
и использовать CDR можно токо условно
тоесть на простых операциях: позвонил дозвонился поговорил результат в CDR
во всех остальных случаях лучше либо не использовать CDR либо избегать ситуаций которые формируют CDR сложным образом трансферы и прочее

а мятые деньги можете отдавать мне
судовольствием проглажу их и буду использовать на свое усмотрение
ортодоксальный антиастерискер || антилинуксоид! (астериск || линукс) - иррациональное решение!. и здесь я тоже http://forum.asterisk.ru
2009-10-14 19:20

Сообщений: 6521

Re: CDR после transfer и pickup

Отправил некоторое количество скопившихся мятых купюр.


Готовьте причал.
2009-10-14 19:28

Avatara of switch
Откуда: Уфа
Сообщений: 5856

Re: CDR после transfer и pickup

мда-а-а-а
плавучий остров... интересно, каково на нем в шторм?

А про cdr: у мну функция пишет все события сразу в бд, что ей дал - то и пишет. Единственно пока не придумал как текущие значения billsec и duration вытащить.
http://www.lynks.ru - Решения телефонии, мини-АТС, VoIP на основе Trixbox и Asterisk
2009-10-14 20:21

1 2>
Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru