Проект

Общее

Профиль

Asterisk

cdr origin

CREATE TABLE cdr (
cdr_pkey serial PRIMARY KEY,
calldate timestamp with time zone NOT NULL default now(),
clid text NOT NULL default '',
src text NOT NULL default '',
dst text NOT NULL default '',
dcontext text NOT NULL default '',
channel text NOT NULL default '',
dstchannel text NOT NULL default '',
lastapp text NOT NULL default '',
lastdata text NOT NULL default '',
duration bigint NOT NULL default '0',
billsec bigint NOT NULL default '0',
disposition text NOT NULL default '',
amaflags bigint NOT NULL default '0',
accountcode text NOT NULL default '',
uniqueid text NOT NULL default '',
userfield text NOT NULL default ''
);

cdr_odbc.conf

; cdr_odbc.conf
[global]
dsn=AsteriskCdr
username=asterisk
password=xxxxx
loguniqueid=yes
dispositionstring=yes
table=cdr ;"cdr" - имя таблицы, по умолчанию.
usegmtime=no ; установите в "yes", для использования времени в GMT.

Voicemail для механизма RealTime

CREATE TABLE voicemail (
uniqueid serial PRIMARY KEY,
customer_id varchar(11) NOT NULL default '0',
context varchar(50) NOT NULL default '',
mailbox varchar(11) NOT NULL default '0',
password varchar(5) NOT NULL default '0',
fullname varchar(150) NOT NULL default '',
email varchar(50) NOT NULL default '',
pager varchar(50) NOT NULL default '',
tz varchar(10) NOT NULL default 'EST',
attach varchar(4) NOT NULL default 'yes',
saycid varchar(4) NOT NULL default 'yes',
dialout varchar(10) NOT NULL default '',
callback varchar(10) NOT NULL default '',
review varchar(4) NOT NULL default 'no',
operator varchar(4) NOT NULL default 'no',
envelope varchar(4) NOT NULL default 'no',
sayduration varchar(4) NOT NULL default 'no',
saydurationm int2 NOT NULL default '1',
sendvoicemail varchar(4) NOT NULL default 'no',
delete varchar(4) NOT NULL default 'no',
nextaftercmd varchar(4) NOT NULL default 'yes',
forcename varchar(4) NOT NULL default 'no',
forcegreetings varchar(4) NOT NULL default 'no',
hidefromdir varchar(4) NOT NULL default 'yes',
stamp timestamp NOT NULL default now(),
UNIQUE (context,mailbox)
);

IAX peers/users для механизма RealTime.


CREATE TABLE iax_buddies (
name varchar(30) primary key NOT NULL,
username varchar(30),
type varchar(6) NOT NULL,
secret varchar(50),
md5secret varchar(32),
dbsecret varchar(100),
notransfer varchar(10) DEFAULT 'yes',
inkeys varchar(100),
outkeys varchar(100),
auth varchar(100) NOT NULL DEFAULT 'md5',
accountcode varchar(100),
amaflags varchar(100),
callerid varchar(100),
context varchar(100) NOT NULL,
defaultip varchar(15),
host varchar(31) NOT NULL DEFAULT 'dynamic',
language char(5),
mailbox varchar(50),
deny varchar(95),
permit varchar(95),
qualify varchar(4) DEFAULT 'yes',
disallow varchar(100) NOT NULL DEFAULT 'all',
allow varchar(100) NOT NULL DEFAULT 'ulaw',
ipaddr varchar(15),
port integer DEFAULT 0,
regseconds integer DEFAULT 0,
UNIQUE (username)
);

Екстеншены для механизма RealTime.

CREATE TABLE extensions (
id serial,
context varchar(40) NOT NULL default '',
exten varchar(40) NOT NULL default '',
priority int4 NOT NULL default 0,
app varchar(40) NOT NULL default '',
appdata varchar(256) NOT NULL default '',
PRIMARY KEY (context,exten,priority),
UNIQUE (id)
);

CDR v2

