เทคนิคและวิธีการเขียน Asterisk Dialplan I ตอนที่ 3

Asterisk Opensource IP Pbx

เทคนิคและวิธีการเขียน Asterisk Dialplan I ตอนที่ 3

โพสต์โดย voip4share » 03 มี.ค. 2010 17:53

Asterisk Dialplan ตอนที่ 1
Asterisk Dialplan ตอนที่ 2

การเขียน Asterisk Dialplan ตอนที่ 3

5. เพิ่ม Context เพื่อให้โทรระหว่าง Extensions ภายใน Asterisk ได้
ตัวอย่างที่ผ่านๆมาของเรานั้นนะครับ เรามีแค่ Context เดียว รับสายที่โทรเข้ามาจากภายนอก แต่ในการใช้งานจริงนั้นเราต้องให้ Asterisk ทำงานหลายๆงานซึ่งคงไม่ค่อยเหมาะที่จะ

เอาทุกงานมาโป๊ะไว้ใน Context เดียว ซึ่งนอกจากจะทำให้เขียน Dialplan ผิดพลาดได้ง่ายแล้วมันยังดูยุ่งยากอีกด้วย ดังที่ผมได้พูดไว้ตั้งแต่ตอนเริ่มต้นว่าหน้าที่สำคัญอย่างหนึ่งของ Context คือ เพื่อแยกหน้าที่หรือสิทธิการโทรออกสำหรับยูสเซอร์ระดับต่างๆ

ตัวอย่างต่อไปเราจะเพิ่มบางอย่างเข้าไปใน Dialplan โดยการสร้าง Extension ภายในขึ้นมา 2 เบอร์ และเราจะเซ็ตให้ทั้งสองเบอร์นี้ห้โทรหากันได้ สร้าง Context ใหม่กันก่อนครับ ตั้งชื่อว่า [internal]

ในตัวอย่างมีการใช้แชนแนล DAHDI ด้วย ถ้าไม่มีก็ไม่เป็นไรครับ ใช้แชนแนล SIP หรือ IAX แทนก็ได้ แต่ต้องแน่ใจว่าคอนฟิกถูกต้อง และต้องแน่ใจว่ารีจิสเตอร์กับ Asterisk ได้สำเร็จและมี Extension ตามนั้นจริง

[incoming]
exten => s,1,Answer()
exten => s,2,Background(enter-ext-of-person)
exten => 101,1,Dial(DAHDI/1,10)
exten => 101,2,Playback(vm-nobodyavail)
exten => 101,3,Hangup()
exten => 101,102,Playback(tt-allbusy)
exten => 101,103,Hangup()
exten => 102,1,Dial(SIP/jane,10)
exten => 102,2,Playback(vm-nobodyavail)
exten => 102,3,Hangup()
exten => 102,102,Playback(vm-nobodyavail)
exten => 102,103,Hangup()
exten => i,1,Playback(vm-invalid)
exten => i,2,Goto(incoming,s,1)
exten => t,1,Playback(vm-goodby)
exten => t,2,Hangup()

[internal]
exten => 101,1,Dial(DAHDI/1,,r)
exten => 102,1,Dial(SIP/jane,,r)


ในตัวอย่างนี้เราได้เพิ่มอีก 2 Extension ใหม่เข้าไปใน Context [internal] ยูสเซอร์ที่ต่อกับ DAHDI/1 ยกหูโทรศัพท์แล้วโทรหายูสเซอร์ที่ใช้แชนแนล SIP/jane ได้โดยกด 102

และด้วยวิธีเดียวกันเครื่องที่รีจิสเตอร์เป็น SIP/jane ก็โทรหา DAHDI/1 ได้โดยกด 101

ตั้งเบอร์ Extension เป็นอะไรก็ได้ตามใจชอบไม่จำเป็นต้องเป็น 101 และ 102 จะใช้ตัวเลขอะไรก็ได้ กี่หลักก็ได้ แล้วแต่ความสะดวก แต่ต้องไม่ยาวเกิน 80 ตัว และอย่าลืมว่าเราใช้ Extension แบบชื่อก็ได้ไม่จำเป็นต้องเป็นตัวเลข เช่น

[incoming]
exten => s,1,Answer()
exten => s,2,Background(enter-ext-of-person)
exten => 101,1,Dial(DAHDI/1,10)
exten => 101,2,Playback(vm-nobodyavail)
exten => 101,3,Hangup()
exten => 101,102,Playback(tt-allbusy)
exten => 101,103,Hangup()
exten => 102,1,Dial(SIP/jane,10)
exten => 102,2,Playback(vm-nobodyavail)
exten => 102,3,Hangup()
exten => 102,102,Playback(vm-nobodyavail)
exten => 102,103,Hangup()
exten => i,1,Playback(vm-invalid)
exten => i,2,Goto(incoming,s,1)
exten => t,1,Playback(vm-goodby)
exten => t,2,Hangup()

[internal]
exten => 101,1,Dial(DAHDI/1,,r)
exten => john,1,Dial(DAHDI,1,,r)
exten => 102,1,Dial(SIP/jane,,r)
exten => jane,1,Dial(SIP/jane,,r)



ซึ่งก็จะทำให้โทรด้วยชื่อได้ด้วย อุปกรณ์ VoIP บางชนิดสามารถโทรด้วยชื่อได้ โดยโทรผ่านแชนแนลที่รองรับชื่อ เช่น SIP เป็นต้น

ตอนนี้ผู้ใช้ภายในสามารถโทรหากันเองได้ ต่อไปเราจะมาสร้าง Dialplan ที่ยืดหดได้และแก้ไขได้ง่ายในอนาคต

เทคนิคการเขียน Asterisk Dialplan ตอนที่ 4
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

ย้อนกลับไปยัง Asterisk SIP Server

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และ บุคคลทั่วไป 6 ท่าน

cron