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

Обработка пользовательских полей в CDR через ODBC-Mysql

Проблемы Asterisk без вэб-оболочек и их решения

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

Sanek
Сообщения: 81
Зарегистрирован: 17 май 2012, 14:55

Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Sanek »

Всем привет!
Опять новая задача: возникла необходимость в создании и обработке дополнительных полей в CDR... Такое прокатывает, если астер с БД Mysql "общается" на прямую без драйвера ODBC: в файле cdr_mysql.conf создаем секцию [columns] и прописываем алиасы:

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

[columns]
alias calldate => calldate
alias serverid => serverid
alias calcount => calcount
Но с ODBC такое не прокатывает (или я плохо искал как это сделать...) - нужные мне поля не заносятся в БД, хотя в диалплане значения присваиваются и астер "не ругается"...
Поигравшись с конфигами cdr_odbc.conf и cdr.conf я обратил внимание на cdr_adaptive_odbc.conf - он умеет работать с алиасами... Прописал параметры конекта к нужной мне табличке и алиасы:

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

[first]
connection=asteriskcdrdb
table=cdr_new
alias serverid => serverid
alias calcount => calcount
Оказалось, что дата и время звонка не заносится в поле calldate, а остальные поля (и стандартные, и мной добавленные) обрабатываются... пришлось делать через за... подругому: в диалплане добавил строку

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

exten => _X.,n,Set(CDR(calldate)= ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)})
всеравно не пишется... добавил в cdr_adaptive_odbc.conf алиас

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

alias calldate => calldate
заработало...

Отсюда возникает вопрос: можно ли как-то это всё сделать по другому (особенно танцы с бубном вокруг даты звонка), более правильно?
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Aven »

алиасы нужны, если в БД у вас поля называются нестандартно.
На возмжность использования кастомных полей это никак не влияет.
Кастомные поля используются просто, ничего настраивать не требуется.
Решения телефонии на базе Asterisk || http://it-need.ru
Sanek
Сообщения: 81
Зарегистрирован: 17 май 2012, 14:55

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Sanek »

Так, а вот здесь по подробнее :)
Астера я собирал сам из исходников (версия Asterisk 11.7.0) и может чего не доустановил... но без настроек обрабатывается только поле userfield чего, естественно, мало...
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Aven »

Ничего настраивать не нужно!
Включайте дебаг и смотрите какой запрос выполняется!

Зачем Вам поле calldate? В базе уже есть аналогичное start.
Решения телефонии на базе Asterisk || http://it-need.ru
Sanek
Сообщения: 81
Зарегистрирован: 17 май 2012, 14:55

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Sanek »

Вот что мне выдал дебаг (в диалплане закоментил строку, где принудительно в CDR писал дату и время звонка):

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

 > [INSERT INTO cdr_new (clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,serverid,calcount) VALUES ('"PhonerLite" <79181682416>','79181682416','001#375259263416','pools','SIP/Soft-Sanekk-00000014','SIP/401-00000015','Dial','SIP/401/01+375259263416,120,S(16)',2,0,'NO ANSWER',3,'300','1390377425.20',4,1)]
в БД запись о звонке:

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

(`calldate`, `clid`, `src`, `dst`, `dcontext`, `channel`, `dstchannel`, `lastapp`, `lastdata`, `duration`, `billsec`, `disposition`, `amaflags`, `accountcode`, `uniqueid`, `userfield`, `did`, `recordingfile`, `cnum`, `cnam`, `outbound_cnum`, `outbound_cnam`, `dst_cnam`, `serverid`, `pool_id`, `trunk_id`, `orig_trunk_id`, `dst_number_bill`, `calcount`) 

VALUES
('0000-00-00 00:00:00', '"PhonerLite" <79181682416>', '79181682416', '001#375259263416', 'pools', 'SIP/Soft-Sanekk-00000004', 'SIP/401-00000005', 'Dial', 'SIP/401/01+375259263416,120,S(16)', 2, 0, 'NO ANSWER', 3, '300', '1390327940.4', '', '', '', '', '', '', '', '001', 100, 0, 0, 0, '', 9)
Вот дебаг после отключения алиасов в файле cdr_adaptive_odbc.conf

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

