วันเสาร์ที่ 22 พฤษภาคม พ.ศ. 2553

How To Delete Remembered Network Passwords In Windows

คุณเคยไหมครับ เวลาที่เราต้องการเข้าถึง เครื่อง computer เครื่องอื่น แต่เราดันไป remember password อีกเครื่องไว้ มันก็ไม่ได้ถามว่า ต้องการ login เข้าใช้งาน ด้วย user / password อะไร
ปัญหานี้มีทางออก ครับมา ดูกันครับ

ในการ delete cache ที่ windows ทำการจัดเก็บอยู่นั้น เราสามารถทำได้ดังนี้ครับ

ไปที่ Menu Start >> Run
แล้วพิมพ์ control userpasswords2
จากนั้น กด enter จะได้ดังภาพครับ
ง่ายไหมหล่ะครับ



วันอาทิตย์ที่ 16 พฤษภาคม พ.ศ. 2553

การ Config Subversion(SVN) บน Redhat ตอนที่2

ในตอนที่ 1 นั้นเราได้ทำการกำหนด ที่เก็บ repository เีรียบร้อยแล้วนั้น
ส่วนในตอนที่2 จะเป็นการกำหนด
Authentication And Configuration With svnserve
ไฟล์ที่เราจะกำหนดในที่นี้ อยู่ที่ /home/svntest/repos/confon/ ซึ่งในนี้จะมีอยู่ด้วยกัน 3 ไฟล์ คือ
authz
ใช้สำหรับกำหนดสิทธิ์ในการกระทำกับไฟล์
passwd
ใช้สำหรับกำหนด User กับ Password ในการใช้งาน
svnserve.conf
จะเป็นส่วนที่กำหนดว่า หากมีการ Authentication เข้าใช้งานจะสามารถกระทำอะไรกับไฟล์ ได้บ้าง และ ถ้าไ่ม่มีการทำการ Authentication เข้ามาจะทำอะไรได้บ้าง

ให้ทำการแก้ไขไฟล์ svnserve.conf ดังนี้
[general]
anon-access = none
auth-access = write
password-db = authz
authz-db = authz
realm = Authenlization

ให้ทำการแก้ไขไฟล์ passwd ดังนี้
[users]
harry = harryssecret
sally = sallyssecret
ron = ronaccess

ให้ทำการแก้ไขไฟล์ authz ดังนี้
[groups]
DepTeam = harry,sally
other = ron

[/]
harry = rw
sally = rw
ron = r
* =

[repos:/]
DepTeam = rw
other = r
* =



เมื่อทำการกำหนด ค่าต่างๆเรียบร้อยแล้วก็ให้ทำการ start svnserve โดยใช้คำสั่ง
#svnserve -d -r /home/svntest/

ป้ายกำกับ: ,

วันเสาร์ที่ 15 พฤษภาคม พ.ศ. 2553

Asterisk OID สำหรับ monitor ผ่าน snmp

for Asterisk 1.6.2.6


Asterisk Channels In Use (all types)
OID = .1.3.6.1.4.1.22736.1.5.1.0

Asterisk Bridged Channels
OID = .1.3.6.1.4.1.22736.1.5.5.1.0

Asterisk Active Calls
OID = .1.3.6.1.4.1.22736.1.2.5.0

Asterisk Calls Processed
OID = .1.3.6.1.4.1.22736.1.2.6.0

Asterisk DAHDI Telephony Driver w/PRI (DAHDI)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.1

Asterisk Media Gateway Control Protocol (MGCP)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.2

Asterisk Bridge Interaction Channel
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.3

Asterisk Session Initiation Protocol (SIP)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.4

Asterisk UNISTIM Channel Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.5

Asterisk OSS Console Channel Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.6

Asterisk Local Proxy Channel Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.7

Asterisk Call Agent Proxy Channel
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.8

Asterisk Standard Linux Telephony API Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.9

Asterisk Skinny Client Control Protocol (Skinny)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.10

Asterisk Inter Asterisk eXchange Driver (Ver 2)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.11

Asterisk Objective Systems H323 Channel Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.12


==========================================================


For Asteirsk 1.4.14
Asterisk Channels In Use (all types)
OID = .1.3.6.1.4.1.22736.1.5.1.0


Asterisk Standard Linux Telephony API Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.1

Asterisk Media Gateway Control Protocol (MGCP)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.2

Asterisk Call Agent Proxy Channel
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.3

Asterisk Skinny Client Control Protocol (Skinny)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.4

Asterisk Session Initiation Protocol (SIP)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.5

Asterisk Inter Asterisk eXchange Driver (Ver 2)
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.6

Asterisk Zapata Telephony Driver w/PRI
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.7

Asterisk OSS Console Channel Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.8

Asterisk Local Proxy Channel Driver
OID = .1.3.6.1.4.1.22736.1.5.4.1.7.9

ป้ายกำกับ:

script asterisk for nagios

พอดีช่วงนี้ ว่างๆ เลยนั่งเขียน script สำหรับ monitor asterisk ที่รองรับ snmp ไว้ใช้สำหรับ nagios มาฝากเพื่อนๆ พี่ๆ กันทุกคนครับ
ส่วนเครื่องที่ nagios ที่จะใช้ script นี้ได้นั้นต้องติดตั้ง php-snmp ไว้ด้วยหน่ะครับ ถ้าไม่แน่ใจให้ดูที่ phpinfo ครับ แล้ว search คำว่า "snmp" ดูหน่ะครับว่า ได้ enable ไว้หรือ ยังครับ
หรือถ้าบน linux เองก็ใช้ command line เอาเลยก็ได้คับ
#rpm -q php-snmp

ส่วนวิธีการเรียกใช้งาน script นี้นั้น ก็เพียงแค่ส่ง paremeter ต่างๆเข้าไปครับ เช่น

./monitor_asterisk_snmp.php host community type [warning] [cirtical]

host = คือ ชื่อ domain หรือ ip address ของเครื่อง asterisk ที่จะทำการ monitor
community = คือ key snmp ของเครื่อง asterisk
type = คือ ค่าที่เราจะทำการ monitor ครับซึ่งก็มีหลายค่าด้วยกัน เช่น sip , iax2 , zap , channels in use , etc
[warning] = คือ ค่า warning สำหรับใช้กับ nagios ในการ alert warning ครับ ค่านี้ ต้องเป็นตัวเลขจำนวนเต็มน่ะครับ และเป็นจำนวนเต็มบวก น่ะครับ
[critical] = คือ ค่า critical สำหรับใช้กับ nagios ในการ alert critical ครับ ค่านี้ ต้องมีค่าเป็นเลขจำนวนเต็ม และมีค่ามากกว่า ค่า warning ด้วยน่ะครับ

script นี้ นั้นรองรับกับ Asterisk version 1.4 กับ 1.6 ครับ
ซึ่งการจะใช้ ค่า type อะไรนั้น version 1.4 กับ 1.6 ก็มีค่า type แตกต่างกันไปครับ
ถ้าเราไม่รู้ว่ามี type อะไรบ้างที่เราสามารถ จะ monitor ได้นั้นให้เรา ใส่ตรง type เป็น help แทนครับ
script จะแจ้งให้ทราบ ถึง วิธีการใช้งาน script พร้อมทั้งบอกว่า ว่าเครื่องปลายทางที่จะทำการ monitor ว่าเป็น asterisk version อะไร
รวมไปถึง type อะไรบ้างที่เราสามารถ monitor ได้เช่น

For Asterisk 1.4

Asterisk version : "1.4.14"
Use : ./monitor_asterisk14.php host community type [warning] [critical]
host or ip address : your ip address
community : community for snmp
type : phone ( Standard Linux Telephony API Driver )
mgcp ( Media Gateway Control Protocol (MGCP) )
agent ( Call Agent Proxy Channel)
skinny ( Skinny Client Control Protocol (Skinny) )
sip ( Session Initiation Protocol (SIP) )
iax2 ( Inter Asterisk eXchange Driver (Ver 2) )
zap ( Zapata Telephony Driver w/PRI )
console ( OSS Console Channel Driver )
local ( Local Proxy Channel Driver )
channels_inuse ( Channels In Use (all types) )


For Asterisk 1.6

Asterisk version : "1.6.2.6"
Use : ./monitor_asterisk14.php host community type [warning] [critical]
host or ip address : your ip address
community : community for snmp
type : dahdi ( DAHDI Telephony Driver w/PRI )
mgcp ( Media Gateway Control Protocol (MGCP) )
bridge ( Bridge Interaction Channel )
sip ( Session Initiation Protocol (SIP) )
ustm ( UNISTIM Channel Driver )
console ( OSS Console Channel Driver )
local ( Local Proxy Channel Driver )
agent ( Call Agent Proxy Channel )
phone ( Standard Linux Telephony API Driver )
skinny ( Skinny Client Control Protocol (Skinny) )
iax2 ( iax2 Inter Asterisk eXchange Driver (Ver 2) )
h323 ( Objective Systems H323 Channel Driver )
channel_inuse ( Channels In Use (all types) )
active_calls ( Active Calls )
calls_processed ( Calls Processed )


เช่น ถ้าเราต้องการ monitor type calls_processed (ในที่นี้เครื่องปลายทางผมใช้ asterisk1.6 น่ะครับ)

# ./monitor_asterisk_snmp.php xxx.xxx.xxx public calls_processed
21[root@localhost ~]#


xxx.xxx.xxx = คือ ip address ของเครื่องปลายทางครับ

ส่วนค่า 21 คือค่า ของ calls_processed ครับ


ส่วนวิธีการ config nagios นั้นผมจะไม่ขอกล่าวถึงน่ะครับ เพราะ เราแค่เรียกใช้งาน script นี้ แล้ว ส่ง parameter ที่เราจะทำการ monitor เข้าไปครับ

File : monitor_asterisk_snmp.php

#!/usr/bin/php

4){
$host = $_SERVER["argv"][1];
$community = $_SERVER["argv"][2];
$type = $_SERVER["argv"][3];
$warning = $_SERVER["argv"][4];
$critical = $_SERVER["argv"][5];
}else{
echo "Use : ./monitor_asterisk_snmp.php host community type [warning] [critical]\n";
echo "type = sip , iax2 , dahdi , active_calls , channels_inuse , ... etc or help\n";
exit();
}


