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()