CREATE TABLE cdr (
calldate timestamp NOT NULL , 
clid varchar(80) NOT NULL,
src varchar (80) NOT NULL , 
dst varchar (80) NOT NULL , 
dcontext varchar (80) NOT NULL , 
channel varchar (80) NOT NULL , 
dstchannel varchar (80) NOT NULL , 
lastapp varchar (80) NOT NULL , 
lastdata varchar (80) NOT NULL , 

duration int NOT NULL DEFAULT '0',
billsec int NOT NULL DEFAULT '0',
disposition varchar (45) NOT NULL , 
amaflags int NOT NULL DEFAULT '0',
accountcode varchar(80) NULL, -- 20
uniqueid varchar(150) NOT  NULL,
userfield varchar(255) NOT NULL ,

linkedid varchar(150) NULL,
did varchar(80)  NULL,
recordingfile varchar(255) NULL,
cnum varchar(80)  NULL,
cnam varchar(80)  NULL,
outbound_cnum varchar(80)  NULL,
outbound_cnam varchar(80) NULL,
dst_cnam varchar(80) NULL
);
Столбец Пример значения Описание
calldate 2016-03-18 12:00:36 Дата и время звонка
clid “Oleg Ivanov” В данное поле попадает полное CallerID (CLID, CID), которое состоит из имени и номера звонящего. Это доступно только для считывания.
src 84991111111 Номер звонящего в конструкции CallerID (CNUM). Это доступно только для считывания.
dst 113 Номер назначения для звонка. Это доступно только для считывания.
dcontext CustomContext1 Контекст для обработки. Это доступно только для считывания.
channel SIP/0002B2356854-a34bh3ef Канал, через который поступил звонок
dstchannel SIP/0004F6675969-97836bb0 Канал, через который ушел исходящий звонок
lastapp Dial, Busy, Congestion Приложение, которое последним отработало этот вызов перед попаданием в таблицу cdr
lastdata SIP/0004F6675969,30,tT Аргумент, который был передан приложению, которое отработало вызов последним (lastapp)
duration 75 Количество секунд от начала (отметка start) до окончания вызова (отметка end)
billsec 67 Количество секунд от ответа (отметка answer) до окончания вызова (отметка end). Данное значение всегда меньше значения duration, и отражает длительность самого разговора, что важно для подсчета стоимости.
disposition ANSWERED, BUSY, NO ANSWER, FAILED Результат звонка
amaflags OMIT, BILLING, DOCUMENTATION, Unknown Метка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова.
accountcode 23232 Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя.
uniqueid 1458291693.157169 Уникальный идентификатор звонка
userfield Пользовательское поле. Здесь можно передавать что угодно, добавляя данные в этот столбец при работе с вызовом внутри контекста обработки.
did 4996491913 DID (Direct Inward Dialing). На основании DID вызова на Asterisk осуществляется его маршрутизация (это значение приходит от провайдера).
recordingfile external-113-84991111111-20160318-115933-1458291573.157155.wav Имя файла, содержащего запись разговора. В данном имени можно проследить путь к файлу в файловой структуре сервера.
cnum 84991111111 Номер звонящего в структуре CallerID.
cnam Oleg Ivanov Имя звонящего в структуре CallerID.
exten => s,n,Set(CDR(recordingfile)=${CALLFILENAME})
[miko_ajam]
exten => 0000777,1,NoCDR()
exten => 0000777,n,Set(dbname=${AST_CONFIG(cdr_mysql.conf,global,dbname)})
exten => 0000777,n,Set(user=${AST_CONFIG(cdr_mysql.conf,global,user)})
exten => 0000777,n,Set(password=${AST_CONFIG(cdr_mysql.conf,global,password)})
exten => 0000777,n,Set(monitor_path=${ASTSPOOLDIR}/monitor)
exten => 0000777,n,Set(recordingfile=${SHELL( mysql -sse 'SELECT recordingfile FROM cdr WHERE uniqueid Like ${QUOTE(${uniqueid1c}%)} LIMIT 1' -u${user} -p${password} ${dbname} )})
exten => 0000777,n,Gotoif($[${LEN(${recordingfile})} > 4]?FindInFileSystem:FindInUserfield)
exten => 0000777,n(FindInUserfield),Set(recordingfile=${SHELL( mysql -sse 'SELECT userfield FROM cdr WHERE uniqueid Like ${QUOTE(${uniqueid1c}%)} LIMIT 1' -u${user} -p${password} ${dbname} )})
exten => 0000777,n,ExecIf($[${LEN(${recordingfile})} < 4]?Hangup())
exten => 0000777,n(FindInFileSystem),Set(namedorashiren=$[${LEN(${recordingfile})}-4])
exten => 0000777,n,Set(recfile=${SHELL(find ${monitor_path} -name *${recordingfile:0:${namedorashiren}}*|head -n 1)})
exten => 0000777,n,ExecIf($[${LEN(${recfile})} > 4]?UserEvent(CallRecord,Channel: ${chan},FileName: ${recfile}))
exten => 0000777,n,Answer()
exten => 0000777,n,Hangup()