ใน Elastix มีโปรแกรมให้พร้อมอยู่แล้วครับโดยไม่ต้องติดตั้งอะไรเพิ่มเติม คอนฟิกนิดๆหน่อยๆก็ใช้งานได้แล้ว ผมลองใน Elastix 2.0 นะครับ ซึ่งมาพร้อมกับ Asterisk 1.2.6.10 และ vtiger 5.1.0 เวอร์คดี
มาดูวิธีการทำงานก่อนนะครับ จะเข้าใจได้ง่ายขึ้น
1. เปิดโปรแกรม Softphone หรืออุปกรณ์ VoIP อื่น ให้รีจิสเตอร์กับ Asterisk ให้เรียบร้อย
2. ล๊อกอินเข้าเว็บ vtiger -> http://ip_address/vtigercrm โดยใช้ Username,Password ที่ได้รับจาก admin
3. เข้าเพจอะไรก็ได้ที่มีเบอร์โทรศัพท์ เช่น MARKETING -> Accounts
4. คลิ๊กที่เบอร์โทรศัพท์
5. Softphone ของเราจะดัง
6. รับสาย
7. ระบบจะโทรไปเบอร์ปลายทางที่เราคลิ๊ก
8. สนทนา
พอเข้าใจบ้างแล้วนะครับ ต่อมาเป็นขั้นตอนคร่าวๆว่าเราต้องคอนฟิกอะไรบ้าง ดังต่อไปนี้ครับ
- คอนฟิก Trunk บน Elastix (ถ้าต้องการโทรออกไปข้างนอก)
- คอนฟิก Outbound Routes บน Elastix (ถ้าต้องการโทรออกไปข้างนอก)
- คอนฟิก Extensions ใน Elastix
- คอนฟิก Softphone, IP Phone หรือ Gateways ให้รีจเตอร์กับ Elastix
- คอนฟิก Asterisk AMI ไฟล์ /etc/asterisk/manager.conf หรือ /etc/asterisk/manager_custom.conf เพื่อให้ vtiger สั่งงาน Asterisk ได้ เช่นสั่ง Dial ไปเบอร์ที่ต้องการเมื่อเราคลิ๊กเบอร์โทรศัพท์ใน vtiger
- คอนฟิก User Account ใน vtiger และระบุเบอร์ Extension ซึ่ง Asterisk จะโทรมาที่เบอร์ Extension นี้ ถ้า User นี้เป็นคนคลิ๊กเบอร์โทรศัพท์
- แก้ไขคอนฟิกของ vtiger
- เทสโทรออก
- รันไฟล์ที่จะทำให้ vtiger กลายเป็น Client หนึ่งของ Asterisk เพื่อให้รับสายเรียกเข้าจาก vtiger ได้
- เทสรับสายเข้า
ลำดับต่อไปคือวิธีการคอนฟิกแบบละเอียดครับ
1. คอนฟิก Trunk ใน Elastix
ดูรายละเอียดตามลิ้งค์ด้านล่างนี้ได้เลยนะครับ
- Cat2Call
- True NetTalk
- TOT NetCall
2. คอนฟิก Outbound Routes
ดูรายละเอียดวิธีการตั้ง Outbound Routes ของแต่ละ Provider ในข้อ 1 นะครับ
3. คอนฟิกเบอร์ Extensions
Asterisk Extensions
4. คอนฟิก VoIP Devices
ถ้ายังไม่มีอุปกรณ์จะลอง ผมแนะนำให้ใช้ Softphone แก้ขัดไปก่อนครับ
5. คอนฟิก Asterisk AMI
5.1 เพิ่มคอนฟิกสำหรับให้ vtiger ติดต่อสั่งงาน Asterisk ได้ เข้าไปในไฟล์ manager_custom.conf
- โค้ด: เลือกทั้งหมด
vi /etc/asterisk/manager_custom.conf
- โค้ด: เลือกทั้งหมด
[vtiger]
secret=password
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read=system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write=system,call,command,agent,user,config,reporting,originate
5.2 รีโหลด Asterisk Manager
- โค้ด: เลือกทั้งหมด
# asterisk -rx "manager reload"
5.3 ตรวจสอบ
- โค้ด: เลือกทั้งหมด
# asterisk -rx "manager show users"
จะเห็น vtiger อยู่ด้วย
username
--------
admin
phpconfig
phpagi
AstTapi
a2billinguser
remote_mgr
vtiger
--------
6. คอนฟิก vtiger ให้รู้ว่ามันต้องติดต่อกับ Asterisk ตัวไหน
6.1 ล๊อกอินเข้า vtiger ด้วย admin ลิ้งค์นี้ครับ http://x.x.x.x/vtigercrm
6.2 คลิ๊กตามนี้ครับ Settings -> Module Manager
6.3 หา PBX Manager คลิ๊กที่รูป Setting ด้านขวามือ
6.4 คอนฟิกแล้วคลิ๊ก Update
7. คอนฟิก User Account ใน vtiger
ทุก User ใน Vtiger ต้องคอนฟิก Extension เพื่อให้ Click to Call เวอร์ค
7.1 ล๊อกอินเข้า vtiger ด้วย admin
7.2 เข้าเมนู Settings -> Settings คลิ๊ก Users
7.3 สร้างใหม่คลิ๊ก "New User" หรือแก้ไข User เดิมให้คลิ๊กที่ชื่อ User นั้น
7.4 หา "Asterisk Configuration" จะเห็น Asterisk Extension และ Receiving Incoming Calls ซึ่ง "Asterisk Extension" ก็คือ Extension ของ User ส่วน "Receiving Incoming Call" ให้คลิ๊กถ้าต้องการรับ incoming call ด้วย
8. สร้าง Account ใน vtiger พร้อมใส่เบอร์โทรศัพท์
จะสร้างจากเมนู Marketing -> Accounts หรือ Sales -> Accounts หรือ Support -> Accounts หรือเมนูอื่นๆก็ได้นะครับ ตามสะดวก จุดประสงค์คือเพื่อให้มีเบอร์โทรศัพท์ที่เราจะใช้เทส Click to Call ได้
ตอนใส่เบอร์โทรศัพท์ ใส่ได้ 3 แบบนะครับ ได้แก่
- ใส่เบอร์โทรศัพท์อย่างเดียว เช่น 028888888
- ใส่คำว่า SIP: ตามด้วยเบอร์โทรศัพท์ เช่น SIP:028888888
- ใส่คำว่า PSTN: ตามด้วยเบอร์โทรศัพท์ เช่น PSTN:028888888
การใส่เบอร์โทรทั้ง 3 แบบนี้ตอนที่ vtiger จะโทรไปยังเบอร์นั้นมันจะใช้ Context ของ Asterisk ต่างกันครับ ซึ่งค่าดีฟอลท์ของ vtiger นั้นนะครับ (เขียนไว้ในไฟล์ AsteriskClass.php) จะใช้ Context ชื่อ default (เบอร์โทรศัพท์มีตัวเลขอย่างเดียว) หรือ local-extensions (เบอร์โทรศัพท์มีคำว่า SIP: ข้างหน้า) หรือ from-inside (เบอร์โทรศัพท์มีคำว่า PSTN: อยู่ด้วย) ตามนี้ครับ
- โค้ด: เลือกทั้งหมด
switch($typeCalled){
case "SIP":
$context = "local-extensions";
break;
case "PSTN":
$context = "from-inside";//"outbound-dialing";
break;
default:
$context = "default";
9. แก้ไขไฟล์คอนฟิกของ vtiger
ไฟล์ชื่อ AsteriskClass.php
- โค้ด: เลือกทั้งหมด
vi /var/www/html/vtigercrm/modules/PBXManager/utils/AsteriskClass.php
เดิม
- โค้ด: เลือกทั้งหมด
switch($typeCalled){
case "SIP":
$context = "local-extensions";
break;
case "PSTN":
$context = "from-inside";//"outbound-dialing";
break;
default:
$context = "default";
ใหม่
- โค้ด: เลือกทั้งหมด
switch($typeCalled){
case "SIP":
$context = "from-internal";
break;
case "PSTN":
$context = "from-internal";//"outbound-dialing";
break;
default:
$context = "from-internal";
เซฟไฟล์
10. เทสโทรออก
10.1 ล๊อกอินเข้า vtiger ด้วย Username/Password ที่คอนฟิกไว้ พร้อมรีจิสเตอร์ Softphone ด้วย Extension ที่ตรงกันกับ Extension ใน User
10.2 เปิดหน้าเว็บ vtiger ที่มีเบอร์โทรศัพท์
10.3 คลิ๊กที่เบอร์โทรศัพท์ สักครู่ Softphone ก็จะ Ring
10.4 รับสายแล้วรอสักพักจนกว่าปลายทางจะรับสาย
11. เทสรับสายเข้า
รันไฟล์ /var/www/html/vtiger/cron/modules/PBXManager/AsteriskClient.php ค้างไว้ มีข้อความ Error อะไรก็ปล่อยไปก่อนครับ (ดูวิธีการแก้ไข Error ด้านล่างนะครับ)
- โค้ด: เลือกทั้งหมด
# /var/www/html/vtiger/cron/modules/PBXManager/AsteriskClient.php
- โค้ด: เลือกทั้งหมด
Date: 30-09-2010
Connecting to asterisk server.....
Connected successfully
Trying to login to asterisk
Logged in successfully to asterisk server
ผมเทสโดยการล๊อกอินเข้า vtiger ด้วย Username/Password ที่คอนฟิกเบอร์ Extension 100 ไว้ จากนั้นผมใช้เบอร์จากภายนอกโทรเข้าไปที่เซอร์เวอร์ ผมโทรจากเบอร์ "12127773555" ทำทีว่าผมเป็นลูกค้าจากประเทศ USA โทรเข้ามาเบอร์ Call Center แล้วระบบก็โอนสายมาเข้าเบอร์ Extension 100 ของ Agent สาวสวย เสียงดี คนหนึ่ง
เมื่อมีสายเรียกเข้ามา Softphone ที่ Agent ใช้ก็จะดังก่อนครับ
กดรับสายลูกค้า รอสักพักก็จะมี pop up โชว์ขึ้นมาบนหน้าเว็บ vtiger ที่เราเปิดไว้ แต่เนื่องจากเบอร์ "12127773555" ยังไม่เคยมีอยู่ในฐานข้อมูล vtiger เลย ระบบก็เลยแจ้งด้วยข้อความคล้ายๆแบบนี้ครับ
เลือกอันใดอันหนึ่งระหว่าง Create Lead (สร้าง Lead), Create Account (สร้าง Account), Create Contact (สร้าง Contact) หรือ Create Ticket (เปิด Ticket) ผมคลิ๊กเลือก Create Account จากนั้นสอบถามข้อมูลจากลูกค้าแล้วเอามากรอกดังรูปแล้วกด "Save" บันทึกข้อมูล
เบอร์โทรศัพท์ในช่อง "Office Phone" นั้นมันโชว์ของมันอย่างที่เห็นในรูปนะครับ จะปล่อยไว้อย่างนั้นหรือว่าจะลบ SIP: ออกก็ได้ ให้เหลือแต่ตัวเลขเบอร์โทรศัพท์ 12127773555 ส่วนเบอร์ในช่อง "Mobile" นั้นผมก๊อบมาใส่เอง
** ผมลองโทรเข้าหลายๆครั้ง รู้สึกว่ามันมั่วยังไงก็ไม่รู้นะครับ บางทีก็โชว์ pop-up บางทีก็เงียบ แถมเวลาที่ผมเอาเบอร์ที่สร้าง Account/Contact ไว้แล้วมาโทรเข้า เช่นเบอร์ 12127773555 แทนที่ vtiger จะโชว์ Caller ID เป็นเบอร์นั้น มันกลับโชว์เป็นเบอร์ Extension ของ Agent แทน เป็นงง**
ผมสรุปของผมเองอย่างนี้นะครับ โทรออกเวอร์ค 100% แต่โทรเข้านี่ไม่เวอร์ค สงสัยว่าผมจะยังเซ็ตอะไรไม่ครบถ้วน ท่านใดใช้งานแล้วเวอร์ค มาอัพเดทให้หน่อยนะครับจะเป็นพระคุณยิ่ง
12. แก้ไขปัญหา
12.1 คลิ๊กโทรออกแล้วได้ยินเสียง "goodbye"
ที่ Asterisk Console จะมีข้อความแบบนี้ครับ
- โค้ด: เลือกทั้งหมด
== Starting SIP/100-00000035 at default,6627777777,1 failed so falling back to exten 's'
-- Executing [s@default:1] Playback("SIP/100-00000035", "vm-goodbye") in new stack
== Manager 'vtiger' logged off from 127.0.0.1
-- <SIP/100-00000035> Playing 'vm-goodbye.gsm' (language 'en')
-- Executing [s@default:2] Macro("SIP/100-00000035", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/100-00000035", "1?noautomon") in new stack
-- Goto (macro-hangupcall,s,3)
-- Executing [s@macro-hangupcall:3] NoOp("SIP/100-00000035", "TOUCH_MONITOR_OUTPUT=") in new stack
-- Executing [s@macro-hangupcall:4] GotoIf("SIP/100-00000035", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,7)
-- Executing [s@macro-hangupcall:7] GotoIf("SIP/100-00000035", "1?skipblkvm") in new stack
-- Goto (macro-hangupcall,s,10)
-- Executing [s@macro-hangupcall:10] GotoIf("SIP/100-00000035", "1?theend") in new stack
-- Goto (macro-hangupcall,s,12)
-- Executing [s@macro-hangupcall:12] Hangup("SIP/100-00000035", "") in new stack
== Spawn extension (macro-hangupcall, s, 12) exited non-zero on 'SIP/100-00000035' in macro 'hangupcall'
== Spawn extension (default, s, 2) exited non-zero on 'SIP/100-00000035'
ปัญหาเกิดจากค่าดีฟอลท์ของ vtiger มันใช้เรียก Asterisk โดยระบุ Context ชื่อ default ซึ่งเป็น Context ที่ไม่มีอยู่จริงใน Asterisk ก็เลยทำให้โทรไม่ได้ และมีเสียง goodbye วิธีการแก้ปัญหาคือทำให้ vtiger เรียก Context ที่มีอยู่จริงๆใน Asterisk เช่น from-internal โดยแก้ไขในไฟล์ AsteriskClass.php ดังนี้
- โค้ด: เลือกทั้งหมด
vi /var/www/html/vtigercrm/modules/PBXManager/utils/AsteriskClass.php
- โค้ด: เลือกทั้งหมด
switch($typeCalled){
case "SIP":
$context = "local-extensions";
break;
case "PSTN":
$context = "from-inside";//"outbound-dialing";
break;
default:
$context = "default";
ใหม่
- โค้ด: เลือกทั้งหมด
switch($typeCalled){
case "SIP":
$context = "from-internal";
break;
case "PSTN":
$context = "from-internal";//"outbound-dialing";
break;
default:
$context = "from-internal";
เซฟไฟล์แล้วลองใหม่
12.2 รัน AsteriskClient.php แล้วมี Error คล้ายๆแบบนี้
- โค้ด: เลือกทั้งหมด
[root@sweetheart PBXManager]# ./AsteriskClient.php
PHP Notice: Undefined index: action in /var/www/html/vtigercrm/include/utils/utils.php on line 995
PHP Notice: Undefined index: search in /var/www/html/vtigercrm/include/utils/utils.php on line 996
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: file in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1001
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1005
PHP Notice: Undefined index: action in /var/www/html/vtigercrm/include/utils/utils.php on line 995
PHP Notice: Undefined index: search in /var/www/html/vtigercrm/include/utils/utils.php on line 996
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: file in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1001
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1005
PHP Notice: Undefined index: action in /var/www/html/vtigercrm/include/utils/utils.php on line 995
PHP Notice: Undefined index: search in /var/www/html/vtigercrm/include/utils/utils.php on line 996
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: file in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1001
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1005
PHP Notice: Undefined index: action in /var/www/html/vtigercrm/include/utils/utils.php on line 995
PHP Notice: Undefined index: search in /var/www/html/vtigercrm/include/utils/utils.php on line 996
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: file in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1001
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1005
PHP Notice: Undefined index: action in /var/www/html/vtigercrm/include/utils/utils.php on line 995
PHP Notice: Undefined index: search in /var/www/html/vtigercrm/include/utils/utils.php on line 996
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: file in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1000
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1001
PHP Notice: Undefined index: module in /var/www/html/vtigercrm/include/utils/utils.php on line 1005
Date: 29-09-2010
Connecting to asterisk server.....
Connected successfully
Trying to login to asterisk
Logged in successfully to asterisk server
สาเหตุเกิดจากเรายังไม่ได้ปรับแต่งไฟล์ /etc/php.ini ครับ ปรับค่าต่างๆดังต่อไปนี้
- โค้ด: เลือกทั้งหมด
allow_call_time_reference = on
error_reporting = E_WARNING & ~E_NOTICE
safe_mode = off
display_errors = on
file_uploads = on
max_execution_time = 600
memory_limit = 128M
log_errors = off
output_buffering = on
register_globals = off
short_open_tag = on
upload_max_filesize = 20M
แต่จะบอกว่าพารามิเตอร์ข้างบนนี้ จริงๆไม่รู้ว่าอันไหนแก้ไขแล้วทำให้ข้อความ Error หายไป พอดีผมหาในเน็ตแล้วก็ลองแก้ไขดูเลย แล้วก็เวอร์ค ไงก็ฝากช่วยเทสหน่อยนะครับแล้วอัพเดทด้วย
12.3 แสดงเบอร์โทรเข้า (Caller ID) ผิด
เอาเบอร์ 12127773555 โทรเข้าหา 100 ปรากฏว่า Pop-Up โชว์ว่า Caller คือ 100 ซึ่งผิด ทั้งๆที่บนหน้า Display ของ Softphone เบอร์ 100 ก็โชว์ว่า Caller คือ 12127773555
เกิดจากยังเซ็ตพารามิเตอร์ของ php.ini ไม่เหมาะสมครับ เซ็ตตามข้อ 12.2 ก็จะแสดงเบอร์ Caller ถูกต้องครับ ดังตัวอย่าง
12.4 ตอนโทรเข้า นานกว่าจะมี Pop-Up แสดงขึ้นมา
...
12.5 ตอนโทรเข้า ส่วนใหญ่ไม่มี Pop-Up แสดงขึ้นมา
เกิดจากไฟล์ AsteriskClient ไม่ทำงาน กด Control C ออกจากไฟล์ แล้วรันใหม่