Asterisk 之數據庫配置方案
一:硬件環(huán)境
二臺x86 PC
一個(gè)Hub 或者 Switch
一部外線(xiàn)虛擬電話(huà)(電話(huà)號碼比如:82085471),一部SIP電話(huà)(內部設置分機號為:82081001)
Asterisk卡(Open Vox A1200p)
一條電話(huà)線(xiàn)(比如電話(huà)號碼為82085498)接Asterisk卡
二:軟件環(huán)境
二臺x86 PC:
PC1:安裝Windows Xp Sp2。XP下安裝VM-5.5,并在VM中安裝Fedora 9,在其中架設Sip Server,本項目使用kamailio。
PC2:安裝Centos 5.3,并安裝asterisk相關(guān)包,作為語(yǔ)音網(wǎng)關(guān)。
Asterisk包安裝:
asterisk-1.4.22.1.tar.gz : asterisk主程序包。
asterisk-addons-1.4.7.tar.gz :asterisk擴展包。
asterisk-sounds-1.2.1.tar.gz :asterisk 語(yǔ)音包。
openvox_zaptel-1.4.11.tar.gz :asterisk 卡驅動(dòng)包。
libpri-1.4.2.tar.gz :PRI庫
三:軟件安裝
PC1(192.168.1.199)
Kamailio的安裝:
make clean
./configure
make install
PC2(192.168.1.200)
安裝順序:
libpri->openvox_zaptel->asterisk->asterisk-addons->asterisk-sounds
安裝前最好先把各個(gè)包放到/usr/src/目錄下解壓安裝:
libpri安裝:
tar xzvf libpri-1.4.2.tar.gz
cd libpri-1.4.2.tar.gz
make clean
make
make install
openvox_zaptel-1.4.11.tar.gz的安裝:
tar xzvf openvox_zaptel-1.4.11.tar.gz
cd openvox_zaptel-1.4.11
make clean
./configure
make
make install
asterisk-1.4.22.1.tar.gz 的安裝:
tar xzvf asterisk-1.4.22.1.tar.gz
cd asterisk-1.4.22.1
make clean
./configure
make
make install
make samples //生成默認配置到/etc/asterisk下
asterisk-addons-1.4.7.tar.gz 的安裝:
tar xzvf asterisk-addons-1.4.7.tar.gz
cd asterisk-addons-1.4.7
make clean
./configure
make
make install
cp configs/* /etc/asterisk/ asterisk-sounds-1.2.1.tar.gz 的安裝:
tar xzvf asterisk-sounds-1.2.1.tar.gz
cd asterisk-sounds-1.2.1
make clean
make install
注意:安裝完成后,需要先運行genzaptelconf生成默認的Zap通道的配置信息。
四:配置
PC1(192.168.1.199)配置:
配置kamailio.cfg文件:
在#apply DB based aliases (uncomment to enable)下面的switch語(yǔ)句中加入如下代碼
switch ($retcode) {
case -1:
if(is_method("INVITE")){
log(1, "Not a local user, go to pstn./n");
if (uri=~"sip:[0-9]+@")
{
xlog("Transform$ruto 192.168.1.200:5060./n");
rewritehostport("192.168.1.200:5060"); if(!t_relay())
sl_reply_error();
exit;
}
route(1);
}
在進(jìn)行數據庫配置之前我們需要先按照常規配置對asterisk進(jìn)行配置,比如配置zapata.conf,zapata-channels.conf,sip.conf,
extensions.conf等。做了簡(jiǎn)單配置之后,測試是否可以和外線(xiàn)呼入/呼出,在確定沒(méi)問(wèn)題的情況下,我們要開(kāi)始配置數據庫,并使能數據庫配置信息并屏蔽配置文件中的信息。
PC2 (192.168.1.200) 配置:
數據庫連接配置
/etc/asterisk/res_mysql.conf文件如下:
[general]
dbhost = localhost ;mysql的安裝主機,本機可用localhost
dbname = asterisk ;使用的數據庫名
dbuser = asterisk ;數據庫用戶(hù)名
dbpass = yourpassword ;數據庫密碼
dbport = 3306
dbsock=/var/lib/mysql/mysql.sock
連接引擎配置
/etc/asterisk/extconfig.conf :
配置文件格式如:family => 驅動(dòng)名,數據庫名,表名
[settings]
sipusers => mysql,asterisk,sip_buddies ;到asterisk數據庫的sip_buddies表中查詢(xún)用戶(hù)
sippeers => mysql,asterisk,sip_buddies ;到asterisk數據庫的sip_buddies表中查詢(xún)端
extensions => mysql,asterisk,extensions ;到asterisk數據庫的extensions表中查拔號方案
數據庫配置
到此我們需創(chuàng )建對應上面配置中用到的數據庫和用戶(hù),sql腳本(t.sql)如下:
create database asterisk;
GRANT ALL PRIVILEGES ON asterisk.* TO 'asterisk'@'localhost' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
CREATE TABLE `asterisk`.`extensions` (
`id` int(11) NOT NULL auto_increment,
`context` varchar(20) NOT NULL default '',
`exten` varchar(20) NOT NULL default '',
`priority` tinyint(4) NOT NULL default '0',
`app` varchar(20) NOT NULL default '',
`appdata` varchar(128) NOT NULL default '',
PRIMARY KEY (`context`,`exten`,`priority`),
KEY `id` (`id`)
) ENGINE=MyISAM;
CREATE TABLE `asterisk`.`sip_buddies` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(80) NOT NULL default '',
`accountcode` varchar(20) default NULL,
`amaflags` varchar(7) default NULL,
`callgroup` varchar(10) default NULL,
`callerid` varchar(80) default NULL,
`canreinvite` char(3) default 'yes',
`context` varchar(80) default NULL,
`defaultip` varchar(15) default NULL,
`dtmfmode` varchar(7) default NULL,
`fromuser` varchar(80) default NULL,
`fromdomain` varchar(80) default NULL,
`fullcontact` varchar(80) default NULL,
`host` varchar(31) NOT NULL default '',
`insecure` varchar(20) default NULL,
`language` char(2) default NULL,
`mailbox` varchar(50) default NULL,
`md5secret` varchar(80) default NULL,
`nat` varchar(5) NOT NULL default 'no',
`deny` varchar(95) default NULL,
`permit` varchar(95) default NULL,
`mask` varchar(95) default NULL,
`pickupgroup` varchar(10) default NULL,
`port` varchar(5) NOT NULL default '',
`qualify` char(3) default NULL,
`restrictcid` char(1) default NULL,
`rtptimeout` char(3) default NULL,
`rtpholdtimeout` char(3) default NULL,
`secret` varchar(80) default NULL,
`type` varchar(6) NOT NULL default 'friend',
`username` varchar(80) NOT NULL default '',
`disallow` varchar(100) default 'all',
`allow` varchar(100) default 'g729;ilbc;gsm;ulaw;alaw',
`musiconhold` varchar(100) default NULL,
`regseconds` int(11) NOT NULL default '0',
`ipaddr` varchar(15) NOT NULL default '',
`regexten` varchar(80) NOT NULL default '',
`cancallforward` char(3) default 'yes',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=MyISAM;
五:用例
下面講述如何將拔號規則存入數據庫存,并使其生效。
假如在/etc/asterisk/extensions.conf有如下拔號規則:
[from-sip]
exten =>_.,1,Answer()
exten=>_.,2,GotoIf($[${EXTEN:0:${LEN(${AREACODE})}}=${AREACODE}]?3:5)
exten =>_.,3,Dial(Zap/1/${EXTEN:${LEN(${AREACODE})}})
exten =>_.,4,Hangup()
exten =>_.,5,Dial(SIP/${EXTEN})
exten =>_.,6,Hangup()
我們可以用以下腳本將其插入數據庫中:
INSERT into extensions (id, context, exten, priority, app)
VALUES ('','from-sip','_.','1','Answer');
INSERT into extensions (id, context, exten, priority, app, appdata)
VALUES ('','from-sip','_.','2','GotoIf','$[${EXTEN:0:${LEN(${AREACODE})}}=${AREACODE}]?3:5');
INSERT into extensions (id, context, exten, priority, app, appdata)
VALUES ('','from-sip','_.','3','Dial','Zap/1/${EXTEN:${LEN(${AREACODE})}}');
INSERT into extensions (id, context, exten, priority, app)
VALUES ('','from-sip','_.','4','Hangup');
INSERT into extensions (id, context, exten, priority, app, appdata)
VALUES ('','from-sip','_.','5','Dial','SIP/${EXTEN}');
INSERT into extensions (id, context, exten, priority, app)
VALUES ('','from-sip','_.','6','Hangup');
現在我們的拔號規則已存在于數據中,那么如何使它起作用呢?也就是說(shuō)當一個(gè)內部SIP用戶(hù)想拔打外線(xiàn)或者其它SIP電話(huà)的時(shí)候,asterisk如何引導主叫用戶(hù)到數據庫中查詢(xún)拔號規則并根據拔號規則進(jìn)行拔號呢?
此時(shí)我們需要修改/etc/asterisk/extension.conf文件,來(lái)引導主叫到數據庫中查找拔號規則,如下:
[from-sip]
switch =>Realtime/@extensions
我們已成功有配置from-sip規則到數據庫,并使內部用戶(hù)拔打外線(xiàn)時(shí),自動(dòng)到數據庫中查詢(xún)拔號規則。比如我們在內部SIP電話(huà)中拔打外線(xiàn)號碼82085471時(shí),它會(huì )到數據庫中查詢(xún)from-sip這個(gè)規則,并根據此規則拔打電話(huà)。
六:Asterisk的啟動(dòng)與調試
在PC1的終端輸入如下命令:
#service network start
#service mysqld start
#asterisk
也就是說(shuō)在啟動(dòng)Asterisk之前必需確保網(wǎng)絡(luò )和mysql數據庫服務(wù)均已啟動(dòng)。
需要說(shuō)明一點(diǎn)的是:在安裝完mysql之后,數據庫用戶(hù)名root的默認密碼為:空或者passw0rd。這里是數字0。
另外我們還可以通過(guò)
#asterisk –rvvv 來(lái)察看asterisk的調式信息。
在PC2的終端啟動(dòng)kamailio:
#service network start
#service mysqld start
#kamailio
同理在啟動(dòng)SIP服務(wù)的時(shí)候必需確保以上兩個(gè)服務(wù)正常運行,若已運行可以不使用對應的指應。
我們也可以通過(guò)
#kamctl online 來(lái)察看在線(xiàn)注冊的用戶(hù)。
至此,我們已有一個(gè)完整的asterisk數據庫配置方案,如果您想了解更多數據庫配置方案可以到http://www.voip-info.org查詢(xún)。
聯(lián)系客服