เสียง Dial tone แรกที่เราได้ยินเรียกว่า First Dial Tone (หรือจะเรียกว่า Dial tone เฉยๆก็ได้ครับ) ส่วน Dial Tone ครั้งที่สองนั้นเราเรียกว่า Second Dial Tone ครับ และเราเรียกวิธีการโทรออกที่ได้ยินเสียง Dial tone สองครั้งแบบนี้ว่า "Two Stage Dialing"
เทคนิคในบทความนี้จะทำให้เบอร์ Extension บน Elastix/Asterisk โทรออกแบบ Two Stage Dialing
** การโทรออกแบบ Two Stage Dialing ตามบทความนี้ ไม่ได้มีผลกับทุกคอลนะครับ เฉพาะคอลที่กด 9 แล้วส่งมาเข้า Elastix เท่านั้น ส่วนที่กดเลขอื่นๆนำหน้าไม่มีผลอะไรครับ **
** มีสมาชิกถามถึงฟีเจอร์ลักษณะนี้มา เดิมทีใช้งานตู้สาขาโทรศัพท์อยู่ ซึ่งตอนยูสเซอร์โทรออกเขาก็ยกหู ได้ยิน Dial tone กด 9 ได้ยิน Dial tone อีกครั้ง ถนัดใช้งานกันแบบนี้ ต่อมาเปลี่ยนจากตู้สาขาโทรศัพท์มาเป็น Elastix ครั้นจะบอกยูสเซอร์ว่าคุณไม่ต้องกด 9 ก่อนแล้วนะ ยกหูกดเบอร์ปลายทางได้เลย เกรงว่าจะมีแรงต่อต้านเล็กๆ เลยไม่อยากให้เปลี่ยนพฤติกรรมเดิมทันทีทันใด ให้คนใช้งานแบบเดิมๆได้ด้วย ค่อยๆเปลี่ยนไปทีละนิดๆ สุดท้ายคนก็จะเห็นว่า แบบใหม่มันง่ายกว่า ไม่ต้องกด 9 โทรติดเร็วกว่า ประหยัดเวลากว่าเห็นๆ ให้เขาเปลี่ยนของเขาเองจะดีกว่า **
อ่่านตรงนี้นิดนึงครับ บางทีท่านอาจจะไม่ต้องใช้บทความนี้เลยก็ได้
1. เสียง Dial tone ที่ได้ยินในบทความนี้ เป็นเสียง "ปลอม" ที่ Asterisk มันทำขึ้นมานะครับ ไม่ใช่เสียง Dial Tone ที่ได้จาก PSTN หรือ Trunks จริงๆ
2. ถ้าท่านมีอุปกรณ์จำพวก VoIP ATA FXS Gateway อาจจะทำที่อุปกรณ์เหล่านั้นเลยก็ได้ กด 9 ให้ทำเสียง Dial tone ออกมา ซึ่งผมเชื่อว่าน่าจะทำได้ทุกยี่ห้อ ตัวอย่างวิธีคอนฟิก Dialplan บน LinkSys/Cisco ATA FXS Gateway กด 9 มีเสียง Dial tone
3. อุปกรณ์พวก Softphone ก็ควรจะให้กดเบอร์โทรออกตรงๆได้เลยครับ ไม่ต้องกด 9
4. ข้อนี้สำคัญครับ ใน CDR จะเก็บเฉพาะกด 9 เท่านั้นครับ เบอร์หลังจากนั้นมันจะไม่เก็บแล้ว ทั้งนี้เพราะว่าเวลา Asterisk เก็บ CDR มันจะเก็บเบอร์ปลายทาง (เบอร์ในตัวมัน ก่อนจะมีการรับสาย) หาก Asterisk รับสายแล้ว ตัวเลขหลังจากนั้นถือว่าเป็น DTMF ครับ ไม่ใช่เบอร์โทรศัพท์ ไม่ใช่เบอร์ปลายทาง มันจึงไม่เก็บใน CDR ครับ
กด 9 มีเสียง Dial tone แล้วกดเบอร์ปลายทาง 0851619439 วิธีการคอนฟิกก็ไม่มีไรซับซ้อน ตามนี้เลยครับ
1. สร้าง Trunks โทรออกสายนอก
เป็น Trunks แบบไหนก็ได้ครับ DAHDI, SIP, IAX2
เมนู PBX -> Trunks
DAHDI Trunk:
SIP Trunk:
2. คอนฟิก Outbound Routes
ตั้ง Code ให้โทรออกไปภายนอกได้ เครื่องผมตั้งไว้ว่าโทรไปภายนอก กด 0x เช่น 0851619439 ได้เลย
- เพิ่ม Code เช็ค 0 ให้โทรออก Trunk ตามข้อ 1 (สังเกตุว่าไม่มี Code 9 นะครับ)
3. คอนฟิก DISA
พระเอกของบทความนี้ก็คือ DISA นี่แหล่ะครับ เพราะเวลาเราเรียกเข้า DISA ก็จะได้ยินเสียง Dial Tone พอกดหลักแรกเสียงก็จะหยุด เราก็กดเบอร์ที่เหลือต่อได้ พอหมดเวลา Timeout มันก็จะโทรออกให้เรา
กด Submit แล้วสังเกตุหน้าเว็บด้านขวามือครับ อาจจะมี DISA อยู่หลายอัน แต่ละอันจะมีหมายเลขกำกับไว้ หมายเลขนั้นคือลำดับการสร้าง DISA ครับ ให้จำตัวเลขของอันที่เราสร้างไว้เพื่อผลิต Dialtone นะครับ คือ เลข 1
4. เข้าไปดูในไฟล์ /etc/asterisk/extensions_additional.conf
ดูเฉยๆครับไม่ต้องทำอะไร
ค้นหา [disa] ครับ จะเห็นแบบนี้
- โค้ด: เลือกทั้งหมด
[disa]
include => disa-custom
exten => 1,1,Answer
exten => 1,n,Set(_DISA=disa^1^newcall)
exten => 1,n(newcall),Set(_DISACONTEXT=from-internal)
exten => 1,n,Set(_KEEPCID=TRUE)
exten => 1,n,Set(_HANGUP=${TRUNK_OPTIONS})
exten => 1,n,Set(TIMEOUT(digit)=5)
exten => 1,n,Set(TIMEOUT(response)=10)
exten => 1,n,DISA(no-password,disa-dial)
exten => 1,n(end),Hangup
exten => 2,1,Answer
exten => 2,n,Set(_DISA=disa^2^newcall)
exten => 2,n(newcall),Set(_DISACONTEXT=from-internal)
exten => 2,n,Set(_KEEPCID=TRUE)
exten => 2,n,Set(_HANGUP=${TRUNK_OPTIONS})
exten => 2,n,Set(TIMEOUT(digit)=5)
exten => 2,n,Set(TIMEOUT(response)=10)
exten => 2,n,DISA(no-password,disa-dial)
exten => 2,n(end),Hangup
exten => 3,1,Answer
exten => 3,n,Set(_DISA=disa^3^newcall)
exten => 3,n(newcall),Set(_DISACONTEXT=from-internal)
exten => 3,n,Set(_KEEPCID=TRUE)
exten => 3,n,Set(_HANGUP=${TRUNK_OPTIONS})
exten => 3,n,Set(TIMEOUT(digit)=5)
exten => 3,n,Set(TIMEOUT(response)=10)
exten => 3,n,DISA(no-password,disa-dial)
exten => 3,n(end),Hangup
; end of [disa]
เห็นมั๊ยครับว่ามี 3 อัน 1 คือ Dialtone(1), 2 คือ For Callback(2) และ 3 คือ Callcenter(3)
ออกจากไฟล์
5. แก้ไขไฟล์ /etc/asterisk/extensions.conf
ไฟล์นี้แก้ไขได้นะครับ ไม่ต้องกลัวว่าเวลากด Apply Configuration Changes Here แล้วข้อมูลมันจะหาย
ค้นหา [from-internal] ครับ แล้วเติมบรรทัดต่อไปนี้เข้าไป บรรทัดไหนมีแล้วก็ไม่ต้องเพิ่มเข้าไปนะครับ เดี๋ยวจะใช้งานไม่ได้
- โค้ด: เลือกทั้งหมด
[from-internal]
include => from-internal-xfer
include => bad-number
exten => 9,1,Noop(Generating Dialtone)
exten => 9,n,Macro(user-callerid,)
exten => 9,n,Goto(disa,1,1)
ที่ให้เพิ่มคือ 3 บรรทัดล่างหน่ะครับ บรรทัดที่ 3 เรียกไปยัง Context [disa] exten 1 บรรทัด 1 ตามหัวข้อที่ 5
เซฟไฟล์
6. รีโหลด Dialplan
รันคำสั่งนี้จาก Linux Prompt
- โค้ด: เลือกทั้งหมด
asterisk -rx "dialplan reload'
หรือคำสั่งนี้จาก Asterisk Console
- โค้ด: เลือกทั้งหมด
dialplan reload
7. โทรทดสอบดูครับ
กด 9 จะได้ยินเสียง Dialtone แล้ว จากนั้นกดเบอร์ปลายทาง เสียง Dialtone จะดับเมื่อเรากดเลขหลักแรก ค่าเวลา Timeout ต่างๆเป็นไปตามที่เราตั้งไว้ตอนคอนฟิก DISA ครับ ซึ่งได้แก่
Response Timeout - ระยะเวลารอ (เป็นวินาที) นับจาก Asterisk ทำเสียง Dialtone ออกมาแล้ว ถ้าเราไม่กดตัวเลขใดๆภายในระยะเวลานี้ Asterisk จะวางสาย
Digit Timeout - ระยะเวลารอ (เป็นวินาที) นับจากที่เรากดตัวเลขแล้ว (กี่หลักก็ได้) แล้วเราไม่กดตัวต่อไป เมื่อหมดเวลานี้ Asterisk จะโทรไปยังเบอร์ที่เรากด
หมดแล้วครับสำหรับเทคนิคแปลกๆที่ว่าต้องการเสียง Dialtone ก่อนกดเบอร์ปลายทาง ถึงแม้จะได้ยินเสียง Dialtone ก็ตาม มันไม่ใช่ Dialtone ที่ส่งมาจาก Trunk ภายนอก มันเป็น Dialtone ที่ Asterisk ทำขึ้นมาเอง ซึ่งตามปกติคนใช้งานจะคิดว่าได้สัญญาณว่างมันน่าจะโทรได้นี่นา บางทีถ้าโทรไม่ออกก็จะทำให้คนใช้งานงงได้เหมือนกันนะครับ
หวังว่าจะช่วยแก้ปัญหาการใช้งานของท่านได้นะครับ
บทความที่เกี่ยวข้อง
เทคนิคกด 9 ได้ยิน Dial Tone แล้วค่อยกดเบอร์โทรออก บน Linksys
เทคนิคการติดตั้ง Elastix 2.5
Elastix