if(!empty($warning)){
if($critical ==""){
echo "Please, input critical\n";
exit();
}
if($warning >= $critical){
echo "Please, input critcal more than warning \n";
exit();
}
if(!is_numeric($warning)){
echo "Plase, input warning is integer only \n";
exit();
}
if(!is_numeric($critical)){
echo "Pleaes, input critical is integer only \n";
exit();
}
}
// check asterisk version
$ver = snmpget("$host","$community",".1.3.6.1.4.1.22736.1.1.1.0",200 );
if($ver !=""){
$ver = explode(" ",$ver);
$ast_ver = $ver[1];
$ver = substr($ast_ver,1,3);
}else{
echo "Wrong : Access denine\n";
exit();
}

if($ver=="1.6"){
$ver = "1_6";
}elseif($ver=="1.4"){
$ver = "1_4";
}

$rs_snmp="";
if($ver =="1_4"){
switch ($type){
case "phone" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.1";
break;
case "mgcp" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.2";
break;
case "agent" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.3";
break;
case "skinny" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.4";
break;
case "sip" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.5";
break;
case "iax2" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.6";
break;
case "zap" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.7";
break;
case "console" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.8";
break;
case "local" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.9";
break;
case "channels_inuse" :
$oid = ".1.3.6.1.4.1.22736.1.5.1.0";
break;
default :
$msg_err = "Asterisk version : $ast_ver\n";
$msg_err .= "Use : ./monitor_asterisk14.php host community type [warning] [critical]\n";
$msg_err .= "host or ip address : your ip address\n";
$msg_err .= "community : community for snmp \n";
$msg_err .= "type : phone ( Standard Linux Telephony API Driver )\n";
$msg_err .= "\t mgcp ( Media Gateway Control Protocol (MGCP) ) \n";
$msg_err .= "\t agent ( Call Agent Proxy Channel) \n";
$msg_err .= "\t skinny ( Skinny Client Control Protocol (Skinny) ) \n";
$msg_err .= "\t sip ( Session Initiation Protocol (SIP) )\n";
$msg_err .= "\t iax2 ( Inter Asterisk eXchange Driver (Ver 2) ) \n";
$msg_err .= "\t zap ( Zapata Telephony Driver w/PRI ) \n";
$msg_err .= "\t console ( OSS Console Channel Driver ) \n";
$msg_err .= "\t local ( Local Proxy Channel Driver ) \n";
$msg_err .= "\t channels_inuse ( Channels In Use (all types) )\n";
echo $msg_err;
exit( STATUS_UNKNOWN );
}// end switch

}elseif($ver == "1_6"){
switch ($type){
case "channels_inuse" :
$oid = ".1.3.6.1.4.1.22736.1.5.1.0";
break;
case "active_calls" :
$oid = ".1.3.6.1.4.1.22736.1.2.5.0";
break;
case "calls_processed";
$oid = ".1.3.6.1.4.1.22736.1.2.6.0";
break;
case "dahdi" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.1";
break;
case "mgcp" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.2";
break;
case "bridge" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.3";
break;
case "sip" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.4";
break;
case "ustm" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.5";
break;
case "console" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.6";
break;
case "local" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.7";
break;
case "agent" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.8";
break;
case "phone" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.9";
break;
case "skinny" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.10";
break;
case "iax2" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.11";
break;
case "h323" :
$oid = ".1.3.6.1.4.1.22736.1.5.4.1.7.12";
break;
default :
$msg_err = "Asterisk version : $ast_ver\n";
$msg_err .= "Use : ./monitor_asterisk14.php host community type [warning] [critical]\n";
$msg_err .= "host or ip address : your ip address\n";
$msg_err .= "community : community for snmp \n";
$msg_err .= "type : dahdi ( DAHDI Telephony Driver w/PRI )\n";
$msg_err .= "\t mgcp ( Media Gateway Control Protocol (MGCP) ) \n";
$msg_err .= "\t bridge ( Bridge Interaction Channel ) \n";
$msg_err .= "\t sip ( Session Initiation Protocol (SIP) ) \n";
$msg_err .= "\t ustm ( UNISTIM Channel Driver )\n";
$msg_err .= "\t console ( OSS Console Channel Driver ) \n";
$msg_err .= "\t local ( Local Proxy Channel Driver ) \n";
$msg_err .= "\t agent ( Call Agent Proxy Channel ) \n";
$msg_err .= "\t phone ( Standard Linux Telephony API Driver ) \n";
$msg_err .= "\t skinny ( Skinny Client Control Protocol (Skinny) )\n";
$msg_err .= "\t iax2 ( iax2 Inter Asterisk eXchange Driver (Ver 2) )\n";
$msg_err .= "\t h323 ( Objective Systems H323 Channel Driver )\n";
$msg_err .= "\t channel_inuse ( Channels In Use (all types) )\n";
$msg_err .= "\t active_calls ( Active Calls )\n";
$msg_err .= "\t calls_processed ( Calls Processed )\n";
echo $msg_err;
exit( STATUS_UNKNOWN );
}// end switch

} // end if check version

$rs_snmp = snmpget("$host","$community","$oid");
$rs_snmp = explode(" ",$rs_snmp);

if($warning != "" && $critical != ""){
if($rs_snmp[1] >= $critical){
echo $rs_snmp[1];
exit ( STATUS_CRITICAL );
}elseif ($rs_snmp[1] >= $warning){
echo $rs_snmp[1];
exit ( STATUS_WARNING );
}else{
echo $rs_snmp[1];
exit ( STATUS_OK );
} // end if

}else{
echo $rs_snmp[1];
exit( STATUS_OK );
}// end if($warning <> "" && $critical <> "")

?>

ป้ายกำกับ:

Install Asterisk1.6.2.6 ให้รองรับ snmp

ก่อนทำการ ติดตั้ง Asterisk ให้ทำการติดตั้ง packages net-snmp ซะก่อนน่ครับ
ถ้าเป็น CentOS ก็
# yum install net-snmp*
เลย ครับ
จากนั้น มาถึงขั้นตอนติดตั้ง Asterisk
#./configura
# make menuselect

จากนั้นให้เลื่อนมาที่ " Resource Modules " แล้วกด Enter ครับ
แล้วลองดูว่าที่ บรรทัด res_snmp ที่หน้าบรรทัด มีเครื่องหมาย * อยู่ในช่อง สี่เหลี่ยมหรือไม่
ถ้าเป็น

* res_snmp ก็แสดงว่า OK

แต่ ถ้าเป็น [xxx] แสดงว่ายัง Asterisk ยังไม่ support กับ snmp
ให้ลองเช็ค ดูด้วย ทำการติดตั้ง snmp ที่เครื่องหรือยัง


จากนั้นให้
กด Esc แล้วกด s เพื่อบันทึกแล้วออกจาก menuconfig
แล้ว ก็ติดตั้งตามปกติเลย ครับ
#make
#make install
#make samples
#make config

เมื่อติดตั้ง Asterisk เรียบร้อยแล้วให้ แก้ไขไฟล์ ดังนี้ครับ
vi /etc/asterisk/res_snmp.conf



[general]

subagent = yes
enabled = yes

จากนั้นให้เข้า Console ของ Asterisk ครับ แล้วสั่ง reload โมดูล res_snmp.so
#asterisk -r
CLI> module load res_snmp.so


จาก นั้นทำการ Config snmp.conf
vi /etc/snmp/snmpd.conf

ใส่บรรทัดเหล่านี้ไปในไฟล์ แก้ไขข้อมูลให้เหมาะสมกับระบบของเราครับ
rocommunity password
master agentx
com2sec local localhost password
com2sec mynetwork 192.168.1.99 password
group MyROGroup any local
group MyROGroup any mynetwork
view all included .1
access MyROGroup "" any noauth 0 all none none



โดยที่ password เป็น Community Name ครับเปรียบเสมือนกับเป็น Password ซึ่งถ้ามีใครส่ง SNMP มาแต่ใส่ Community Name มาไม่ถูกต้องมันก็จะไม่ยอมรับ ตั้งได้ตามใจชอบครับ, 192.168.1.99 เป็น IP Address ที่ Asterisk จะยอมรับให้ส่ง SNMP มาสอบถามข้อมูล ซึ่งถ้าเราลงโปรแกรม Cacti ที่เราจะใช้เป็นตัวดึงข้อมูล SNMP และนำมาแสดงเป็นกราฟบนเครื่องเดียวกันกับ Asterisk แล้วหล่ะก็ไม่ต้องมีบรรทัดนี้ก็ได้นะครับเพราะว่าเรามีบรรทัดที่เป็น localhost อยู่แล้ว


จากนั้นให้ทำการ restart service snmp ครับ
#service snmpd restart

จากนั้น ลอง Test snmp กับ Asterisk ดูครับ
#snmpwalk -On -c password -v 2c localhost .1.3.6.1.4.1.22736

จะได้ดังนี้ ครับ



SNMPv2-SMI::enterprises.22736.1.1.1.0 = STRING: "1.6.2.6"

