Страница 1 из 2

Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 14:15
Ferrum
Интересует возможность записи в штатную таблицу CDR в БД Mysql, значения answer не прибегая к переменным в диалплане, это возможно сделать ?

На данный момент структура базы такая:

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

CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`userfield` varchar(255) NOT NULL default ''
);

ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
Может есть столбец который просто надо добавить ?

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 14:31
ded
По умолчанию всегда есть два столбца, которые можно использовать по усмотрению как угодно: userfield & accountcode

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 14:32
zzuz
значения answer
- что Вы под этим подразумеваете ?

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 14:44
Ferrum
ded писал(а):По умолчанию всегда есть два столбца, которые можно использовать по усмотрению как угодно: userfield & accountcode
Про это я знаю, но тут получаеться через переменные в диалплане, {CDR(answer)} мы к примеру записываем в userfield, меня интересует есть ли альтернативный путь, просто тут я некий костыль вижу.

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 14:45
Ferrum
zzuz писал(а):
значения answer
- что Вы под этим подразумеваете ?
Время ответа на вызов абонентом или ответ приложения. auto, R/O

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 14:51
ded
В таком разе ваша посылка Запись {CDR(answer)} в CDR отобразиться в столбце disposition. Думаю, что CDR не даст туда писать ваше собственное значение.

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 15:02
Ferrum
Может я как то не очень понятно выразился, в CDR есть значения:

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

start	 Время поступления вызова вызова. auto, R/O
answer	Время ответа на вызов абонентом или ответ приложения. auto, R/O
end		Время окончания соединения.Hangup. auto, R/O
По факту в БД Mysql пишется start это столбец calldate datetime, есть ли возможность увидеть значение answer, не прибегая к установки переменных в диалплан, мне просто кажется странным что разработчик не сделал запись таких важных полей в базу по умолчанию.

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 15:40
fecyt
Ну, как бы такое поле есть, CDR(answer)
https://wiki.asterisk.org/wiki/display/ ... +Variables

P.S. В базу писаться должно.
P.S. Если у Вас, конечно, есть столбец answer

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 18:12
Ferrum
Запрос от астериска в бд такой, посмотрел с помощью tcpdump

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

INSERT INTO cdr (`calldate`,`clid`,`src`,`dst`,`dcontext`,`channel`,`lastapp`,`lastdata`,`duration`,`billsec`,`disposition`,`amaflags`,`uniqueid`)
Никакого answer там нет, эти переменные cdr и модуль который их записывает в бд немного разные вещи.

Re: Запись {CDR(answer)} в CDR MYSQL

Добавлено: 29 май 2017, 18:24
ded
судя по этому INSERT в базу пишутся уже результаты
`duration` = endtime - startime
`billsec` = endtime - answertime

Но сами то значения эти есть в течение совершения звонка, так что можно выцепить.
NoOp(Show me ${CDR(answer)})

Dumpchan вам в помощь