การแสดงผลสถานะของ Extensions, Trunks, Queues, Conferences บนหน้าเว็บเพจ จะแสดงเป็นปุ่มพร้อมไอคอนแสดงสถานะและมีตัวหนังสือหรือตัวเลขกำกับให้รู้ว่าปุ่มไหนเป็นอะไร กำลังคุยกับเบอร์อะไร คุยนานแค่ไหนแล้ว เป็นการรับสายหรือว่าโทรออก เมื่อมีการเปลี่ยนแปลงสีของปุ่มก็จะเปลี่ยนแปลงไปด้วยนะครับ เราปรับขนาดของปุ่มได้นะครับ ว่ากันว่าถ้าปรับดีๆก็จะแสดงได้ 100 ปุ่มบนหน้าเว็บเพจเลยนะครับ แต่แสดงได้แค่หน้าเดียว ไม่มีหน้า 2, 3, ...
สำหรับ FOP เวอร์ชั่นใหม่นี้นะครับเป็นเวอร์ชั่น 0.3 รองรับ Asterisk 1.6 ซึ่งผมจะแนะนำวิธีการติดตั้งเวอร์ชั่นนี้ แต่เวอร์ชั่นนี้ก็ไม่ใช้งานทุกอย่างได้ฟรีเหมือนเวอร์ชั่นแรกแล้ว เวอร์ชั่นฟรีแสดงได้แค่ 15 ปุ่ม ถ้าอยากได้ปุ่มมากกว่านี้ก็ต้องซื้อครับสนนราคาประมาณ $40 ครับ
ท่านที่สนใจจะดาวน์โหลดเวอร์ชั่นแรกก็ได้นะครับซึ่งให้เราใช้งานได้ไม่จำกัดปุ่ม
ปล. ปัญหาหลักเวลาเราเรียกดูหน้าเว็บของโปรแกรม FOP นะครับ คืออาจแสดงผลไม่ได้ หรือสีไอคอนสลับกันระหว่างเขียวและแดง ซึ่งเป็นผลมาจากโปรแกรม Flash Player ในเครื่องของเราใหม่เกินไป