SNMPv2-SMI::enterprises.22736.1.1.2.0 = Gauge32: 10602
SNMPv2-SMI::enterprises.22736.1.2.1.0 = Timeticks: (8246604) 22:54:26.04
SNMPv2-SMI::enterprises.22736.1.2.2.0 = Timeticks: (8246604) 22:54:26.04
SNMPv2-SMI::enterprises.22736.1.2.3.0 = INTEGER: 23030
SNMPv2-SMI::enterprises.22736.1.2.4.0 = STRING: "/var/run/asterisk/asterisk.ctl"
SNMPv2-SMI::enterprises.22736.1.2.5.0 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.2.6.0 = Counter32: 1
SNMPv2-SMI::enterprises.22736.1.3.1.0 = INTEGER: 179
SNMPv2-SMI::enterprises.22736.1.4.1.0 = INTEGER: 40
SNMPv2-SMI::enterprises.22736.1.4.2.0 = STRING: "us"
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.2 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.3 = INTEGER: 3
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.4 = INTEGER: 4
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.5 = INTEGER: 5
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.6 = INTEGER: 6
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.7 = INTEGER: 7
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.8 = INTEGER: 8
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.9 = INTEGER: 9
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.10 = INTEGER: 10
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.11 = INTEGER: 11
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.12 = INTEGER: 12
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.13 = INTEGER: 13
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.14 = INTEGER: 14
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.15 = INTEGER: 15
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.16 = INTEGER: 16
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.17 = INTEGER: 17
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.18 = INTEGER: 18
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.19 = INTEGER: 19
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.20 = INTEGER: 20
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.21 = INTEGER: 21
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.22 = INTEGER: 22
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.23 = INTEGER: 23
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.24 = INTEGER: 24
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.25 = INTEGER: 25
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.26 = INTEGER: 26
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.27 = INTEGER: 27
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.28 = INTEGER: 28
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.29 = INTEGER: 29
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.30 = INTEGER: 30
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.31 = INTEGER: 31
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.32 = INTEGER: 32
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.33 = INTEGER: 33
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.34 = INTEGER: 34
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.35 = INTEGER: 35
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.36 = INTEGER: 36
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.37 = INTEGER: 37
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.38 = INTEGER: 38
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.39 = INTEGER: 39
SNMPv2-SMI::enterprises.22736.1.4.3.1.1.40 = INTEGER: 40
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.1 = STRING: "be"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.2 = STRING: "de"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.3 = STRING: "pt"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.4 = STRING: "za"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.5 = STRING: "us-o"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.6 = STRING: "th"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.7 = STRING: "cz"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.8 = STRING: "dk"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.9 = STRING: "it"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.10 = STRING: "at"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.11 = STRING: "us"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.12 = STRING: "au"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.13 = STRING: "lt"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.14 = STRING: "br"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.15 = STRING: "jp"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.16 = STRING: "gr"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.17 = STRING: "no"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.18 = STRING: "pl"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.19 = STRING: "nl"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.20 = STRING: "ph"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.21 = STRING: "sg"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.22 = STRING: "se"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.23 = STRING: "ee"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.24 = STRING: "hu"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.25 = STRING: "ve"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.26 = STRING: "mx"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.27 = STRING: "ru"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.28 = STRING: "my"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.29 = STRING: "nz"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.30 = STRING: "uk"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.31 = STRING: "tw"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.32 = STRING: "cn"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.33 = STRING: "fi"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.34 = STRING: "cl"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.35 = STRING: "il"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.36 = STRING: "in"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.37 = STRING: "ch"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.38 = STRING: "fr"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.39 = STRING: "es"
SNMPv2-SMI::enterprises.22736.1.4.3.1.2.40 = STRING: "bg"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.1 = STRING: "Belgium"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.2 = STRING: "Germany"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.3 = STRING: "Portugal"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.4 = STRING: "South Africa"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.5 = STRING: "United States Circa 1950/ North America"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.6 = STRING: "Thailand"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.7 = STRING: "Czech Republic"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.8 = STRING: "Denmark"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.9 = STRING: "Italy"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.10 = STRING: "Austria"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.11 = STRING: "United States / North America"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.12 = STRING: "Australia"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.13 = STRING: "Lithuania"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.14 = STRING: "Brazil"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.15 = STRING: "Japan"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.16 = STRING: "Greece"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.17 = STRING: "Norway"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.18 = STRING: "Poland"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.19 = STRING: "Netherlands"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.20 = STRING: "Philippines"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.21 = STRING: "Singapore"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.22 = STRING: "Sweden"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.23 = STRING: "Estonia"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.24 = STRING: "Hungary"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.25 = STRING: "Venezuela / South America"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.26 = STRING: "Mexico"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.27 = STRING: "Russian Federation / ex Soviet Union"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.28 = STRING: "Malaysia"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.29 = STRING: "New Zealand"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.30 = STRING: "United Kingdom"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.31 = STRING: "Taiwan"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.32 = STRING: "China"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.33 = STRING: "Finland"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.34 = STRING: "Chile"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.35 = STRING: "Israel"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.36 = STRING: "India"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.37 = STRING: "Switzerland"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.38 = STRING: "France"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.39 = STRING: "Spain"
SNMPv2-SMI::enterprises.22736.1.4.3.1.4.40 = STRING: "Bulgaria"
SNMPv2-SMI::enterprises.22736.1.5.1.0 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.3.0 = INTEGER: 12
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.1 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.2 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.3 = INTEGER: 3
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.4 = INTEGER: 4
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.5 = INTEGER: 5
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.6 = INTEGER: 6
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.7 = INTEGER: 7
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.8 = INTEGER: 8
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.9 = INTEGER: 9
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.10 = INTEGER: 10
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.11 = INTEGER: 11
SNMPv2-SMI::enterprises.22736.1.5.4.1.1.12 = INTEGER: 12
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.1 = STRING: "DAHDI"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.2 = STRING: "MGCP"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.3 = STRING: "Bridge"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.4 = STRING: "SIP"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.5 = STRING: "USTM"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.6 = STRING: "Console"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.7 = STRING: "Local"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.8 = STRING: "Agent"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.9 = STRING: "Phone"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.10 = STRING: "Skinny"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.11 = STRING: "IAX2"
SNMPv2-SMI::enterprises.22736.1.5.4.1.2.12 = STRING: "OOH323"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.1 = STRING: "DAHDI Telephony Driver w/PRI"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.2 = STRING: "Media Gateway Control Protocol (MGCP)"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.3 = STRING: "Bridge Interaction Channel"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.4 = STRING: "Session Initiation Protocol (SIP)"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.5 = STRING: "UNISTIM Channel Driver"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.6 = STRING: "OSS Console Channel Driver"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.7 = STRING: "Local Proxy Channel Driver"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.8 = STRING: "Call Agent Proxy Channel"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.9 = STRING: "Standard Linux Telephony API Driver"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.10 = STRING: "Skinny Client Control Protocol (Skinny)"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.11 = STRING: "Inter Asterisk eXchange Driver (Ver 2)"
SNMPv2-SMI::enterprises.22736.1.5.4.1.3.12 = STRING: "Objective Systems H323 Channel Driver"
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.1 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.2 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.3 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.4 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.5 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.6 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.7 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.8 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.9 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.10 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.11 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.4.12 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.1 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.2 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.3 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.4 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.5 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.6 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.7 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.8 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.9 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.10 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.11 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.5.12 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.1 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.2 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.3 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.4 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.5 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.6 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.7 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.8 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.9 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.10 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.11 = INTEGER: 1
SNMPv2-SMI::enterprises.22736.1.5.4.1.6.12 = INTEGER: 2
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.1 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.2 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.3 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.4 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.5 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.6 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.7 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.8 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.9 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.10 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.11 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.4.1.7.12 = Gauge32: 0
SNMPv2-SMI::enterprises.22736.1.5.5.1.0 = Gauge32: 0




เพียงเท่านี้ เราก็สามารถใช้งาน snmp กับ asterisk ได้แล้วครับ


ส่วน ค่าไหน เป็นยังไงเด๋วผมค่า ลองนั่งงมๆ ดูก่อนครับ
ถ้าใครได้ยังไงแล้ว ช่วยบอกต่อด้วยน่ะครับ

ป้ายกำกับ:

monitoring sip trunk

อันนี้เป็น script สำหรับ monitor sip trunk แบบ authentication ผ่าน username/password น่ะครับ
ให้เอา script นี้ไปรันบนเครื่องที่ติดตั้ง และทำการ run asterisk ที่ใช้งานจริงอยู่น่ะครับ
ส่วนแบบ monitor sip trunk แบบ ip นี้ขอเวลา งม ก่อนถ้าได้ยังไงจะเอามาฝากอีกครับ

#!/usr/bin/php


$form = "name@domain.com";
$report_email = 'contact@domain.com';


$state = wots_up();

//echo "Status : [$state]\n";


if ($state == 'ok')

{
//grace, usually should go this route
exit;
}
else
{
//keep cool for 10 seconds, we try again.
sleep(10);
$state = wots_up();
$have_done = "We have retried in 10 seconds.\r\n";
}

if ($state == 'ok')

{
//lucky we tried
exit;
}
else
{
$have_done .= "Trying to reload the sip channels.\r\n";
$have_done .= shell_exec('/usr/sbin/asterisk -rx "module reload chan_sip"');
sleep(10);
$have_done .= "Reloaded sip channels and waited 10 seconds.\r\n";
$state = wots_up();
}
if ($state == 'ok')
{
//wipes the sweat
exit;
}

$status = "$have_done\r\n=====================have done above, the current status: =====================\r\n\r\n$status";

