หน้า 1 จากทั้งหมด 1

การเขียน Dialplan เพื่อโอนสายไปยังเบอร์อื่นตามเงื่อนไขการโทร

โพสต์โพสต์แล้ว: 09 ม.ค. 2017 09:15
โดย nuiz
สมมติว่าเรามีความต้องการประมาณว่า เมื่อโทรไปเบอร์ Extension เบอร์ใดเบอร์หนึ่งแล้ว ถ้าพบผลลัพธ์ของการโทรเป็นอย่างนี้ ก็ให้ Asterisk ไปทำอย่างนั้น คงไม่งงนะครับ ตัวอย่างเช่น ถ้าโทรไปแล้วเบอร์ปลายทางสายไม่ว่าง ให้ไปดังที่เบอร์อื่นแทน อย่างนี้เป็นต้นครับ

ในการสั่งโทรไปหาเบอร์ปลายทาง เราใช้คำสั่ง Dial บอก Asterisk ครับ ซึ่งผลลัพธ์ของคำสั่งนี้ Asterisk จะเก็บไว้ในตัวแปรที่ชื่อว่า DIALSTATUS เราก็แค่เช็คค่าของตัวแปรตัวนี้ เราก็จะรู้ว่า "สถานะการโทร" เป็นอย่างไร ซึ่งสถานะ (หรือผลลัพธ์) ของตัวแปร DIALSTATUS มีหลายอย่าง ใช้อักษรตัวใหญ่นะครับ

ANSWER - ปลายทางรับสาย
BUSY - ปลายทางสายไม่ว่าง Asterisk ได้สัญญาณ Busy Tone (กรณีที่เป็น DAHDI) หรือได้รับข้อความ BUSY เลย (กรณีที่เป็น SIP)
NOANSWER - ปลายทางไม่รับสาย จนกระทั่งหมดเวลา Dial Timeout
CANCEL - ต้นทางวางสายก่อนที่ปลายทางจะรับสาย
CONGESTION - เบอร์ปลายทางไม่ถูกต้อง
CHANUNAVAIL - ไม่สามารถติดต่อเบอร์ปลายทางได้ เช่น เบอร์ Extension ไม่รีจิสเตอร์ หรือปลายทางตอบกลับมาว่า Not Found (กรณีเป็น SIP เชื่อมต่อกับภายนอก)
DONTCALL - ใช้ใน Privacy mode (ซึ่งผมยังไม่รู้ว่ามันคืออะไร) เมื่อปลายทางตัดสายทิ้ง
TORTURE - ใช้ใน Privacy mode เมื่อปลายทางส่งต้นทางเข้า Tortue Menu (ซึ่งผมยังไม่รู้ว่ามันคืออะไร)
INVALIDARGS - Asterisk พบว่ารูปแบบคำสั่ง Dial มันผิด ใช้ตัวแปรไม่ถูกต้อง เขียนคำสั่งผิด ใช้เครื่องหมายผิด ประมาณนี้ครับ

มาลองดูตัวอย่างการใช้งานครับ ในไฟล์ /etc/asterisk/extensions.conf (ซึ่งจริงๆแล้วผมลอกมาจากไฟล์ /etc/asterisk/extensions_additional.conf ใน Elastix นั่นแหล่ะครับ แล้วเอามาปรับใช้งาน) เวอร์คดีครับ ทำงานได้อย่างที่ต้องการเลย ในตัวอย่างด้านล่างนี้เป็นการโทรผ่าน SIP Trunk ที่มีชื่อว่า 2E1-Out ครับ ซึ่งเวลาโทรเบอร์ 1xxx - 5xxx ถ้าปลายทางไม่รับสาย สายไม่ว่าง เบอร์ไม่มี ก็จะไปดังที่เบอร์อื่นแทน

[from-internal]
...
exten => _[1-5]XXX,1,Dial(SIP/2E1-Out/${EXTEN})
exten => _[1-5]XXX,n,Goto(s-${DIALSTATUS},1)

exten => s-CHANUNAVAIL,1,Goto(dial-100,s,1)
exten => s-BUSY,1,Goto(dial-200,s,1)
exten => s-NOANSWER,1,Goto(dial-300,s,1)

[dial-100]
exten => s,1,Dial(SIP/100)

[dial-200]
exten => s,1,Dial(SIP/200)

[dial-300]
exten => s,1,Dial(SIP/300)

ประมาณนี้ครับ ลองใช้งานดูนะครับ

บทความที่เกี่ยวข้อง
เทคนิคการติดตั้ง Asterisk 13.5.0
เทคนิคการติดตั้ง Asterisk 13.13.1 และให้รองรับ SIP TLS และ SRTP
เทคนิคการใช้งาน Mikrotik RouterOS