ถ้าไม่อยากดาวน์เกรด Flash Player ก็ลองเปิดด้วย FireFox นะครับ อาจจะแสดงผลได้ดีกว่า IE
วิธีการติดตั้ง FOP 0.30
1. เว็บไซต์
http://www.astetnic.org
2. ดาวน์โหลด FOP 0.3
http://www.asternic.org/files/op_panel-0.30.tar.gz
3. ขยายไฟล์
ผมจะไม่ขยายไปไว้ที่ไดเร็คตอรี่ /var/www/html นะครับ (เพราะเบื่อแล้ว

- โค้ด: เลือกทั้งหมด
tar xzvf op_panel-0.30.tar.gz -C /opt
cd /opt/op_panel-0.30
4. แก้ไขไฟล์คอนฟิกของ Apache ให้เรียกเว็บเพจของ FOP ได้
เนื่องจากผมไม่ได้ติดตั้ง FOP ไว้ที่ /var/www/html ดังนั้นจึงเรียกหน้าเว็บเพจของ FOP โดยตรงไม่ได้ ผมต้องแก้ไขไฟล์คอนฟิกของ Apache ให้รู้ว่าเวลาผมเรียกหน้าเว็บของ FOP มันต้องไปดึงข้อมูลจากไดเร็คตอรี่ไหน
- โค้ด: เลือกทั้งหมด
vi /etc/httpd/conf.d/alias.conf
เพิ่มบรรทัด Alias เข้าไป เว็บของ FOP อยู่ที่ไดเร็คตอรี่ย่อยชื่อ flash นะครับ
- โค้ด: เลือกทั้งหมด
Alias /fop /opt/op_panel-0.30/flash
แล้วรีสตาร์ท httpd
เวลาผมเรียกเว็บของ FOP ผมก็พิมพ์ http://x.x.x.x/fop
5. คอนฟิกไฟล์ manager.conf ของ Asterisk
FOP ติดต่อกับ Asterisk โดยใช้ Asterisk Manager Interface (AMI) เราจึงต้องสร้าง User/Secert ไว้ในไฟล์ manager.conf เพื่อเอาไว้รับการเชื่อมต่อมาจากโปรแกรม FOP
- โค้ด: เลือกทั้งหมด
vi /etc/asterisk/manager.conf
- โค้ด: เลือกทั้งหมด
[fopmonitor]
secret=foppassword
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read=system,call,log,verbose,command,agent,user
write=system,call,log,verbose,command,agent,user
6. แก้ไขไฟล์ op_server.cfg
flash_dir ต้องระบุเป็น path ที่เก็บไฟล์ html และไฟล์ swf ซึ่งอยู่ในไดเร็คตอรี่ flash
ที่เหลือก็เซ็ต manager user/pass ที่เราสร้างไว้แล้วในไฟล์ /etc/asterisk/manager.conf
- โค้ด: เลือกทั้งหมด
vi /var/www/html/op_panel-0.30/op_server.cfg
- โค้ด: เลือกทั้งหมด
manager_host=127.0.0.1
manager_port=5038
manager_user=fopmonitor
manager_secret=foppassword
flash_dir=/opt/op_panel-0.30/flash
7. รีโหลด Asterisk
- โค้ด: เลือกทั้งหมด
asterisk -rx "manager reload"
8. แก้ไขไฟล์ op_buttons.cfg
แก้ไขไฟล์ op_style.cfg เปลี่ยนขนาดปุ่ม สี ไอคอน ขนาด ห้ามแก้ชื่อตัวแปร ให้แก้เฉพาะค่าหลังเครื่องหมาย = และห้ามใช้ space หากปรับอย่างเหมาะสมสามารถมีได้ประมาณ 100 ปุ่มบนหน้าจอ
9. ทดสอบรัน FOP
- โค้ด: เลือกทั้งหมด
/opt/op_panel-0.30/op_server.pl &
10. สต๊อป FOP
ถ้าต้องการหยุดการทำงานของ FOP ใช้คำสั่งนี้ครับ
- โค้ด: เลือกทั้งหมด
killall op_server.pl
และเมื่อต้องการสตาร์ทก็ใช้คำสั่งในข้อ 9
11. รีสตาร์ท FOP
ปกติใช้เมื่อแก้ไขคอนฟิกแล้วต้องการให้มีผล
- โค้ด: เลือกทั้งหมด
killall -HUP op_server.pl
12. รัน FOP อัตโนมัติทุกครั้งที่เปิดเครื่อง
สำหรับการสั่งรัน FOP ทุกครั้งที่เปิดเครื่อง เราทำได้ 2 วิธีนะครับ ได้แก่
12.1 เอาบรรทัดในข้อ 9 ไปใส่ไว้ในไฟล์ etc/rc.d/rc.local
- โค้ด: เลือกทั้งหมด
vi /etc/rc.d/rc.local
เพิ่มบรรทัดนี้เข้าไป เอาไว้บรรทัดล่างสุดก็ได้
- โค้ด: เลือกทั้งหมด
/opt/op_panel-0.30/op_server.pl -d &
12.2 ใช้ init script
ในไดเร็คตอรี่ /opt/op_panel-0.30/init มี Script ที่เราใช้ Start/Stop/Restart FOP เสมือนมันเป็น Service หนึ่งบน CentOS ได้นะครับ
12.2.1 ก๊อบปี้ไฟล์ Init Script สำหรับ CentOS/Redhat
- โค้ด: เลือกทั้งหมด
cp /opt/op_panel-0.30/init/op_panel_redhat.sh /etc/init.d/fop
chmod +x /etc/init.d/fop
12.2.2 แก้ไขไดเร็คตอรี่ในไฟล์ /etc/init.d/fop
- โค้ด: เลือกทั้งหมด
vi /etc/init.d/fop
- โค้ด: เลือกทั้งหมด
DAEMON=/opt/op_panel-0.30/op_server.pl
OPTIONS="-d -c /opt_panel-0.30"
12.3 ทำให้เป็น Service
- โค้ด: เลือกทั้งหมด
chkconfig --level 35 fop on
12.4 สตาร์ท FOP
service fop start
หน้าตาของโปรแกรม FOP
ดีฟอลท์มันจะแสดงมั่วๆอย่างนี้แหล่ะครับ เป็นเพราะว่าไอคอนขนาดใหญ่เกินไป ก็เลยแสดงออกนอกขอบเขต ถ้าเราปรับแต่งขนาดไอคอนให้เหมาะสมหล่ะก็รับรองโชว์ได้สวยเลยหล่ะครับ
พารามิเตอร์ในไฟล์ op_server.cfg
ไฟล์ op_server.cfg นี้นะครับ เราเอาไว้คอนฟิก FOP ให้ทำงานตามที่เราต้องการและให้เชื่อมต่อกับ Asterisk เพื่อดึงข้อมูลที่ต้องการมาแสดงบนหน้าเว็บได้ พารามิเตอร์ก็มีดังต่อไปนี้
manager_host
เป็น Hostname หรือ IP Address ของ Asterisk
manager_user
เป็น Username ในไฟล์ manager.conf ที่เราคอนฟิกไว้เพื่อให้ FOP เชื่อมต่อกับ Asterisk
manager_secret
เป็น Secret ในไฟล์ manager.conf ที่เราคอนฟิกไว้เพื่อให้ FOP เชื่อมต่อกับ Asterisk
event_mask
ระบุว่าต้องการรับ Event แบบใดบ้างจาก Asterisk ค่าที่ใช้ได้คือ "on", "off", "system", "call", "log"
ในเว็บ FOP เราสามารถมอนิเตอร์ Asterisk ได้มากกว่า 1 เครื่อง โดยเพิ่มบรรทัด manager_host, manager_user, manager_secret และ event_mask ให้เท่ากับจำนวน Asterisk Server ที่ต้องการมอนิเตอร์ เวลาใส่ก็ใส่เรียงกันเป็นชุดโดย 1 ชุดให้เขียน 4 บรรทัดนี้เรียงติดกันนะครับ ถ้าลืมบรรทัดใดบรรทัดหนึ่ง FOP ก็จะถือว่าบรรทัดแรกสุดที่เจอเป็นของ Asterisk Server ตัวนั้น จากนั้นเราก็ไปคอนฟิกไฟล์ op_buttons.conf เพื่อระบุว่าบรรดาปุ่มที่แสดงบนหน้าเว็บนั้น ปุ่มไหนเป็นของ Server ไหน
astmanproxy_host
astmanproxy_port
astmanproxy_server
เราอาจจะให้ FOP เชื่อมต่อกับ astmanproxy แทน Asterisk Manager โดยตรงก็ได้โดยระบุ 3 พารามิเตอร์นี้ และถ้ามี astmanproxy มากกว่า 1 เครื่องก็ให้เพิ่มทั้ง 3 บรรทัดนี้ตามจำนวน astmanproxy ที่มี
listen_addr
เป็นออปชั่น ระบุว่าเมื่อเราสั่งรันไฟล์ op_server.pl จะให้ FOP รอรับการเชื่อมต่อที่ IP Address อะไรในเครื่อง ถ้าไม่ระบุก็จะรอรับการเชื่อมต่อทุก IP Address ในเครื่อง ตัวอย่างเช่นเครื่อง Web Server ที่ติดตั้ง FOP มี 3 ไอพี คือ 127.0.0.1, 192.168.4.55, 58.59.60.61 แต่ต้องการเปิดรอรับการเชื่อมต่อที่ IP 192.168.4.55 ก็ใส่ไอพีนี้เข้าไป ถ้าต้องการเพิ่ม IP อีกก็ให้เพิ่มบรรทัด listen_addr อีก
listen_port
ระบุหมายเลขพอร์ตที่ op_server.pl จะรอรับการเชื่อมต่อจาก Flash Client โดยที่ Flash Client และ FOP จะคุยกันด้วย TCP ผ่านพอร์ตดีฟอลท์คือ 4445 และดังนั้นหากในเครื่อง Web Server ที่ติดตั้ง FOP มี Firewall อยู่ อย่าลืมเปิดพอร์ต listen_port นี้ด้วยนะครับ ตัวอย่างเช่นท่านใดที่ใช้ iptables ให้เพิ่มบรรทัดนี้เข้าไป
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 4445 -j ACCEPT
web_hostname
เป็นออปชั่น ต้องคอนฟิกให้เหมือนกับ hostname ที่ใช้เรียกเข้า Web Server เช่น ถ้าเราเรียกเข้า Web Server โดยใช้ http://www.myserver.com เวลาเขียนบรรทัด web_hostname ก็ต้องใส่ว่า http://www.myserver.com ไม่ต้องใส่ http:// ด้วยนะครับ แต่ถ้าใช้ IP Address แทน Hostname ก็ต้องใส่ IP Address แทน ปกติจะไม่ใช้พารามิเตอร์นี้ครับ
security_code
เป็นพาสเวอร์ดที่เราจะต้องใส่เมื่อ FOP ถาม ซึ่งตามปกติเวลาเราส่งคำสั่งมาจาก Flash Client เช่น โอนสาย วางสาย โทรออก โดยการลากปุ่มบนหน้าจอ FOP จะถามพาสเวอร์ด
flash_dir
เป็นไดเร็คตอรี่จริงๆในเครื่องซึ่งเก็บไฟล์ html และ swf เช่น /opt/op_panel-0.30/html
poll_interval
ระบุช่วงเวลา (เป็นวินาที) ที่ Server จะ Poll ถาม Asterisk เกี่ยวกับสถานะของเบอร์ SIP และ IAX2 ดีฟอลท์คือทุก 240 วินาที แต่สำหรับ Asterisk เวอร์ชั่นใหม่ๆ เราไม่จำเป็นต้องระบุ poll_interval ก็ได้ เพราะว่าเมื่อมีเหตุการณ์ต่างๆเกิดขึ้นกับ SIP/IAX2 เช่น register/unregister/lagged มันก็จะส่งเหตุการณ์ต่างๆเหล่านี้ออกมาเองผ่านทางช่องทาง AMI ซึ่ง FOP ก็จะรับรู้โดยปริยาย แต่ถ้าเราเอา FOP นี้ไปมอนิเตอร์ Asterisk เวอร์ชั่นแรกๆ ก็ยังคงต้องใช้ poll_interval อยู่ และถ้ามี Asterisk หลายเครื่องก็อาจต้องเพิ่มค่า poll_interval ให้มากขึ้น เช่น 7200 เพราะทุกครั้งที่ Asterisk ถูก Poll จะมีผลต่อการทำงานของมัน ดังนั้นสำหรับ Asterisk เวอร์ชั่นใหม่ๆ เช่น 1.2, 1.4, 1.6 ก็ไม่จำเป็นต้องใช้ poll_interval ครับ
poll_voicemail
ถ้าเราตรวจสอบวอยส์เมล์จากหน้าเว็บ Asterisk จะไม่ส่งสถานะการลบวอยส์เมล์ให้ทราบ ซึ่ง AMI จะไม่แจ้งเมื่อวอยส์เมล์ถูกลบ เราอาจจะอินาเบิลพารามิเตอร์นี้ซึ่งจะทำให้ FOP เช็ควอยส์เมล์ทุกๆช่วงเวลา poll_interval
auth_md5
เซ็ตให้เป็น 1 ถ้าต้องการตรวจสอบ Asterisk Manager Username/Password แบบ MD5 ควรเซ็ตค่าให้เป็น 1 เสมอนะครับโดยเฉพาะเมื่อต้องส่ง Username/Password ผ่านเน็ตเวอร์ค
kill_zombies
ถ้าเซ็ตเป็น 1 เซอร์เวอร์จะตัดแชนแนลประเภท Zombie (แชนแนลที่แฮ้งค์ ไม่ได้ใช้งานแล้วแต่สถานะยังแอ๊คทีฟอยู่) ถ้าพบว่ามี ออปชั่นนี้ไม่ควรจะใช้งาน ดีฟอลท์จึงเซ็ตไว้เป็น 0
debug
ตั้งระดับการดีบัคบนเซอร์เวอร์ ผลจากการดีบัคจะถูกแสดงบน Standard Output สั่งดีบัคโดยการเซ็ตพารามิเตอร์แบบบิตแม๊บดังต่อไปนี้
Bit 1: แสดงเหตุการณ์ที่ส่งมาจาก Asterisk
Bit 2: แสดงคำสั่งที่ส่งไปให้ Asterisk
Bit 4: แสดงคำสั่งที่ส่งออกไปจาก Flash
Bit 8: แสดงคำสั่งที่ส่งไปยัง Flash
Bits 16,32,64: ดีบัคสำหรับ Server
ดีฟอลท์คือ 0 (ไม่ดีบัค) ถ้าเราต้องการเห็นเหตุการณ์ที่ส่งมาจาก Asterisk และเห็นคำสั่งที่ส่งไปให้ Asterisk ก็ให้เซ็ตค่า debug เป็น 3 ซึ่งได้จาก 1+2 และถ้าต้องการเปิดดีบัคเต็มรูปแบบก็เซ็ตเป็น 255 หรือไม่ก็เราใช้คำสั่ง -X ตอนสตาร์ท op_server.pl ก็ได้ ซึ่งจะให้ผลเหมือนกัน
auto_conference_extension
เป็นเบอร์ Extension ที่จะไดอัลเพื่อเลือกห้อง Meeme Conference ที่ไม่มีพินป้องกันไว้ ดีฟอลท์คือ 900 ตั้งแต่ FOP เวอร์ชั่น 0.15 ขึ้นไป ห้ามใช้พารามิเตอร์นี้
queue_hide
ถ้าเซ็ตเป็น 1 ปุ่มตำแหน่งของ Queue จะไม่ถูกแสดงถ้าไม่ได้ใช้งานในขณะนั้น (จะเห็นเฉพาะจำนวนสมาชิกจริงๆที่กำลังคอยอยู่ใน Queue)
clid_format
เป็นรูปแบบเบอร์ CLID ที่จะให้แสดงบนปุ่มเมื่อมีสายโทรเข้ามา ใช้ตัว x แทนตัวเลขซึ่งจะถูกแทนด้วยเบอร์โทรศัพท์ของคนที่โทรเข้ามาเมื่อมีสายโทรเข้ามา ดีฟอลท์คือ (xxx) xxx-xxx
clid_privacy
ถ้าเซ็ตเป็น 1 บนปุ่มจะไม่แสดงแสดงเบอร์ CLID หรือเบอร์ที่โทรออกไป
show_ip
ถ้าเซ็ตเป็น 1 บนปุ่มจะแสดงหมายเลข IP Address ของ SIP/IAX Peers
reverse_transfer
ในดีฟอลท์คอนฟิก เมื่อลากและวางปุ่มเพื่อโอนสาย เป็นมุมมองของ Asterisk ไม่ใช่ยูสเซอร์ ดังนั้นถ้าเรากำลังคุยโดยใช้ SIP/myphone และลากปุ่มสำหรับแชนแนลนั้น จะเป็นการโอนสายขา (ตัวเราเอง) ไม่ใช่คนที่เรากำลังคุยด้วย แต่ถ้าเราต้องกาารโอนสายคนที่เรากำลังคุยด้วย (นั่นคือเป็นมุมมองของยูสเซอร์แทนที่จะเป็นมุมมองของ Asterisk) ให้เซ็ตออปชั่นนี้เป็น 1
transfer_timeout
เป็นออปชั่น ถ้าเซ็ตบน Toolbar จะเห็นรายการ Dropdown พร้อมค่า ถ้าเลือกค่าใดค่าหนึ่งครั้งต่อไปที่เราทำการโอนสายภายในพาแนล คอลจะถูกสิ้นสุดเมื่อครบเวลาไทม์เอ๊าท์ ฟอร์แม๊ตของค่าคือ "timeout_in_second,label|timeout_in_seconds,label" ถ้าเซ็ตไทม์เอ๊าท์เป็น 0 จะไม่จำกัดระยะเวลาการโอนสาย ตัวอย่างเช่น
transfer_timeout="0,No timeout|300,5 minutes|600,10 minutes"
enable_restart
ถ้าเซ็ตเป็น 1 เมื่อเรากดปุ่ม Reload บน Flash Client จะเป็นการรีสตาร์ท Asterisk ด้วย ถ้าเราต้องการรีสตาร์ท Asterisk ไปพร้อมๆกันด้วยเราต้องรัน Asterisk ด้วย safe_asterisk หรือใช้เครื่องมืออื่นที่จะช่วยสตาร์ท Asterisk ให้ทำงานได้เมื่อพบว่ามันไม่สตาร์ท เพราะเป็นการ Restart ไม่ใช่ Reload
rename_label_wildcard
ถ้ามีปุ่ม REGEXP ซึ่งมีความกว้างเป็น wildcard เราอาจจะเซ็ตออปชั่นนี้ให้เป็น 1 ก็ได้ ซึ่งจะทำให้ลาเบลสำหรับปุ่มนั้นจะเปลี่ยนแปลงไปตามชื่อจริงๆของแชนแนลที่กำลังใช้งานสล๊อตนั้นอยู่ แชนแนลที่เป็น Wildcard หมายถึงแชนแนลใดๆที่มี * อยู่ภายใน (ไม่ทุก REGEXP ที่มี wildcard)
rename_label_agentlogin
ถ้าเซ็ตเป็น 1 และเมื่อใช้แอปพลิเคชั่น AgentLogin บน Asterisk จะเปลี่ยนลาเบลของปุ่มให้เป็นเบอร์ Extension ของเอเย่นต์
rename_label_callbacklogin
ถ้าเซ็ตเป็น 1 และเมื่อใช้แอปพลิเคชั่น AgentCallbacklogin ของ Asterisk จะเปลี่ยนลาเบลของปุ่มให้เป็นเบอร์ Extension ของเอเย่นต์ ถ้าล๊อกอินผ่านเบอร์ Extension ที่ได้กำหนดไว้ในพารามิเตอร์ Extension และ Context สำหรับปุ่มนั้น จะทำให้ลาเบลเปลี่ยนไปเป็น Agent/XXXX เมื่อเอเย่นต์ล๊อกอิน แต่ถ้าเราไม่ได้กำหนดไว้ว่าปุ่มนี้เป็น Extension และ Context ของใครไว้ก่อน ฟีเจอร์นี้จะไม่เวอร์ค
rename_to_agent_name
ถ้าเซ็ตเป็น 1 และเซ็ตพารามิเตอร์ rename_label_callbacklogin ให้เป็น 1 ด้วย จะทำให้ลาเบลของปุ่มจะเปลี่ยนเป็นชื่อที่ตั้งไว้ในไฟล์ agents.conf แทนที่จะเป็น Agent/XXXX
rename_queue_member
ใช้เปลี่ยนชื่อลาเบลของปุ่ม โดยแสดงชื่อ Queue ถ้าเราตั้งแชนแนลให้เป็นสมาชิกของ Queue โดยใช้แอปพลิเคชั่น AddQueueMember ไม่ใช้ข้อมูลในไฟล์ agent.conf
change_led_agent
ถ้าเซ็ตเป็น 1 สีปุ่มที่แสดงว่าเอเย่นต์กำลังล๊อกอินจะเปลี่ยนไปเป็นสีตามที่กำหนดไว้ในพารามิเตอร์ ledcolor_agent ในไฟล์ op_style.cfg (สีดีฟอลท์คือสีเหลือง) เราก็จะมองเห็นเอเย่นต์ล๊อกอินได้ชัดเจนยิ่งขึ้น
barge_muted
ถ้าเซ็ตเป็น 1 และเราลากปุ่มที่ไม่ได้ใช้งานไปยังขาใดขาหนึ่งของการคอล ทั้งสามปุ่มจะถูกโยนเข้าไปยังห้อง Meetme conference และแชนแนลที่ถูกลากจะถูก mute โดยอัตโนมัติ ดังนั้นสองคนแรกจะไม่ได้ยินคนที่ 3 และเราสามารถ mute/unmute สมาชิกในห้อง Meetme โดยการคลิ๊กไอคอนลูกศรเล็กๆบนแต่ละปุ่ม
barge_rooms
เป็นเบอร์ห้อง Meeme ที่ใช้สำหรับ barge-in
conference_context
เป็น Context ของห้อง Meetme conference ที่ใช้เพื่อ barge in ดีฟอลท์คือ conferences
เพื่อให้ barge ทำงานได้ เราต้องเพิ่ม Extension เข้าไปไว้ใน Dialplan ภายใต้ Context ของมัน เปิดไฟล์ /etc/asterisk/extensions.conf ของ Asterisk แล้วเพิ่มบรรทัดต่อไปนี้ เบอร์ Extension จะต้องตรงกันกับเบอร์ห้อง Meetme Conference
[conferences]
exten => 900,1,MeetMe(900)
exten => 901,1,MeetMe(901)
exten => 902,1,MeetMe(902)
แก้ไขไฟล์ /etc/asterisk/meetme.conf เพิ่มบรรทัดต่อไปนี้
[rooms]
conf => 900
conf => 901
conf => 902
เราสามารถตั้งค่า security_codes, conference_context, barge_rooms, flash_dir และ web_hostname สำหรับแต่ละ Context ให้แตกต่างกันได้ วิธีการก็ไม่ยากครับโดยการตั้งชื่อ Context ใหม่ เช่น [new_context] แล้วใส่ทีละบรรทัดจนครบ ชื่อไม่ให้ซ้ำกันกับ Context อื่น และเพิ่มได้เรื่อยๆตามที่ต้องการ วิธีการแบบนี้ทำให้เรามีหลายๆหน้าเว็บเพจ แต่ละเว็บเพจก็จะแสดงแต่ละ Context บนแต่ละ Asterisk
voicemail_extension
เป็น Extension และ Context ในไฟล์ /etc/asterisk/extensions.conf ที่สามารถเรียกแอปพลิเคชั่น Voicemailmain ได้ (เพื่อเช็ควอยส์เมล์) ยกตัวอย่างเช่น ถ้าเราตั้งเบอร์ 1234 ไว้ใน Context ชื่อ features เพื่อเช็ควอยส์เมล์ บรรทัดนี้ก็จะเป็น voicemail_extension=1234@features แล้วเมื่อมีไอคอนรูปซองจดหมายปรากฏบนปุ่ม (เรียกว่าไอคอน MWI) ดับเบิลคลิ๊กที่ไอคอนก็จะเป็นการโทรไปเบอร์ของ Voicemailmain
พารามิเตอร์ในไฟล์ op_buttons.cfg
ไฟล์ op_buttons.cfg เอาไว้คอนฟิกบอก FOP ว่าให้แสดงปุ่มอะไรบ้างและจะให้โชว์ตัวหนังสืออะไรบนปุ่ม ยกตัวอย่างเช่น ผมต้องการโชว์ปุ่ม SIP/100 ซึ่งเป็น SIP Extension1 เบอร์ 100 ผมก็คอนฟิกในไฟล์ op_buttons.conf แบบนี้
เนื่องจากข้อมูลดีฟอลท์ในไฟล์ op_buttons.conf มีเยอะแยะพอสมควร ก็เลยทำให้หน้าเว็บ FOP มันดูเลอะเทอะ ทางที่ดีผมว่าสร้างไฟล์นี้ขึ้นมาใหม่ดีกว่าครับ แล้วคอนฟิกใส่ข้อมูลเฉพาะที่มีอยู่ในเครื่องของเราก็พอ
- โค้ด: เลือกทั้งหมด
mv /opt/op_panel-0.30/op_buttons.cfg /opt/op_panel-0.30/op_buttons.cfg.bak
vi /opt/op_panel-0.30/op_buttons.cfg
- โค้ด: เลือกทั้งหมด
[SIP/100]
Position=1
Label="Agent 01"
Extension=100
Context=from-internal
;Panel_Context=supervisor1
Icon=1
Mailbox=100@supercall
No_Rectangle=no
[SIP/101]
Position=2
Label="Agent 02"
Extension=101
Context=from-internal
;Panel_Context=supervisor2
Icon=1
Mailbox=101@supercall
No_Rectangle=no
ออปชั่นที่ใส่ในแต่ละบรรทัดได้ มีดังต่อไปนี้ครับ
[Channel/channelname]
เช่น [SIP/100] หรือ [Zap/1] หรือ [IAX/200] สำหรับ SIP/IAX จะเป็น Username ส่วน ZAP จะเป็น Channel Number
Position
ตำแหน่งของปุ่มที่จะโชว์บนหน้าเว็บ โดยจะเรียงจากบนลงล่าง และจากซ้ายไปขวา จำนวนปุ่มที่จะแสดงได้ขึ้นอยู่กับขนาดของปุ่มและ padding (ตามที่คอนฟิกในไฟล์ op_style.cfg) เราอาจใส่เป็นตัวเลขตรงๆเช่น 1 หรือ 2 หรือ 10 หรือใส่ได้มากกกว่า 1 ตำแหน่งเช่น 1,2,3 หรือใช้ตัวอักษร n แทนก็ได้
Panel_Context
ถ้าเรามี Server เดียว แต่มีหลายๆ Flash Client ที่คอนเน็คเข้ามาดูสถานะ แต่ละ Client ก็อยากให้แสดงปุ่มไม่เหมือนกันด้วย ถ้าเราไม่ระบุ Panel_Context จะทำให้ FOP คิดว่าเราต้องการคอนเน็คกับ "default" context ซึ่งในการโหลด Flash แล้วให้แสดง Context ที่ต้องการนั้นเราต้องแก้ไขหน้าเว็บเพจที่จะโหลดไฟล์ swf โดยการเพิ่ม ?context=mycontext ไว้หลัง operator_panel.swf ทุกตำแหน่งที่เจอ อย่าลืมแก้ไข mycontext ให้ตรงกับบรรทัด Panel_Context ด้วยนะครับ
URL
ระบุ URL ที่จะให้เปิดขึ้นมาเมื่อคลิ๊กที่ปุ่ม
Target
ใช้ร่วมกับ URL ซึ่งจะกำหนดว่าเมื่อคลิ๊กที่ปุ่มแล้วจะให้เปิด URL ขึ้นมาแบบไหน ระหว่าง _parent (เปิดในหน้าเดิม) หรือ _new (เปิดหน้าใหม่) ดีฟอลท์คือเปิดในหน้าเดิม
No_Rectangle ถ้าเซ็ตเป็น Yes ปุ่มจะไม่มีกรอบสี่เหลี่ยม ออปชั่นนี้มีประโยชน์คือให้เราวาดปุ่มอย่างที่เราต้องการได้โดยใช้ Background Image
Label
ตัวหนังสือที่จะให้แสดงบนปุ่ม ถ้ามีเว้นวรรคต้องเขียนในเครื่องหมาย " " เช่น "Agent 01" ถ้าต้องการแสดงตัวหนังสือใน Label เป็นภาษาไทย ให้ใช้ Text Editor ที่พิมพ์ภาษาไทยได้ เสร็จแล้วพิมพ์คำสั่ง
- โค้ด: เลือกทั้งหมด
vi -c ":wq! ++enc=utf8" op_buttons.cfg
Server
เราสามารถมอนิเตอร์ Asterisk Server ได้มากกว่า 1 เครื่องในหน้าเว็บเดียว โดยการใส่บรรทัดนี้เข้าไป ปุ่มนี้ก็จะกลายเป็นของ Server นั้น
Extension
ระบุเบอร์ Extension ของปุ่ม เพื่อให้ FOP รู้ว่าจะโทรหาเบอร์ Extension อะไรถ้าต้องการโทรหาปุ่มนี้โดยลากปุ่มของ Extension อื่นมาวางใส่ ถ้าไม่มีเบอร์ Extension ให้ใส่ค่า -1
Context
ถ้าเบอร์ Extension ไม่ได้อยู่ใน Context ชื่อ default ใน Diaplan ก็ต้องระบุชื่อ Context ที่เบอร์ Extension นี้อยู่ ยกตัวอย่างเช่นมีเบอร์ Extensions 100 อยู่ใน from-internal ก็ต้องระบุบรรทัดนี้เป็น Context=from-internal
Icon
เลือกสัญลักษณ์ของไอคอน มีอยู่ 6 แบบ ดังรูป
ถ้าต้องให้ปุ่มโชว์ไอคอนแบบที่ 1 ก็ใส่บรรทัด Icon=1
Mailbox
ใส่เมล์บ๊อกวอยส์เมล์ของ Extension ที่จะมอนิเตอร์ ถ้ามีข้อความเสียงฝากไว้ก็จะแสดงสัญลักษณ์รูปจดหมาย เช่นถ้าเมล์บ๊อกซ์ของยูสเซอร์คือ 100 อยู่ใน voicemail context ชื่อ supercall ก็ให้ระบุบรรทัดนี้แบบนี้ Mailbox=100@supercall แต่ถ้าไม่ต้องการให้เช็ควอยส์เมล์ก็ไม่ต้องใส่บรรทัด Mailbox หรือไม่ก็ใส่ Mailbox= โดยไม่ต้องใส่อะไรด้านหลัง
แก้ไขไฟล์ op_buttons.conf เสร็จแล้วก็รีสตาร์ท FOP ใหม่ด้วยคำสั่ง
- โค้ด: เลือกทั้งหมด
killall -HUP op_server.pl
มาดูเว็บ FOP หลังจากแก้ไขไฟล์ op_buttons.conf
จะเห็นว่าลดไอคอนที่ไม่จำเป็นออกไปได้ทั้งหมดครับ เหลือแต่อันที่จำเป็นเท่านั้น แต่ก็ยังมีที่เราต้องแก้ไขอีกคือ ไอคอนใหญ่ไปนิดทำให้แสดงผล Label ได้ไม่หมด เราต้องลดขนาดของไอคอนลงโดยทำที่ที่ไฟล์ op_style.conf
แสดงไอคอนของ Queues
ถ้าเรามีห้อง Conference หรือ Queue ก็สามารถสร้างเป็นไอคอนได้ ดังนี้ครับ
สร้างไอคอน Queue แบบรวม
[Queue/700]
Position=10
Label="Sales Queue"
Extension=700
Icon=5
ซึ่ง FOP จะแสดงจำนวนสมาชิกใน Queue และระยะเวลารอสายสูงสุด
สร้างไอคอน Queue แบบแยกสมาชิก
ถ้าใน Queue 700 มีเอเย่นต์อยู่ 4 คน เราสามารถสร้างเป็น 4 ปุ่มแยกจากกันได้ แต่ละปุ่มจะแสดงแต่ละเอเย่นต์
[Queue/700]
Position=11-14
Label="Sales Queue"
Extension=-1
Icon=5
แสดงไอคอนของ Agents
หากเราทำระบบ Call Center มี Queues และ Agents เราก็มีไอคอนของแต่ละ Agent ได้ด้วยนะครับ ดังนี้
[Agent/1002]
Position=12
Label="Agent 1002"
Context=agents
Icon=3
แสดงไอคอนของ Caller ID
มีบางครั้งเราต้องการมอนิเตอร์เฉพาะ Caller ID เบอร์ใดเบอร์หนึ่ง (ปกติจะเป็นเบอร์ที่โทรเข้ามาในระบบ) และเราไม่สามารถสร้าง Caller ID นี้ให้แม๊ตซ์กับเบอร์ Extensions หรือ Agents หรือ Queues อะไรได้เลย เราก็ต้องมอนิเตอร์เป็นเบอร์ Caller ID เลย
[CALLERID/6628888888]
Position=20
Label="From K-BANK"
Extension=6628888888
Context=from-internal
Icon=2
แสดงไอคอน Conference Meetme
แบบรวม
[900]
Position=1
Label="Meetme Room 900"
Extension=900
Context=conferences
Icon=6
แบบแยกผู้ร่วมประชุม
สมมติมีผู้ร่วมประชุมอยู่ 4 คน
[900]
Position=2-5
Label="Meetme User"
Extension=-1
Icon=6
แสดงไอคอนของ Trunk
ปกติในบรรทัด Position ถ้าเราระบุมากกว่า 1 ตำแหน่ง จะหมายถึง Trunk เช่น
[SIP/myprovider]
Position=20-30
Label="SIP TRUNK"
Extension=-1
Icon=4
ก็จะมอนิเตอร์ Trunk ได้
พารามิเตอร์ในไฟล์ op_style.cfg
เปลี่ยนรูปแบบการแสดงผล ขนาดและสีของปุ่ม ขนาดของไอคอน รูปแบบของไอคอน แต่ให้เปลี่ยนเฉพาะค่าของมัน ห้ามเปลี่ยนชื่อตัวแปรนะครับ ไม่งั้นจะเออเร่อร์
[general]
; ความเข้มของสีปุ่มเมื่อมีการเปลี่ยนแปลงสถานะ
dimm_noregister_by=20
dimm_lagged_by=60
; ความเข้มของสีไอคอน MWI เมื่อไม่มีข้อความในกล่องข้อความ
nomail_alpha=3
; ถ้าเซ็ตเป็น 1 ไอคอนรูปโทรศัพท์จะสั่นเมื่อมีสายเรียกเข้า
enable_animation=1
; Pixels to use on the ringing animtion
shake_pixels=2
; แสดงเส้นขอบรอบลาเบลตัวหนังสือ ปกติจะใช้เมื่อต้องการให้มีรูปแบบเหมือนกับการดีบัค
show_borders=0
; ถ้าเซ็ตเป็น 1 จะทำให้ลาเบลที่เป็นแบ๊คกราวด์มีสีเมื่อสถานะเปลี่ยนแปลง
enable_label_background=0
; ถ้าเซ็ตเป็น 1 จะเข้ารหัสข้อมูลที่รับส่งระหว่าง FOP Server และ Client
enable_crypto=0
; ใช้ฟอนท์ที่มีมาให้ใน FOP แล้ว ไม่ได้ใช้ฟอนท์ที่มีในเครื่อง
use_embed_fonts=1
; สีแสดงสถานะต่างๆ
ledcolor_ready=0x00A000
ledcolor_busy=0xA01020
ledcolor_agent=0xD0d020
ledcolor_paused=0x000000
; เซ็ตรายละเอียดของปุ่มสี่เหลี่ยม
btn_width=145
btn_height=45
btn_padding=4
btn_line_width=1
btn_line_color=0x000000
btn_fadecolor_1=ccccff
btn_fadecolor_2=ffffff
btn_round_border=8
btn_highlight_color=ff0000
; เซ็ตรายละเอียดของลาเบลบนปุ่ม
label_font_size=12
label_font_family=Verdana ; มีผลก็ต่อเมื่อเซ็ต use_embed_fonts=0
label_font_color=000000
label_shadow_color=dddddd
label_margin_top=20
label_margin_left=38
label_shadow=1
label_extent_x=10 ; ถ้าไม่ได้วางลาเบลในแนวนอน ให้เพิ่มค่าขึ้นไป
label_extent_y=0
; รายละเอียดของปุ่ม CLID
clid_font_color=00dd00
clid_font_size=13
clid_centered=1
clid_font_family=Verdana
clid_margin_top=0
clid_margin_left=25
; ปรับตำแหน่ง ขนาดฟ้อนท์ ของระยะเวลาการโทรที่แสดงบนปุ่ม
timer_font_color=4000ff
timer_font_size=13
timer_font_family=Courier
timer_margin_top=48
timer_margin_left=6
; รายละเอียดของไอคอนรูปวงรี
led_scale=90
led_margin_top=34
led_margin_left=20
; รายละเอียดของไอคอนรูปลูกศร
arrow_scale=70
arrow_margin_top=10
arrow_margin_left=15
; รายละเอียดของไอคอนข้อความ MWI
mail_margin_left=-23
mail_margin_top=13
mail_scale=9
; เปลี่ยนตำแหน่งและขนาดไอคอนบนปุ่ม
; margin_top ระยะห่างจากขอบบนของปุ่ม
; margin_left ระยะห่างจากขอบด้านขวาของปุ่ม ค่าเป็น - หมายถึงห่างจากขอบด้านขวาตามจำนวนระยะที่กำหนดไว้
; scale ขนาดไอคอน
icon1_margin_top=25
icon1_margin_left=-22
icon1_scale=10
icon2_margin_top=46
icon2_margin_left=-29
icon2_scale=14
icon3_margin_top=34
icon3_margin_left=-36
icon3_scale=20
icon4_margin_top=33
icon4_margin_left=-34
icon4_scale=16
icon5_margin_top=32
icon5_margin_left=-33
icon5_scale=16
icon6_margin_top=32
icon6_margin_left=-33
icon6_scale=16
; จะให้มีออปชั่นอะไรบน Status Bar บนสุดของเว็บเพจ
show_security_code=1
show_clid_info=0
show_btn_help=3
show_btn_debug=0
show_btn_reload=2
show_status=4
;[sip]
; You can have different styles per panel context
; You need to copy all the variables, they will not be
; inherited. If you fail to include an option the flash
; client migth hang. So, copy the complete [general]
; section an change the header to the panel context name.
; Then adjust the parameters to your liking.
การแสดงผลเป็นภาษาไทย
หากต้องการให้แสดงผลตัวหนังสือในปุ่มเป็นภาษาไทยก็ทำได้นะครับ โดยแก้ไขไฟล์ op_buttons.cfg (อาจต้องดาวน์โหลดไฟล์นี้มาไว้ในเครื่องคอมพิวเตอร์ก่อน แล้วใช้ Text Editor แก้ไข แล้วอัพโหลดเข้าเซอร์เวอร์ใหม่อีกรอบ) แล้วเข้ารหัสแปลงไฟล์ให้เป็นรูปแบบ UTF-8 ด้วยคำสั่งต่อไปนี้
- โค้ด: เลือกทั้งหมด
vi -c ":wq! ++enc=utf8" op_buttons.cfg