$status = str_replace("\n",'
',$status);


if($state=='requesting'){
$msg_err = 'Request Sent';
}elseif($state=='no_auth'){
$msg_err = 'No Authentication';
}elseif($state=='unregistered'){
$msg_err = 'Unregistered';
}elseif($state=='failed'){
$msg_err = 'Failed';
}elseif($state=='auth_sent'){
$msg_err = 'Auth. Sent';
}elseif($state=='rejected'){
$msg_err = 'Rejected';
}elseif($state=='timeout'){
$msg_err = 'Timeout';
}elseif($state=='unknown'){
$msg_err = 'Unknown';
}




$err = array("Request Sent","No Authentication","Unregistered","Failed","Auth. Sent","Rejected","Timeout","Unknown");

$status = str_replace($err,"$msg_err,"$status);
if ($state == 'requesting')
{
send_alert_email('Trunk has been sending registrating requests', $status);
}
elseif ($state == 'empty')
{
send_alert_email('Voip trunk registration status is empty', $status);
}
elseif ($state == 'no_auth')
{
send_alert_email('No Authentication is reported, wrong password?', $status);
}
elseif ($state == 'unregistered')
{
send_alert_email('We have Unregistered trunk', $status);
}
elseif ($state == 'failed')
{
send_alert_email('We have Registration failed trunk', $status);
}
elseif ($state == 'auth_sent')
{
send_alert_email('We have trunk with Auth. Sent status', $status);
}
elseif ($state == 'rejected')
{
send_alert_email('We have trunk with Rejected status', $status);
}
else
{
send_alert_email('Trunk status is not registered', "$state\r\n\r\n$status");
}

function wots_up()

{
global $status;

//Prob the trunk registration.
$status = shell_exec('/usr/sbin/asterisk -rx "sip show registry"');

if (strlen(trim($status)) == 0)
{
return 'empty';
}

$lines = explode("\n", str_replace("\r\n", "\n", trim($status)));


for ($i = 1; $i <> $temp = preg_split('/\s+/', $lines[$i]);
if (!isset($temp[3]))
{
return "Can not extract Reg State for this line: " . $lines[$i];
}
elseif ($temp[3] <> "Registered")
{
return "Unknown Reg state for this line: " . $lines[$i];
}
}
return 'ok';
}

function send_alert_email($subject, $msg = '')

{
global $report_email,$from;

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= "X-Priority: 1 (Higuest)\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "Importance: High\n";
$headers .= "From: $from\r\n";
mail($report_email, $subject, $msg, $headers);
}



?>

ป้ายกำกับ:

The Asterisk Monitor Web Panel

มีหลายๆคน ที่ทำเกี่ยวกับ VoIP (IP-PBX) โดยใช้ เจ้าตัว Asterisk นั้น ได้มาถามผมว่า มี Tools ตัวไหน
บ้างไหม อ่ะที่ สามารถ monitor ผ่าน web page เพื่อดูว่า มี user ไหน online อยู่บ้าง
ผมก็ได้ไป จ๊ะเอ๋ กับเจ้าตัว Monast [แต่ผมว่า Asterisk GUI ยัง work กว่าน่ะ]
งั้นก็มาเริ่มเรื่องกันเลยดีกว่า ไอเสือ ลุย

อันนี้ผมอ้างอิงกับ OS : Redhat Enterprise 5
ตัวนี้ supports กับ asterisk version 1.4 และ 1.6 ครับ

ขั้นแรก ก็
ทำการสร้าง directory ขึ้นมาเพื่อทำการเก็บ source ก่อนน่ะคับ

# mkdir monast

# cd monast

#svn checkout https://monast.svn.sourceforge.net/svnroot/monast/trunk/

เมื่อทำการโหลด source เสร็จเรียบร้อยแล้ว ก็ให้ทำการเพิ่มสิทธ์ ให้กับไฟล์ install.sh เพื่อให้สามารถทำการ execute ได้

# chmod +x install.sh

# ./install.sh

เมื่อทำการติดตั้งเสร็จแล้วก็ใ้ห้ทำการ แก้ไข ค่าต่างๆให้ถูกต้อง

filename : /etc/monast.conf

hostname = localhost
hostport = 5038
username = userasterisk
password = passasterisk

================================================

filename : /etc/asterisk/manager.conf

[general]
enabled = yes
webenabled = yes
port = 5038
bindaddr = 0.0.0.0


[userasterisk]
secret = passasterisk
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,config,command,reporting,originate

========================================================

จากนั้นก็ทำการ restart asterisk ก่อนครับ
เมื่อทำการ restart asterisk เรียบร้อยแล้ว ก็ให้ทำการสั่ง run

# /root/monast/pymon/monast.py
เมื่อ run ผ่านแล้วก็ให้ทำการเปิด Browser ไปที่ localhost/monast
ก็จะได้หน้าตาแบบนี้ครับ

แต่ถ้าขึ้นว่า

Monast Error

Could not connect to localhost:5039 (Connection refused).

Make sure monast.py is running so the panel can connect to its port properly.

ให้ตรวจสอบให้แน่ใจว่าได้ทำการ run /root/monast/pymon/monast.py อยู่

ป้ายกำกับ:

บันทึกเสียงโทร เข้าและโทรออก

ปกติการโทรเข้ามาในระบบ Agent จะสามารถบันทึกเสียงได้อยู่แล้ว (อ่าน วิธีการบันทึกเสียง Call Center เพิ่มเติม) แต่สำหรับการโทรเข้าหรือโทรออกโดยทั่วไปจะสามารถบันทึกเสียงได้เช่นกัน แต่จะต้องเขียนคำสั่งเพิ่มเติมใน Dial Plan วิธีการไม่ยุ่งยากอะไรเลย เพียงแต่เข้าใจวิธีเขียน DialPlan เท่านั้นเอง...

ปกติการโทรเข้ามาในระบบ แล้ว asterisk จะทำการหมุนโทรศัพท์ต่อไปยังเครื่องลูกที่เป็น SIP Client หรือเครื่องโทรศัพท์ทั่วไปอีกครั้งหนึ่ง และการโทรออกจากเครื่อง SIP Clent แล้ว Asterisk จะเป็นตัวสลับสายเพื่อโทรออกไปยัง Zap Channel ตามที่กำหนด

ทั้งหมดนี้จะเกิดขึ้นในไฟล์ /etc/asterisk/extensions.conf ซึ่งเป็นไฟล์เก็บ Dial Plan ทั้งหมดไว้

วิธีบันทึกสายโทรเข้า กรณีไม่ได้เป็น Agent

หลัง จากที่ Asterisk ได้รับสายเรียกเข้าจะต่อไปยังเครื่องโทรศัพท์ ด้วยคำสั่ง Dial(SIP/xxxx) ดังนั้นเราจะสั่งให้บันทึกเสียงก็เพิ่มคำสั่งให้บันทึกเพิ่ม ตัวอย่างเช่น

ปกติ

exten=>901,1,Dial(SIP/901)

แก้ไขใหม่ เพิ่มการบันทึก

exten=>901,1,Set(DATETIME=${STRFTIME(${EPOCH},,%C%y%m%d%H%M)})
exten=>901,n,Set(CALLFILENAME=${CALLERID(num)}-${DATETIME}-${EXTEN})
exten=>901,n,Monitor(gsm|${CALLFILENAME}|m)

คำสั่งบรรทัดที่ 1: set(DATETIME=${STRFTIME(${EPOCH},,%C%y%m%d%H%M)})
เป็นการกำหนดตัวแปร DATETIME เพื่อเก็บวันที่และเวลา รูปแบบที่เก็บจะเป็น YYYYMMDDHHMM

คำสั่งบรรทัดที่ 2: Set(CALLFILENAME= Set(CALLFILENAME=${CALLERID(num)}-${DATETIME}-${EXTEN})
เป็น การกำหนดตัวแปรชื่อ CALLFILENAME เพื่อกำหนดชื่อไฟล์ที่จะบันทึกโดยใช้ หมายเลขที่โทรเข้า-YYYYDDMMHHMM-หมายเลขเครื่อง ตัวอย่างเช่น 081XXXXXXX-200903201830-901 หมายถึงหมายเลข 081XXXXXXX โทรเข้ามาหาหมายเลข 901 เมื่อเวลา 18.30 วันที่ 20 มีนาคม 2009

คำสั่งบรรทัดที่ 3: Monitor(gsm|${CALLFILENAME}|m)
เป็น การกำหนดให้บันทึกเสียงการสนทนาโดยบันทึกรูปแบบไฟล์ gsm และเก็บไว้ในไฟล์ชื่อตามที่กำหนดรูปแบบไว้ในตัวแปร $CALLFILENAME บรรทัดที่ 2

วิธีบันทึกสายโทรออก

ปกติ

exten=>_02.,1,Dial(Zap/g0)

แก้ไขใหม่ เพิ่มการบันทึกเสียง

exten=>_02.,1,set(DATETIME=${STRFTIME(${EPOCH},,%C%y%m%d%H%M)})
exten=>_02.,n,Set(CALLFILENAME=OUT-${CALLERID(num)}-${DATETIME}-${EXTEN})
exten=>_02.,n,Monitor(gsm|${CALLFILENAME}|m)
exten=> _02.,n,Dial(Zap/g0/${EXTEN})
คำสั่งบรรทัดที่ 1-3 จะเหมือนตัวอย่างข้างบน เพียงแต่บรรทัดที่ 2 จะเพิ่มคำสั่ง OUT- นำหน้าชื่อไฟล์ที่บันทึกเสียงไว้เพื่อแยกให้เห็นว่าเป็นสายโทรออกให้ชัดเจน

ไฟล์ บันทึกเสียงทั้งหมดจะถูกบันทึกไว้ใน /var/spool/asterisk/monitor ซึ่งจะเป็นไฟล์แบบ gsm หากต้องการฟังถ้าจะให้ง่ายก็ต้องเปลี่ยนไฟล์ให้เป็นไฟล์แบบ wav เสียก่อนด้วยคำสั่ง

sox /var/spool/asterisk/monitor/ชื่อไฟล์.gsm /var/www/calls/ชื่อไฟล์.wav

คำ สั่งข้างบนจะเปลี่ยนไฟล์เสียงที่เป็นแบบ gsm ไปเป็นไฟล์แบบ wav และคัดลอกไปยังไดเรคทอรี /var/www/calls ซึ่งจะต้องสร้างไดเรคทอรี calls ไว้ก่อนเวลาจะเรียกฟังผ่านเว็บก็ระบุไดเรคทอรีได้เลย เช่น http://192.168.1.100/calls เป็นต้น

หลังจากใช้คำสั่ง sox แล้วไฟล์เดิมยังถูกเก็บไว้ใน /var/spool/asterisk/monitor/ ต้องสั่งลบเองนะครับ... อ่านเพิ่มเติมใน เขียนโปรแกรมแปลงไฟล์เสียง...

ป้ายกำกับ: ,

บันทึก เสียง Call Center

ครั้งก่อนได้กล่าวถึงการ สร้างคิวการรับโทรศัพท์ ไปแล้ว คราวนี้จะได้กล่าวถึงการบันทึกเสียงของ Agent ที่รับโทรศัพท์ ซึ่งการบันทึกเสียงถือว่าเป็นสิ่งสำคัญในการจัดระบบงาน Call Center เพื่อใช้ในการปรับปรุง และเป็นพยานมัดตัวพนักงาน Agent บางคนที่ทำผิดแล้วไม่ยอมรับผิด (กรณีมีเกิดขึ้นจริง ๆ ) และบางครั้งใช้ในการสอบสวนกรณีลูกค้าร้องเรียนเกี่ยวกับ Call Center หรือการแอบอ้างอื่น ๆ

วิธีการก็ไม่ยุ่งยากอะไรเพียงแต่แก้ไขที่ไฟล์ queues.conf และ agents.conf เหมือนเดิม....

ก่อนอื่นให้เข้าไปเพิ่มข้อความในไฟล์ queues.conf ดังนี้

[general]
monitor-type = MixMonitor
monitor-format = gsm|wav|wav49
monitor-join=yes

การ กำหนดประเภทของ monitor-type ให้เป็น MixMonitor หมายถึงการรวมไฟล์ที่บันทึกเสียง เพราะปกติการบันทึกจะแยกออกเป็นสองไฟล์คือ -in และ out ฝ่ายผู้โทรเข้ามาเป็น -in และผู้ให้บริการเป็น -out ซึ่งสะดวกสำหรับกรณีที่เสียงดังไม่เท่ากัน เราสามารถใช้โปรแกรมปรับแต่งเสียงให้เท่ากันก่อนรวมไฟล์ แต่ก็ยุ่งยากสำหรับการใช้งานโดยทั่วไป จึงกำหนดให้ระบบรวมไฟล์ให้อัตโนมัติจะดีกว่า

ตัวอย่างไฟล์ที่บันทึกเสียงแบบแยกไฟล์

agent-991-1237105282-2661-in.gsm
agent-991-1237105282-2661-out.gsm

และ ประเภทของไฟล์เสียงกำหนดให้เป็น gsm ซึ่งเป็นการเก็บไฟล์ที่มีขนาดน้อยที่สุดและคุณภาพพอรับได้ หรือเรียกว่าคุณภาพเสียงสนทนาทางโทรศัพท์ทั่วไป แต่วิธีการฟังเสียงจะไม่สามารถฟังได้ง่ายนัก ต้องอาศัยโปรแกรมแปลงเสียงอีก (ดูเพิ่มเติมเรื่องเขียนโปรแกรมแปลงเสียง gsm เป็น wav)

จากนั้นให้เข้าไปกำหนดในไฟล์ agents.conf เพิ่มเติมดังนี้

[agents]
recordagentcalls=yes
recordformat=gsm
monitor-join=yes
createlink=yes
savecallsin=/var/calls

เมื่อกำหนดข้อความในไฟล์ agents แล้วให้สร้าง ไดเรคทอรีชื่อ calls ใน /var เพื่อเก็บไฟล์ที่บันทึก

ป้ายกำกับ: , ,

การ ติดต้้ง Mobigater GSM Gateway for Asterisk

ข้อมูลเบื้องต้นของ mobigater

อุปกรณ์ที่รองรับ Mobile/GSM Channel
Download Script ในการติดตั้ง Mobigater for Asterisk โดยอัตโนมัติ

สำหรับผู้ใช้งาน CentOS4.X ครับ

Download more information on Mobigater Website

การติดตั้งสำหรับ Mobigater/Celliax Channel สำหรับ CentOS/Trixbox

ขั่นตอนการตรวจสอบ

ขั่นตอนแรกเป็นการตรวจสอบว่ามี mobigater อยู่ในระบบหรือไม่

# lsusb
การมี อุปกรณ์ ติดตั้งอยู่ในระบบเป็นที่เรียบร้อย จะต้องมี message เช่นดังต่อไปนี้
[localdomain ~]# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 003: ID 058f:9254 Alcor Micro Corp. Hub
Bus 001 Device 006: ID 058f:9720 Alcor Micro Corp. USB-Serial Adapter
Bus 001 Device 004: ID 04d9:1400 Holtek Semiconductor, Inc.
Bus 001 Device 005: ID 0d8c:000c C-Media Electronics, Inc. Audio Adapter

ขั่นตอนการติดตั้ง

1. update software ในระบบ

[root@asterisk1 ~]# yum -y update

1.1 หากเป็น Trixbox จำเป็นต้องทำการ ติดตั้ง Development Tools ด้วย

[root@asterisk1 ~]# yum -y install kernel-devel gcc gcc-c++
หรือในกรณีที่เป็น SMP (ดูได้จาก uname -a หากมีคำว่า SMP จะเป็น kernel แบบ smp)
[root@asterisk1 ~]# yum -y install kernel-devel-smp gcc

2. ติดตั้ง software ที่จำเป็นต่างๆ

[root@asterisk1 ~]# yum -y install alsa-lib-devel xorg-x11-devel
[root@asterisk1 ~]# ldconfig

3. update ALSA software ให้เป็น version ใหม่

[root@asterisk1 ~]# cd
[root@asterisk1 ~]# mkdir alsarpm
[root@asterisk1 ~]# cd alsarpm
[root@asterisk1 alsarpm]# wget -c ftp://ftp.pbone.net/mirror/atrpms.net/el4-i386/atrpms/stable/libasound2-1.0.13-32.el4.at.i386.rpm
[root@asterisk1 alsarpm]# wget -c ftp://ftp.pbone.net/mirror/atrpms.net/el4-i386/atrpms/stable/alsa-utils-1.0.13-22.el4.at.i386.rpm
[root@asterisk1 alsarpm]# wget -c ftp://ftp.pbone.net/mirror/atrpms.net/el4-x86_64/atrpms/stable/alsa-lib-devel-1.0.13-32.el4.at.i386.rpm
[root@asterisk1 alsarpm]# wget -c ftp://ftp.pbone.net/mirror/atrpms.net/el4-i386/atrpms/stable/alsa-lib-1.0.13-32.el4.at.i386.rpm
[root@asterisk1 alsarpm]# rpm -U --nosignature *
[root@asterisk1 alsarpm]# reboot

4. download และ ติดตั้ง chan_celliax

[root@asterisk1 ~]# cd /usr/src
[root@asterisk1 src]# wget http://downloads.digium.com/pub/asterisk/releases/asterisk-1.4.18.1.tar.gz
[root@asterisk1 src]# tar zxf asterisk*
[root@asterisk1 asterisk]# cd asterisk*
[root@asterisk1 asterisk]# ./configure
[root@asterisk1 asterisk]# make
[root@asterisk1 asterisk]# cd ..
[root@asterisk1 src]# wget http://www.mobigater.com/downloads/asterisk/Astersk_and_MobiGater_EN.zip
[root@asterisk1 src]# wget -c http://www.celliax.org/celliax_stuff.tgz
[root@asterisk1 src]# tar xzf celliax_stuff.tgz
[root@asterisk1 src]# unzip Astersk_and_MobiGater_EN.zip
[root@asterisk1 src]# cp ./Astersk_and_MobiGater_EN/Makefile ./celliax_stuff/build/Makefile
[root@asterisk1 src]# cd ./celliax_stuff/build

[root@asterisk1 src]# หากเป็น asterisk 1.4 อาจแก้ Makefile ให้เป็นตามข้อมูลถัดไปได้ ทันที
**notes**
ข้อมูลที่ยกมาเป้นตัวอย่างอิงกับ asterisk version 1.4.18.1
#ASTERISK INCLUDE FILES
#The directory containing the Asterisk include files (eg: /usr/include or /usr/include/asterisk or /usr/src/asterisk/include or ...)
AST_INCLUDE_DIR=/opt/asterisk/include
#ASTERISK INCLUDE FILES
#The directory containing the Asterisk include files (eg: /usr/include or /usr/include/asterisk or /usr/src/asterisk/include or ...)
AST_INCLUDE_DIR=/usr/src/asterisk-1.4.18.1/include/
#ASTERISK VERSION 1.4.XX
#Uncomment the following line if you are compiling for Asterisk 1.4 series
#Comment out if you are compiling for Asterisk 1.2 series
CFLAGS+=-DASTERISK_VERSION_1_4
#ASTERISK VERSION 1.2.XX
#Uncomment the following line if you are compiling for Asterisk 1.2 series
#Comment out if you are compiling for Asterisk 1.4 series
#CFLAGS+=-DASTERISK_VERSION_1_2
#SKYPE SUPPORT
#Uncomment the following two lines if you DO NOT WANT SKYPE SUPPORT in Linux (so, no libX11 needed)
CFLAGS+=-DNO_SKYPE
SKYPE_LIB=
#Comment out the following line if you DO NOT WANT SKYPE SUPPORT in Linux (so, no libX11 needed)
#SKYPE_LIB=-L/usr/X11R6/lib -lX11


[root@asterisk1 build]# sed 's/.at_dial_post_number = \"S\\\"\",/.at_dial_post_number = \";\",/' < /usr/src/celliax_stuff/build/chan_celliax.c > /usr/src/celliax_stuff/build/chan_celliax.c.tmp
[root@asterisk1 build]# mv -f /usr/src/celliax_stuff/build/chan_celliax.c.tmp /usr/src/celliax_stuff/build/chan_celliax.c
[root@asterisk1 build]# make clean
[root@asterisk1 build]# make
[root@asterisk1 build]# cp chan_celliax.so /usr/lib/asterisk/modules/
[root@asterisk1 build]# chown root:asterisk /usr/lib/asterisk/modules/chan_celliax.so
[root@asterisk1 build]# chmod 640 /usr/lib/asterisk/modules/chan_celliax.so

5. ทำการ reboot เครื่อง server

[root@asterisk1 build]# reboot

ตัวอย่าง Configuration Files

1. /etc/asterisk/celliax.conf
ใช้ในการตั้งค่าของ Celliax

;;
; Celliax Asterisk Driver
;
; The first interface (mobigater1 )
[mobigater1]
language=en
context=Internal
extension=mobigater1
;
;debug_all=yes
debug_at=yes
;debug_fbus2=yes
debug_serial=yes
debug_pbx=yes
;debug_sound=yes
;debug_locks=yes
;debug_skype=yes
debug_call=yes
;debug_cvm=yes
skype=no
control_device_protocol=AT
control_device_speed=57600
control_device_name=/dev/ttyACM0 ; this is the first USB serial port in Linux
cvm_volume_level = 8 ; volume level control in CVM (0-9)
need_acoustic_ring=0
playback_boost=+15 ; for integrated mobo audio for motorola c650
capture_boost=0 ;for integrated mobo audio for motorola c650
alsa_period_size=32
alsa_periods_in_buffer=32
alsa_capture_device_name=plughw:0
alsa_playback_device_name=plughw:0
at_dial_pre_number=ATD
at_dial_expect=OK
at_hangup=ATH
at_hangup_expect=OK
at_answer=ATA
at_answer_expect=OK
at_initial_pause=500000
at_preinit_1=atciapa ; nonsense entry, just to show the preinit
at_preinit_1_expect=OK
at_after_preinit_pause=1000000
at_postinit_1=atcucu ; nonsense entry, just to show the postinit
at_postinit_1_expect=OK
at_postinit_2=AT+CKPD="EEE"
needed on c650***
at_postinit_2_expect=OK
at_query_signal=AT+CSQ
at_query_signal_expect=OK
at_indicator_noservice_string=+CIEV: 2,0
at_indicator_nosignal_string=+CIEV: 5,0
at_indicator_lowsignal_string=+CIEV: 5,1
at_indicator_nocallsetup_string=+CIEV: 6,0
at_call_idle=+MCST: 1
at_call_failed=+MCST: 65

2. /etc/asterisk/extensions.conf
สำหรับ Asterisk Dialplan ในการโทรออก

[Mobile]
exten => _08.,1,Answer()
exten => _08.,n,Dial(Celliax/mobigater1:${EXTEN})
exten => _08.,n,Hangup

3. /etc/asterisk/modules.conf

ต้องทำการเพิ่ม
noload => chan_alsa.so
noload => chan_oss.so

ปัญหาที่อาจพบได้

1. Files Permission หรือ ไม่สามารถ start asterisk
หากไม่สามารถ start asterisk (ในกรณีที่ไม่ได้ใช้ root เป็นผู้ run asterisk) ให้ลองเช็ค permission ของ "/dev" ที่เกี่ยวข้อง เช่น

/dev/ttyACM*
/dev/ttyS*
/dev/snd

ซึ่งอาจแก้ไขโดยการ run script ด้านล่างก่อน start asterisk

chown -R asterisk:asterisk /dev/snd*
chown -R asterisk:asterisk /dev/ttyACM*
chown -R asterisk:asterisk /dev/ttyUSB*
chown -R asterisk:asterisk /dev/ttyS*
chown -R asterisk:asterisk $ASTRUNDIR
chown -R asterisk:asterisk /etc/asterisk


2. celliax_call dialing failed:

ตรวจสอบค่าใน celliax.conf หรือ copy ค่าด้านบนไปใช้งาน

3. ไม่พบ /dev/ttyACM0

run "modprobe cdc-acm"

4. ไม่มีเสียง

ตรวจสอบความดังของเสียงโดย "alsamixer -c0" เพื่อตั้งค่าของ gain ต่างๆ
"alsactl store" เพื่อ save ค่า

ป้ายกำกับ: , ,

สร้างระบบคิว ด้วย asterisk

จริง ๆ แล้วถ้าหากไม่ต้องใช้ระบบคิวกับระบบบันทึกเสียงแล้ว ผู้เขียนอาจจะไม่ได้เข้ามาอยู่ในวงการ IP-PBX อย่างแน่นอน เพราะคงต้องใช้บริการตู้สาขาธรรมดา ๆ สักเครื่องหนึ่ง ราคาไม่กี่หมื่นบาท

แต่ความจำเป็นที่ต้องใช้ระบบคิวและการบันทึกเสียงนี่แหละจึงเกิดเป็น IPBX-System ขึ้นมา

ระบบ Call Center สิ่งที่ขาดไม่ได้คือการจัดลำดับการให้บริการหรือการจัดคิว (Queue Call) ไม่เช่นนั้นแล้ว คนที่อยู่สายแรกจะรับสายมากกว่าคนอื่น และคนอยู่ลำดับสุดท้ายก็สบายกว่าเพื่อ...

การสร้างระบบคิวใน Asterisk เป็นเรื่องง่าย เพราะใช้ไฟล์ queues.conf และ agents.conf เป็นตัวกำหนดรายละเอียดต่าง ๆ (sip.conf และ extensions.conf ละไว้ในฐานที่เข้าใจนะครับ เพราะเป็นพื้นฐานของระบบ)

ก่อน อื่นเราต้องกำหนดเสียก่อนว่าจะให้ระบบมีกี่ Agent และมีกี่คิว เพราะ Agent หนึ่งจะสามารถรับสายได้หลายคิวนี่เป็นข้อดีของ Asterisk สำหรับใช้ในกรณีที่ขาดแคลนบุคลากร แต่ยังต้องมีหลายคิว

กำหนด queues.conf

ให้ เพิ่มเซ็กชันชื่อคิวตามที่เราต้องการในตัวอย่างใช้คิว CallCenter ในรายละเอียดกำหนดให้ใช้เพลงรอสาย และที่สำคัญคือ strategy ในตัวอย่างกำหนดเป็น rrmemory เป็นการเข้าคิวแบบหมุนวนจนครบรอบ และ timeout=15 คือกำหนดให้รอสายในคิว 15 วินาทีถ้าไม่มีใครรับจะวิ่งไปยัง Agent ถัดไป และ member จะกำหนดรหัส Agent ที่จะให้บริการใน queue

[CallCenter]
music=default
strategy=rrmemory
timeout=15
retry=5
wrapuptime=0
maxlen = 0
announce-frequency = 0
announce-holdtime = no
member => Agent/901
member => Agent/902
member => Agent/903

กำหนด agents.conf

ให้เพิ่มรายชื่อผู้ที่จะเป็นผู้ให้บริการในระบบคิวต่อท้ายไฟล์ agents.conf เหมือนตัวอย่าง

agent => 901,901,Agent 1
agent => 902,902,Agent 2
agent => 903,903,Agent 3

รูปแบบในการกำหนดคือ

agent=>agent code, agent password, agent name

agent code คือ รหัสของ Agent จะกำหนดเหมือนหรือแตกต่างกับหมายเลขเครื่องหรือ SIP Number ก็ได้
agent password
คือ รหัสผ่านของ Agent ให้กำหนดเป็นตัวเลขเท่านั้น เพราะจะต้อง Login ผ่านเครื่องรับโทรศัพท์
agent name
คือ ชื่อของ Agent ให้กำหนดเป็นภาษาอังกฤษ

กำหนด Extension สำหรับ Login

การ ล็อกอินผ่านเครื่องโทรศัพท์เราต้องการกำหนดให้มี Extension สำหรับล็อกอินเพื่อเรียกใช้ฟังค์ชัน AgentCallbackLogin() วิธีการให้เพิมบรรทัดตามตัวอย่างด้านล่างไว้ในส่วน [default] ของไฟล์ extensions.conf

exten=>9876,1,AgentCallbackLogin(||${CALLERIDNUM}@default)

ตัวอย่าง นี้กำหนดให้กดปุ่ม 9876 เพื่อล็อกอินหรือล็อกเอ้าท์ โดยการใช้งานจะต้องกดปุ่ม # เพื่อเลือกการทำงาน ให้คิดง่าย ๆ # คือปุ่ม Enter นั่นเอง โดยมีขั้นตอนคือ

  1. กดปุ่ม 9876# แล้วจะมีเสียงตอบรับให้กดหมายเลขรหัส Agent ที่จะล็อกอิน
  2. กดรหัส Agent ที่จะล็อกอิน ตัวอย่างเช่น 901#
  3. กดรหัสผ่านของ Agent ตัวอย่างเช่น 901#
  4. กดหมายเลขเครื่องที่จะใช้งานปกติจะเป็นเครื่องที่ Agent นั่งทำงานนั่นแหละ ตัวอย่างเช่น 901#

ใน ขั้นตอนที่ 4 เราสามารถกำหนดให้ใช้หมายเลขเครื่องใดก็ได้ตราบที่ยังมีรหัสใน extensions.conf ซึ่งตรงนี้แหละมักจะเป็นปัญหาบางครั้งผู้ใช้ใส่หมายเลขเครื่องผิดทำให้ โทรศัพท์ไปโผล่อีกเครื่องหนึ่ง และการล็อกเอ้าท์ก็ไม่ต้องกำหนดหมายเลข เครื่องโดยให้กดปุ่ม # เพียงอย่างเดียวในขั้นตอนที่ 4

ทดสอบระบบคิว

วิธี การทดสอบระบบคิวที่สร้างขึ้นว่าจะสามารถใช้งานได้หรือไม่ให้สร้าง extension ใหม่ขึ้นมาเพื่อให้เราสามารถโทรเข้าไปตรวจสอบได้ เช่น

exten=> 500,1,Answer
exten=> 500,2,Ringing
exten=> 500,3,Wait(2)
exten=> 500,4,Queue(CallCenter)
exten=> 500,5,Hangup

หลังจากนั้นลองกดโทรไปหมายเลข 500 ระบบคิวจะทำงานตามที่เรากำหนดทั้งใน extensions.confและ queues.conf

กำหนดให้ตอบรับคิวเมื่อมีการโทรมาจากสายนอก

สุด ท้ายเราต้องกำหนดในไฟล์ extensions.conf ในส่วน [default] เพื่อกำหนดให้ระบบคิวทำงานทันทีที่มีสายเรียกเข้า ให้เพิ่ม extension s ไว้ใน [default] ตามตัวอย่าง

[default]
exten=>s,1,Answer()
exten=>s,n,Queue(CallCenter)
...

จาก ตัวอย่างนี้จะเป็นวิธีการแบบง่าย ๆ เมื่อมีการโทรเข้าระบบจะตัดเข้าคิวทันทีโดยไม่มีการทำรายการใด ๆ ถ้าต้องการให้มีเสียงทักทายเป็นระบบ IVR ก่อนก็สามารถเพิ่มก่อนคำสั่ง Queue ได้

บางบริษัทจะมีเสียงแจ้งให้ลูกค้ากดหมายเลขภายในที่ทราบ หรือถือสายรอสักครู่ ก็สามารถทำได้เหมือนตัวอย่างด้านล่างนี้

[default]
exten=>s,1,Answer()
exten=>s,n,Background(custom/00&custom/01)
exten=>s,n,WaitExten(5)
exten=>s,n,Queue(CallCenter)

exten=>_XXX,1,Dial(SIP/${EXTEN})
...

จาก ตัวอย่างมีรายการเพิ่ม 3 บรรทัดคือ Background เป็นการสั่งให้เปิดไฟล์เสียง ตัวอย่างให้เปิดไฟล์ /var/lib/asterisk/sounds/custom/00.gsm และ 01.gsm และบรรทัดต่อมา WaitExten(5) ให้หยุดรอลูกค้ากดหมายเลขภายใน 5 วินาที ถ้าไม่มีการกดปุ่มใด ๆ ภายในเวลาที่กำหนดก็จะเข้าคิว CallCenter ในบรรทัดต่อมาแต่ถ้ามีการกดปุ่ม ก็จะต่อโทรศัพท์ไปยังหมายเลขอื่น ๆ ที่กำหนดไว้ใน extensions.conf ซึ่งตัวอย่างใช้วิธีง่าย ๆ คือ _XXX กำหนดให้เมื่อผู้โทรกดหมายเลขอะไรก็ได้ 3 หลักจะต่อโทรศัพท์ไปตามเครื่องที่กำหนด เช่น กด 901 ก็จะต่อสายไป SIP/901

ป้ายกำกับ: ,

ระบบ VoIP ทำงานอย่างไร

การทำงานของ VoIP หากจะอธิบายกันง่ายๆ ก็คือการส่งเสียงผ่านระบบ IP เนทเวอร์ค ซี่งสามารถนำมาใช้งานกับระบบโทรศัพท์ได้ โดยการส่งสัญญาณเสียงไปทั้งสองฝั่งคู่สนทนาทำให้สามารถทำการสนทนากันได้

ซึ่งอุปกรณ์ที่จะนำมาใช้งานในระบบ VoIP จึงต้องสามารถทำการแปลงสัญญาณเสียงจากเครื่องโทรศัพท์ ให้เป็นสัญญาณดิจิตอลในรูปแบบของข้อมูลระบบเครือข่าย(data packet) และนำส่งไปบนระบบเนทเวอร์คได้


จะเห็นได้ว่าหากเราสามารถส่งข้อมูลเสียงไปบนระบบ IP เนทเวอร์ ที่ใช้กันอยู่ภายในองค์กรที่เรียกกันว่าระบบ LAN หรือบนระบบ internet ที่เราใช้งานกันอยู่ทุกวันได้นั้น ข้อมูลเสียงก็จะเป็นเสมือนข้อมูล data ทั่วๆไป (เช่น e-mail, web, ftp) ซึ่งจะถูกส่งไปยังปลายทางได้โดยไม่มีค่าใช้จ่ายเพิ่มเติมนอกจากค่า internet ที่มีอยู่เดิมแล้ว ฉะนั้นการใช้งาน VoIP ที่ผ่านระบบเครือข่ายเนทเวอร์ค จึงไม่มีค่าใช้จ่ายในการใช้งานใดๆทั้งสิ้น


แต่ผู้ใช้งานบางท่าน อาจถามว่าทำไมการโทรศัพท์ผ่านผู้ให้บริการ VoIP จึงมีค่าใช้จ่าย เหตุผลเป็นเพราะว่า การโทรศัพท์ผ่านผู้ให้บริการ VoIP ในกรณีที่โทรไปยังเครื่องโทรศัพท์บ้านหรือโทรศัพท์มือถือนั้น ผู้ให้บริการมีค่าใช้จ่ายในการ เชื่อมสัญญาณจากระบบ VoIP ไปยังระบบโทรศัพท์พื้นฐาน จึงก่อให้เกิดค่าใช้จ่ายขึ้น อนึ่งค่าใช้จ่ายที่เกิดขึ้นนั้นเป็นค่าใช้งานโทรศัพท์ภายในพื้นที่นั้นๆเท่า นั้นจึงจะเห็นได้ว่าค่าโทรศัพท์ผ่าน VoIP นั้นจะมีราคาถูกกว่าการโทรศัพท์ผ่านระบบพื้นฐานอยู่มาก

จะเริ่มใช้ งาน Asterisk ต้องมีอะไรบ้าง

การเริ่มใช้งาน asterisk เริ่มจากการหาข้อมูลของระบบ asterisk ให้ตรงกับความต้องการใช้งานที่จะเกิดขั้นในอนาคต ทั้งนี้ยังขึ้นอยู่กับการดูแลรักษาระบบ ซึ่งเป็นส่วนสำคัญของการใช้งาน opensource software โดยทั้วๆไป

ซึ่งหากมีการใช้งานที่ไม่มากนักหรือไม่มีความ สำคัญมากอาจทำการ ทดลองและใช้งานได้โดยตัวเองหรือผู้ดูแลระบบในบริษัท แต่หากว่าต้องการใช้งานในส่วนที่มีความสำคัญมาก การใช้ที่ปรึกษาหรือบริษัทภายนอกที่มีประสพการณ์มาจัดการติดตั้งระบบให้จะดู เป็นการเหมาะสมกว่า

สำหรับมือใหม่ asterisk

ควรเริ่มต้นการ software รวมหรือ free IP-PBX software ที่ได้มีการรวม ระบบ asterisk พร้อมทั้งระบบจัดการต่างๆ สำหรับระบบ asterisk อยู่ในชุดเดียวกันซึ่งเป็นซึ่งที่ง่ายที่สุดในการเริ่มต้นการใช้งาน ซึ่ง softwae package ที่มีอยู่ใน internet ที่น่าใช้งานมีดังนี้


ซึ่งที่จำเป็นสำหรับระบบ asterisk

1. IP-PBX Software

2. Computer/Server

3. การ์ดสายนอก

4. softphone หรือ เครื่อง ip-phone

Elastix

http://www.elastix.org

Elastix เป็น software น้องใหม่ที่รวมรวมการทำงานของระบบ IP-PBX ได้อย่างครบครั้น โดย หน้า web-interface ของ elastix นั้นได้ทำการ integrate software หลายๆตั้วได้เสมือนเป็น software ตั้วเดียวกัน อีกที้งยังมี graphic ที่สวยงามน่าใช้อีกด้วย

Trixbox

Trixbox หรือ Asterisk@Home เป็นชุด software ที่มีการรวม application ต่างๆที่จำเป็นต่อระบบ asterisk ไว้เป็นจำนวนมาก ซึ่งสามารถนำมาใช้งานที่บ้านหรือในองค์กรณ์เป็น IP-PBX อย่างเต็มรูปแบบ ได้ทันที ทั้งนี้การติดตั้งก็มีความง่ายดาย และใช้เวลาติดตั้งไม่เกิน 2 ชั่วโมง ก็จะได้ เครื่อง IP-PBX แบบ full-feature ที่สามารถนำมาใช้งานได้จริงทันที


Trixbox ได้มีการรวม software คร่าวๆดังนี้

1.1 trixbox dashboard

1.2 โปรแกรม Asterisk

1.3 โปรแกรมสำหรับการตั้งค่าผ่านเวป "FreePBX"

1.4 โปรแกรม CRM "SugarCRM"

1.5 Munin

1.6 โปรแกรมแสดงสถานะการใช้งาน HUDLite

1.7 โปรแกรม IVRGraph

1.8 โปรแกรม phpMyAdmin

1.9 โปรแกรม Webmin

www.trixbox.com สามารถเข้าไปดูข้อมูลเพิ่มเติมและ download ได้จาก trixbox website ตามนี้

Software-AsteriskNOW

AsteriskNOW เป็น software สำเร็จรูปของผู้พัฒนาระบบ asterisk โดยมาพร้อมกับ web-interface และการติดตั้งที่ง่าย ซึ่งการใช้งานอาจดูง่ายกว่า Trixbox เนื่องจากการติดตั้งนั้นมาพร้อมกับ software ที่จำเป็นเท่านั้น

www.asterisknow.org สามารถเข้าไปดูข้อมูลเพิ่มเติมและ download ได้จาก asterisknow website ตามนี้

Computer/Server

เครื่อง computer ที่จะนำมาใช้งานกับ asterisk ได้นั้นต้องเป็นเครื่องที่สามารถลงระบบปฎิบัติการ linux ได้เท่านั้น อีกทั้งยังต้องรองรับการทำงานกับการ์ดสายนอกอีกด้วย

ความสามารถของเครื่องที่จะนำมาใช้งานขึ้นอยู่ กับหลายปัจจัยเช่น

1. จำนวน extension หรือ จำนวนเครื่อง VoIP phone ที่จะมาเชื่อมกับระบบ

2. codec หรือ การเทคนิกการบีบอัดข้อมูลเสียงที่จะนำมาใช้งาน

3. application ต่างๆที่จะใช้งาน เช่น conference, Voicemail, Voice Recorder etc.


ซึ่งในเบื้องต้น เราสามารถนำ computer เก่าที่ไม่ได้ใช้งานแล้วมาใช้งานในช่วงแรกก่อนก็เป็นได้ โดย เครื่องระดับ celeron466 ก็สามารถรองรับการใช้งานในองค์กรหรือบ้านที่มีผู้ใช้งานได้ราว 10 คนแล้ว

การ์ดสายนอก

การจะทำให้ asterisk สามารถคุยกับระบบโทรศัพท์ได้จริงนั้น จำเป็นต้องติดตั้ง การ์ดโทรศัพท์สายนอก หรือที่เรียกว่า FXO พอร์ดการ์ด ซึ่งใช้ในการเชื่อมต่อกับสายโทรศัพท์ที่มาจาก True, Tot, หรือ TT&T เพื่อที่จะให้ asterisk นั้นสามารถโทรศัพท์ออกไปยังที่อื่นๆได้

การ์ดสายนอกนั้นมีหลากหลายยี่ห้อ และ หลากหลายคุณสมบัติ แต่สำหรับการเริ่มต้นหรือการทดลองใช้งานอาจเริ่มต้นการ การ์ด 1 พอร์ทที่มีราคาไม่สูงมากก่อนก็เป็นได้

ซึ่งการ์ดสายนอกที่เหมาะสำหรับการTest ราคาไม่สูงมากและติดตั้งได้ง่ายกับระบบ asterisk มีเช่น card x100P compatible

ข้อมูลของการ์ด AX-100P จากบริษัท ATCOM

หากต้องการใช้งานลองติดต่อไปที่บริษัทพอยซ ตามเบอร์ติดต่อจากหน้าแรก บอกว่ามาจาก web asteriskdiy.com จะได้ราคาพิเศษครับ

softphone หรือ เครื่อง ip-phone

เครื่อง IP-PHONE สำหรับการ ลองใช้งานระบบ asterisk นั้นถ้าต้องการให้รองรับการใช้งาน IAX2 หรือ โปรโตคอลของ asterisk ที่มีความสามารถบางอย่างที่เหนือกว่า SIP ด้วยนั้น อาจจะขอแนะนำเป็นเครื่องโทรศัพท์ที่สามารถใช้งานได้กับทั้ง SIP และ IAX2 ซึ่งในท้องตลาดนั้นมีอยู่หลายยี่ห้อ แต่ที่มีขายในประเทศไทยจะเป็นของ ATCOM หรือ PLEXTEL ซึ่งอาจเป็นรุ่น AT-510 หรือ AT-530 ก็ได้โดย AT-510 นั้นเป็นรุ่นที่ราคา AT-530 โดยมี function ต่ำกว่า AT-530 ครับ


ระบบ Asterisk คืออะไร และทำงานอย่างไร

Asterisk คือ opensource software ที่ทำหน้าที่หลักเป็น Softswitch, IP-PBX หรือที่เรียกว่าตู้ชุมสายโทรศัพท์ระบบ IP ซึ่งมีหน้าที่ในการควบคุมและจัดการบริหาร การเชื่อมต่อ ระหว่างอุปกรณ์โทรศัพท์ผ่านเครื่องข่ายเนทเวอร์ค อีกทั้งยังสามรถเพิ่มเติมประสิทธิ์ภาพและความสามารถในการทำงานได้โดยง่าย

ความสามารถของ Asterisk

1. Switch (PBX) ตู้ชุมสาย

Asterisk สามารถทำหน้าเป็นอุปกรณ์สลับสายโทรศัพท์ไม่ว่าจะเป็นระบบ IP หรือ hybridge, สามรถทำการตั้งค่าเส้นทางการของการโทรศัพท์โดยตัวเอง, สามารถเพิ่มเติม feature ได้เช่น (ระบบ Voicemail, IVR), รองรับการเชื่อมต่อกับระบบโทรศัพท์พื้นฐานไม่ว่าจะเป็นแบบ analog หรือ digital (ISDN)

2. Gateway

สามารถทำหน้าเป็นอุปกรณ์ที่ใช้ในการเชื่อมต่อระหว่าระบบโทรศัพท์พื้นฐานกับ ระบบ VoIP

3. Feature & Media Server

อีกความสามารถของ Asterisk คือสามารถทำเป็น ระบบตอบรับหรือระบบการประชุมทางโทรศัพท์ เพื่อให้ทำงานเข้ากับระบบโทรศัพท์ที่มีอยู่เดิม ได้อีกด้วย

ตัวอย่างการ implementation เช่น สามารถทำเป็น IVR หรือระบบตอบรับ ให้กับตู้ชุมสาย (pabx) เดิมที่ไม่มีระบบตอบรับ

4. Call Center

รองรับการทำงานของระบบ Call-Center อย่างเต็มรูปแบบ เช่น ACD, Queue, IVR, Skill-based routing, etc.

ระบบที่จำเป็นต่อ Asterisk

1. OS ระบบปฎิบัติการ

Linux, OpenBSD, FreeBSD, MAC OS X

2 PC Hardware อาจเป็นเครื่อง PC หรือ Server ที่สามารถลงระบบปฏิบัติการ linux ได้

2.1 การ์ดสายนอกเพื่อเชื่อมต่อกับสายโทรศัพท์ทั้งระบบ Digital หรือ Analog มีทั้งที่ติดตั้งภายในเครื่อง หรือ ผ่าน USB Port นอกเครื่อง Server

2.2 เครื่อง Server

Protocol ที่ Asterisk รองรับ

H.323, Session Initiation Protocol (SIP), Media Gateway Control Protocol (MGCP), and Skinny Client Control Protocol (SCCP) และ Inter-Asterisk eXchange (IAX™)

Features ที Asterisk รองรับ

Call features

ADSI On-Screen Menu System

Alarm Receiver

Append Message

Authentication

Automated Attendant (ระบบตอบรับอัตโนมัติ)

Blacklists (การทำ backlist ใช้ในการ filter ผู้ใช้งานโทรศัพท์ที่โทรเข้าได้)

Blind Transfer (การโอนสายแบบโอนขาด หรือ โอนโดยไม่ถามผู้ที่เราจะโอนไปหาก่อน)

Call Detail Records (การจัดเก็บข้อมูลการโทรศัพท์ในระบบโดยระเอียด)

Call Forward on Busy (การโอนสายไปยังผู้อื่นในกรณ์ที่สายนั้นๆไม่ ว่าง)

Call Forward on No Answer (การโอนสายไปยังผู้อื่นในกรณ์ที่สายนั้นๆ ไม่รับสาย)

Call Forward Variable

Call Monitoring (การดู status (ipaddress,ping time) ของ Client ที่เชื่อมต่อมายังระบบ)

Call Parking

Call Queuing

Call Recording

Call Retrieval

Call Routing (DID & ANI)

Call Snooping

Call Transfer

Call Waiting

Caller ID

Caller ID Blocking

Caller ID on Call Waiting

Calling Cards

Conference Bridging

Database Store / Retrieve

Database Integration

Dial by Name

Direct Inward System Access

Distinctive Ring

Distributed Universal Number Discovery (DUNDi™)

Do Not Disturb

E911

ENUM

Fax Transmit and Receive (3rd Party OSS Package)

Flexible Extension Logic

Interactive Directory Listing

Interactive Voice Response (IVR)

Local and Remote Call Agents

Macros

Music On Hold

Music On Transfer:

- Flexible Mp3-based System

- Random or Linear Play

- Volume Control

Predictive Dialer

Privacy

Open Settlement Protocol (OSP)

Overhead Paging

Protocol Conversion

Remote Call Pickup

Remote Office Support

Roaming Extensions

Route by Caller ID

SMS Messaging

Spell / Say

Streaming Media Access

Supervised Transfer

Talk Detection

Text-to-Speech (via Festival)

Three-way Calling

Time and Date

Transcoding

Trunking

VoIP Gateways

Voicemail:

- Visual Indicator for Message Waiting

- Stutter Dialtone for Message Waiting

- Voicemail to email

- Voicemail Groups

- Web Voicemail Interface

Zapateller

Computer-Telephony Integration

AGI (Asterisk Gateway Interface)

Graphical Call Manager

Outbound Call Spooling

Predictive Dialer

TCP/IP Management Interface

Scalability

TDMoE (Time Division Multiplex over Ethernet)

Allows direct connection of Asterisk PBX

Zero latency

Uses commodity Ethernet hardware

Voice-over IP

Allows for integration of physically separate installations

Uses commonly deployed data connections

Allows a unified dialplan across multiple offices

Codecs

ADPCM

G.711 (A-Law & μ-Law)

G.722

G.723.1 (pass through)

G.726

G.729 (through purchase of a commercial license)

GSM

iLBC

Linear

LPC-10

Speex


Protocols

IAX™ (Inter-Asterisk Exchange)

H.323

SIP (Session Initiation Protocol)

MGCP (Media Gateway Control Protocol

SCCP (Cisco® Skinny®)


Traditional Telephony Interoperability

E&M

E&M Wink

Feature Group D

FXS

FXO

GR-303

Loopstart

Groundstart

Kewlstart

MF and DTMF support

Robbed-bit Signaling (RBS) Types

MFC-R2 (Not supported. However, a patch is available


PRI Protocols

4ESS

BRI (ISDN4Linux)

DMS100

EuroISDN

Lucent 5E

National ISDN2

NFAS

การทำงานของ Asterisk

อย่างที่รู้กันแล้วว่า Asterisk เป็น software ตัวหนึ่งที่ทำหน้าที่หลักในการควบคุมระบบโทรศัพท์ ซึ่งส่วนใหญ่แล้ว Asterisk จะสามารถทำงานบน Linux OS, FressBSD (not officially support by digium) ซึ่งในการทำงาน ของ Asterisk ผู้ใช้งานจำเป็นต้องสามารถที่จะเข้าใจการทำงาน และ ตั้งค่าต่างๆของ Asterisk ได้

Asterisk เป็น software ที่ทำงานเป็น daemon หรือ เป็น Process หนึ่งที่ทำงานอยู่บนเครื่องคอมพิวเตอร์ โดยการตั้งค่าของ Asterisk เพิ่มที่จะทำให้ ระบบทำงานได้ หรือ เป็นไปตามที่ผู้ใช้งานต้องการนั้น มีอยู่ 2 ลักษณะ คือ

1. แบบ .conf ไฟล์ ซึ่งการตั้งค่าแบบนี้ใช้งานกันอยู่อย่างแพร่หลายไม่ว่าจะเป็น การตั้งโดยผ่าน Web-Interface เช่น FreePBX, โดย ไฟล์ที่เขียนลงไปในระบบจะทำหน้าที่ในการบอกให้ Asterisk ทำงานอย่างที่เราต้องการ

2. แบบ database, เป็นอีกลักษณะในการตั้งค่าบางประเภทของ Asterisk โดยการตั้งค่าลักษณะนี้มีข้อดีในการที่เราสามารถที่จะปรับเปลี่ยนค่าได้ ทันที โดยไม่จำเป็นต้อง สั่งให้ Asterisk ทำการอ่านค่าจาก file อีก คร้้ง (reload)


โดยหลังจากที่การตั้งค่าต่างๆเสร็จสิ้น Asterisk ก็จะสามารถทำงานได้ทันที โดย ในกรณีที่เป็น ระบบ SIP/IAX/etc. เครื่องลูกข่ายต่างๆก็จะสามารถที่จะเชื่อมต่อเข้ามายังระบบ ผ่านระบบเครือข่าย อนึ่งหากต้องการที่จะให้ Asterisk ทำงานกับ Telephony Hardware เช่น การ์ดสายนอก หรือ กล่องสายนอกต่างๆ ก็ต้องทำการติดตั้งค่าใน Asterisk ด้วย