das was du da machen willst, nennt sich CDR logging (Call Detail Records). im paket "asterisk-addons" der jeweiligen version von asterisk (1.2 oder 1.4) ist ein modul für die asterisk enthalten, das sich "cdr_addon_mysql.so" nennt. welche informationen damit geloggt werden können findest du hier:
http://www.voip-info.org/wiki/view/Asterisk+billing
wie du es einbindest, findest du hier:
http://www.voip-info.org/wiki/view/Asterisk+cdr+mysql
ist das das, was du suchst?
die von Blackmore angesprochene methode basiert übrigens (wie in seinem beispiel ersichlich) auf der "MYSQL" dialplan applikation, die auch im "asterisk-addons" paket enthalten ist.
sollte die cdr methode die gewünschten informationen enthalten, würde ich diese bevorzugen, da benötigst du folgendes SQL für die mysql datenbank + user + tabelle:
(bitte anpassen, wenn du z.b. schon einen user angelegt hast!)
Code:
--
-- Database: `asterisk`, comment out if not needed
--
CREATE DATABASE IF NOT EXISTS `asterisk` DEFAULT CHARACTER SET=utf8 DEFAULT COLLATE=utf8_general_ci;
--
-- Adding user `asterisk`, comment out if not needed
--
CREATE USER 'asterisk'@'localhost' IDENTIFIED BY 'asterisk';
GRANT SELECT, INSERT, UPDATE, DELETE ON `asterisk`.* to 'asterisk'@'localhost';
--
-- Table structure for table `ast_cdr`
--
CREATE TABLE IF NOT EXISTS `asterisk`.`ast_cdr` (
`id` int(10) unsigned NOT NULL auto_increment,
`uniqueid` varchar(32) collate utf8_general_ci default NULL,
`userfield` varchar(255) collate utf8_general_ci default NULL,
`accountcode` varchar(20) collate utf8_general_ci default NULL,
`src` varchar(80) collate utf8_general_ci default NULL,
`dst` varchar(80) collate utf8_general_ci default NULL,
`dcontext` varchar(80) collate utf8_general_ci default NULL,
`clid` varchar(80) collate utf8_general_ci default NULL,
`channel` varchar(80) collate utf8_general_ci default NULL,
`dstchannel` varchar(80) collate utf8_general_ci default NULL,
`lastapp` varchar(80) collate utf8_general_ci default NULL,
`lastdata` varchar(80) collate utf8_general_ci default NULL,
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`duration` int(10) unsigned NOT NULL default '0',
`billsec` int(10) unsigned NOT NULL default '0',
`disposition` varchar(45) collate utf8_general_ci default NULL,
`amaflags` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `calldate` (`calldate`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
die konfigurationsdaten für den zugriff auf die datenbank findest du in der datei "/etc/asterisk/cdr_mysql.conf", die (für obiges SQL) folgendermassen aussehen muss:
Code:
[global]
hostname = localhost
dbname = asterisk
table = ast_cdr
user = asterisk
password = asterisk
port = 3306
;sock = /var/run/mysqld/mysqld.sock
userfield = 1
es gibt auch die möglichkeit, in das tabellenfeld "uniqueid" die eindeutige id des anrufes zu speichern, dazu muss aber die kompiler option "MYSQL_LOGUNIQUEID" gesetzt sein. wie man diese setzt, findest du im cdr_mysql artikel auf der voip-info.org seite (link weiter oben).
zusätzliche daten können über die dialplan funktion "CDR" im tabellenfeld "userfield" abgelegt werden. Beispiel:
Code:
...
; wert in userfield setzen:
exten = _X.,1,Set(CDR(userfield)=foo)
...
; wert im userfield erweitern:
exten = _X.,2,Set(CDR(userfield)=${CDR(userfield)}+bar)
...
danach befindet sich im tabellenfeld "userfield" der wert "foo+bar".
[EDIT]beachten sollte man, dass der datensatz erst beim hangup des calls in die datenbank geschrieben wird. das ist von interesse, wenn man mit DeadAGI scripts arbeitet, die auf diese daten zugreifen wollen. in der version 1.2.x von asterisk wird der datensatz erst nach dem vollständigen abarbeiten des dialplans in die cdr tabelle geschrieben, bei version 1.4.x wird der datensatz VOR der priorität "h" im dialplan geschrieben.[/EDIT]
grüße,
laureen