> [INSERT INTO cdr_new (clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,serverid,calcount) VALUES ('"PhonerLite" <79181682416>','79181682416','001#375259263416','pools','SIP/Soft-Sanekk-00000016','SIP/401-00000017','Dial','SIP/401/01+375259263416,120,S(16)',1,0,'NO ANSWER',3,'300','1390377791.22',4,1)]
в БД:

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

(`calldate`, `clid`, `src`, `dst`, `dcontext`, `channel`, `dstchannel`, `lastapp`, `lastdata`, `duration`, `billsec`, `disposition`, `amaflags`, `accountcode`, `uniqueid`, `userfield`, `did`, `recordingfile`, `cnum`, `cnam`, `outbound_cnum`, `outbound_cnam`, `dst_cnam`, `serverid`, `pool_id`, `trunk_id`, `orig_trunk_id`, `dst_number_bill`, `calcount`) 

VALUES
('0000-00-00 00:00:00', '"PhonerLite" <79181682416>', '79181682416', '001#375259263416', 'pools', 'SIP/Soft-Sanekk-00000004', 'SIP/401-00000005', 'Dial', 'SIP/401/01+375259263416,120,S(16)', 2, 0, 'NO ANSWER', 3, '300', '1390327940.4', '', '', '', '', '', '', '', '', 0, 0, 0, 0, '', 0)
Перешел на cdr_odbc.conf
астер перестал показывать(!) запросы к БД относительно CDR... и ошибок не выкидывает, но в БД есть следующее:

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

(`calldate`, `clid`, `src`, `dst`, `dcontext`, `channel`, `dstchannel`, `lastapp`, `lastdata`, `duration`, `billsec`, `disposition`, `amaflags`, `accountcode`, `uniqueid`, `userfield`, `did`, `recordingfile`, `cnum`, `cnam`, `outbound_cnum`, `outbound_cnam`, `dst_cnam`, `serverid`, `pool_id`, `trunk_id`, `orig_trunk_id`, `dst_number_bill`, `calcount`) 

VALUES
('2014-01-22 08:16:22', '"PhonerLite" <79181682416>', '79181682416', '001#375259263416', 'pools', 'SIP/Soft-Sanekk-00000002', 'SIP/401-00000003', 'Dial', 'SIP/401/01+375259263416,120,S(16)', 3, 0, 'NO ANSWER', 3, '300', '1390378582.2', '', '', '', '', '', '', '', '', 0, 0, 0, 0, '', 0);
Sanek
Сообщения: 81
Зарегистрирован: 17 май 2012, 14:55

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Sanek »

Как бы можно забить на дату и время звонка и в БД в параметрах поля указать, чтобы подставлялся таймштамп вставки записи... но это не совсем удачный вариант
Lonely_Ghost
Сообщения: 21
Зарегистрирован: 09 сен 2010, 11:29
Откуда: Украина, Киев

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Lonely_Ghost »

Работа с кастомными столбцами CDR возможна через cdr_adaptive_odbc.
Модуль cdr_odbc работает только со стандартными.
Sanek
Сообщения: 81
Зарегистрирован: 17 май 2012, 14:55

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Sanek »

Это я уже понял... Беда с обработкой даты вызова: для cdr_odbc в БД поле calldate является стандартным, а какое поле в cdr_adaptive_odbc отвечает за дату?... и в логе модуль cdr_adaptive_odbc не ругается на отсутствующее поле.
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Aven »

Нет поля calldate (мб есть alias), есть поле start.
Решения телефонии на базе Asterisk || http://it-need.ru
Sanek
Сообщения: 81
Зарегистрирован: 17 май 2012, 14:55

Re: Обработка пользовательских полей в CDR через ODBC-Mysql

Сообщение Sanek »

Ура! Заработало!
прописал алиас

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

alias start => calldate
и пошла писаться дата звонка

Большое спасибо всем, кто принимал участие.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH