บน Asterisk เราเซ็ต Call Forward ได้ 3 เงื่อนไขนะครับคือ Unconditional (โอนสายทุกกรณี), Busy (โอนสายเมื่อสายไม่ว่าง) และ Unanswered (โอนสายเมื่อไม่รับสายภายในเวลาที่กำหนดไว้)
เอาหล่ะครับ ผมจะแนะนำวิธีการเซ็ต Unconditional Call Forward ก่อน ซึ่งผมเตรียมเบอร์ Extension ไว้ 3 เบอร์คือ *21* (โทรเข้าไปตั้งเบอร์ที่จะโอนไป), *22* (โทรเข้าไปยกเลิกการโอนสาย) และ *23* (โทรเข้าไปฟังดูว่าตอนนี้โอนสายไปเบอร์ไหนอยู่) มีเสียงบอกเบอร์ด้วยนะครับ ปรับเปลี่ยนเบอร์ได้ตามใจชอบครับ
วิธีการใช้งานก็กด *21* ตามด้วยเบอร์ที่จะโอนสายไป เช่น *21*0851619439 ครับ
[call-forward]
exten => _*21*X.,1,Answer
exten => _*21*X.,n,Set(DB(CFIM/${CALLERID(num)})=${EXTEN:4})
exten => _*21*X.,n,Playback(call-fwd-unconditional)
exten => _*21*X.,n,SayDigits(${EXTEN:4})
exten => _*21*X.,n,Hangup
exten => *22*,1,Answer
exten => *22*,n,Set(cfim_cancel=${DB_DELETE(CFIM/${CALLERID(num)})})
exten => *22*,n,Playback(call-fwd-cancelled)
exten => *22*,n,Hangup
exten => *23*,1,Answer
exten => *23*,n,Set(cfim_current=${DB(CFIM/${CALLERID(num)})})
exten => *23*,n,Playback(call-fwd-unconditional)
exten => *23*,n,SayDigits(${cfim_current})
exten => *23*,n,Hangup
คอนเซ็ปต์การเซ็ตอัพ Call Forward ของ Asterisk ก็มีประมาณนี้นะครับ เรียกใช้งาน Asterisk Database โดยส่งข้อมูลไปเก็บไว้ให้อยู่ในรูปแบบ family/key ซึ่งในตัวอย่าง family คือ CFIM (น่าจะย่อมาจาก Call Forward Immediately เดาเอาหน่ะ) และ key คือ CALLERID(num) ซึ่งก็คือเบอร์ Extension ของเรานั่นเอง หลังจากนั้น Asterisk จะเอาไปเก็บไว้ที่ไฟล์ /var/lib/asterisk/astdb นะครับ เพื่อรอให้เราเรียกใช้งาน ไฟล์นี้เป็น binary เราเรียกดูตรงๆไม่ได้ ต้องใช้คำสั่งเรียกดูครับ เช่น บน Linux Prompt พิมพ์คำสั่ง asterisk -rx "database show" หรือบน Asterisk Prompt ก็พิมพ์คำสั่ง database show
เวลาเมมเบอร์ที่จะโอนสายให้ Asterisk รับทราบแล้ว เราเช็คดูจากคำสั่งก็จะประมาณนี้ครับ
- โค้ด: เลือกทั้งหมด
[sip2.voip4share.com ~]# asterisk -rx "database show"
/CFIM/80999 : 0851619439
มาดูตัวอย่างการเอาไปใช้งานนะครับ
** ปล. การเอาไปใช้งานผมยังไม่ได้เทสนะครับ ก๊อบมาจากเน็ต ส่วนข้างบนที่เซ็ตเบอร์นั้นเทสแล้วครับ เวอร์ค 100% **
[from-internal]
include => call-forward
exten => _1XX,1,Set(temp=${DB(CFIM/${CALLERID(num)})}) ; เช็คดู CFIM ของเบอร์ Extension ถ้าหาไม่เจอ (ไม่ได้เซ็ตโอนสายไว้) ก็จะกระโดดไปที่ Priority 102
exten => _1XX,2,Dial(SIP/${temp}@trunk) ; โอนสายไปเบอร์ที่เมมไว้
exten => _1XX,3,Dial(${EXTEN},60) ; รอรับสาย
exten => _1XX,4,Hangup
; ถ้าไม่เจอ CFIM ก็โทรเบอร์ Extension ปกติ
exten => _1XX,102,Goto(from-internal,3)
บทความที่เกี่ยวข้อง
การใช้งาน Busy Call Forward บน Asterisk