เทคนิคจำกัดช่วงเวลาโทรใน Elastix - ทำในไฟล์คอนฟิก

Elastix IP Pbx

Moderator: jubjang

เทคนิคจำกัดช่วงเวลาโทรใน Elastix - ทำในไฟล์คอนฟิก

โพสต์โดย nuiz » 19 พ.ค. 2011 21:39

จากบทความนี้ เทคนิคการจำกัดช่วงเวลาการโทรออกบน Elastix - ทำผ่านเว็บ ก็ทราบว่าบางเครื่องของบางท่านไม่มีเมนูอย่างที่ผมว่า และผมก็ได้คอนฟิกเทสเล่นๆโดยไม่ได้ทำผ่านหน้าเว็บ ผลปรากฏว่าเวอร์คเหมือนกันครับ วิธีการเป็นดังต่อไปนี้

1. คอนฟิก Trunk และ Outbound Routes ตามปกติ
2. จำว่า Outbound Routes ที่ต้องการจำกัดช่วงเวลาการโทร ชื่อว่าอะไร
3. เปิดไฟล์ /etc/asterisk/extensions_additional.conf แล้วดูที่ context ชื่อว่า outbound-allroutes ดังต่อไปนี้

[outbound-allroutes]
include => outbound-allroutes-custom
include => outrt-1 ; 9_outside
include => outrt-2 ; 0_outside
include => outrt-3 ; 80_outside
include => outrt-4 ; 82_outside
include => outrt-6 ; 84_outside
exten => foo,1,Noop(bar)

แต่ละเครื่องจะมีรายละเอียดไม่เหมือนกันนะครับ แล้วแต่ว่าเจ้าของคอนฟิก Outbound Routes อะไรบ้าง แต่สิ่งที่ทุกเครื่องต้องมีเหมือนกันคือ context ที่ชื่อว่า outbound-allroutes

จาก outbound-allroutes นี้นะครับ ผมต้องการจะจำกัดช่วงเวลาโทรออกของเร้าท์ 9_outside ซึ่ง Elastix มันตั้งชื่อว่า outrt-1 ก็มาดู context ชื่อ outrt-1 ต่อ

4. ในไฟล์ /etc/asterisk/extensions_additional.conf ไฟล์เดิมนะครับ คราวนี้ดู context ชื่อว่า outrt-1

[outrt-1] ; 9_outside
include => outrt-1-custom
exten => _9.,1,Macro(user-callerid,LIMIT,)
exten => _9.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _9.,n,Set(_NODEST=)
exten => _9.,n,Macro(record-enable,${AMPUSER},OUT,)
exten => _9.,n,Macro(dialout-trunk,2,${EXTEN:1},)
exten => _9.,n,Macro(outisbusy,)

เราต้องบายพาส context ที่ชื่อ outrt-1 นี้นะครับ ถึงจะเวอร์ค หมายความว่าเวลาเรากด 9 เพื่อโทรออก ต้องไม่ให้ Asterisk มันอ่านคอนเท็ค outrt-1 จากไฟล์นี้ เพราะเรารู้ๆกันอยู่ว่าเราแก้ไขที่ไฟล์ extensions_additional.conf นี้ไม่ได้ วิธีการบายพาสก็ไม่ยากครับ คือไปเขียน context ชื่อ outrt-1 นี้ในไฟล์ใหม่ แล้วเราก็ไปโมดิฟาย outrt-1 ในไฟล์นั้นได้ตามใจชอบ แค่นั้นยังไม่พอนะครับ จะต้องให้ Asterisk เห็น context ชื่อ outrt-1 ในไฟล์ใหม่ก่อนไฟล์ extensions_additional.conf ด้วย คงไม่งงนะครับ

5. สร้างไฟล์ขึ้นมาใหม่ไฟล์นึงใน /etc/asterisk หรือจะเอาไฟล์ extensions_override_freepbx.conf ก็ได้
เอาเป็นว่าผมสร้างไฟล์ขึ้นมาใหม่ไฟล์นึง ชื่อว่า extensions_out_of_time.conf ข้างในไฟล์ก็มีข้อมูลแบบนี้

[outrt-1] ; 9_outside
include => outrt-1-custom
exten => _9.,1,Macro(user-callerid,LIMIT,)
exten => _9.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _9.,n,Set(_NODEST=)
exten => _9.,n,Macro(record-enable,${AMPUSER},OUT,)
exten => _9.,n,Macro(dialout-trunk,2,${EXTEN:1},)
exten => _9.,n,Macro(outisbusy,)

คุ้นๆมั๊ยครับ
แล้วจากนั้นแทรกบรรทัดที่จะจำกัดเวลาเข้าไป ควรจะเป็นบรรทัดแรกเลยนะครับ สมมติว่าไม่ให้โทรในช่วง 18:00 - 07:59 ถ้ามีใครพยายามโทรออกให้มีเสียงบอกว่า "ขออภัยค่ะ ท่านไม่สามารถใช้บริการในช่วงเวลานี้ได้" ดาวน์โหลดไฟล์เสียงนี้ ข้อมูลใหม่จะเป็นแบบนี้

[outrt-1] ; 9_outside
include => outrt-1-custom

exten => _9.,1,GotoIfTime(18:00-07:59|mon-fri|*|*?out-of-time|s|1)
exten => _9.,n,Macro(user-callerid,LIMIT,)
exten => _9.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _9.,n,Set(_NODEST=)
exten => _9.,n,Macro(record-enable,${AMPUSER},OUT,)
exten => _9.,n,Macro(dialout-trunk,2,${EXTEN:1},)
exten => _9.,n,Macro(outisbusy,)

[out-of-time]
exten => _s,1,Playback(th/prepaid-sorry-out-of-time)
exten => _s,1,Hangup

ไฟล์เสียงผมเอาไว้ที่ไดเร็คตอรี่ /var/lib/asterisk/sounds/th นะครับ ก็เลยต้องระบุไดเร็คตอรี่ไว้ข้างหน้าไฟล์เสียงในคำสั่ง Playback ด้วย เดี๋ยว Asterisk จะหาไฟล์ไม่เจอ

แล้วเซฟไฟล์

6. แก้ไขไฟล์ /etc/asterisk/extensions.conf นิดหน่อย
ให้แทรกบรรทัดนี้เข้าไปให้อยู่บนบรรทัด #include extensions_additional.conf

#include extensions_out_of_time.conf

อย่าลืมนะครับ บรรทัดนี้ต้องอยู่บน ไม่ใช่อยู่ล่าง เดี๋ยวมันจะไม่เวอร์ค


7. แล้วรีโหลด dialplan
asterisk -rx "dialplan reload"

7. ลองเทส
ถ้ามีการโทรในช่วงเวลาที่ระบุคือ 18:00 - 07:59 ก็จะถูกโยนเข้าไปยัง context ชื่อ out-of-time ก็จะได้ยินเสียงที่อัดไว้

ปัญหาครับ
1. จากที่ผมระบุช่วงเวลาไว้เป็น 18:00-07:59|mon-fri ซึ่งจะมีผลแค่ monday ถึง friday งั้นก็แสดงว่า saturday - sunday ก็โทรออกได้หน่ะสิ คำตอบคือ แม่นแล้วครับ แล้วจะทำยังไงถึงจะให้มีผลช่วง saturday-sunday ด้วย และต้องตั้งแต่ 00:00 - 23:59 คือทั้งวัน ... ไม่ยากครับ แค่เขียนบรรทัด GotoIfTime เพิ่ม

exten => _9.,1,GotoIfTime(18:00-07:59|mon-fri|*|*?out-of-time|s|1)
exten => _9.,n,GotoIfTime(*|sat-sun|*|*?out-of-time|s|1)
exten => _9.,n,Macro(user-callerid,LIMIT,)
exten => _9.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _9.,n,Set(_NODEST=)
exten => _9.,n,Macro(record-enable,${AMPUSER},OUT,)
exten => _9.,n,Macro(dialout-trunk,2,${EXTEN:1},)
exten => _9.,n,Macro(outisbusy,)

2. ถ้าวัน monday-friday เป็นวันหยุดหล่ะ ซึ่งก็ต้องโทรออกไม่ได้ จะทำยังไง
ก็ใส่บรรทัด GotoIfTime เพิ่มอีกครับ ยกตัวอย่างเช่น วันที่ 15 กรกฏาคม 2554 เป็นวันหยุดอาสาฬหบูชา ก็เขียนแบบนี้
exten => _9.,n,GotoIfTime(*|*|15|jul?out-of-time|s|1)

และพอดีว่ามันเป็นวันหยุด 4 วันติด 15,16,17,18 กรกฏาคม เขียนแบบนี้จะดูดีกว่าครับ

exten => _9.,n,GotoIfTime(*|*|15-18|jul?out-of-time|s|1)

3. ปีนี้เป็นปี 2554 อยากจะตั้งวันหยุดล่วงหน้าของปี 2555 ไว้เลย จะทำยังไง
ในฟังก์ชั่น GotoIfTime มันไม่มีให้ใส่ปี ก็คงต้องคอนฟิกใส่ไฟล์อื่นไว้ก่อนก็ได้ครับ แล้วค่อย include เข้าไปตอนวันสิ้นปี


หวังว่าคงช่วยแก้ปัญหาการใช้งานได้บ้างนะครับ

บทความที่เกี่ยวข้อง
เทคนิคการจำกัดช่วงเวลาการโทรออกบน Elastix, FreePBX โดยคอนฟิกผ่านหน้าเว็บ
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33

Re: เทคนิคจำกัดช่วงเวลาโทรใน Elastix - ทำในไฟล์คอนฟิก

โพสต์โดย sirom » 20 พ.ค. 2011 05:40

:D อย่างนี้เลยที่ใช่ ลองเสร็จเดี๋ยวรายงานผลครับ :mrgreen:
sirom
Silver Member
 
โพสต์: 27
ลงทะเบียนเมื่อ: 30 เม.ย. 2011 20:18

Re: เทคนิคจำกัดช่วงเวลาโทรใน Elastix - ทำในไฟล์คอนฟิก

โพสต์โดย sirom » 24 พ.ค. 2011 07:37

ตอนนี้จำกัดการโทรออกได้แล้ว แต่ไฟล์เสียง มันไม่ทำงานครับ เงียบไปเลยตอนโทรออกช่วงที่ outtime
sirom
Silver Member
 
โพสต์: 27
ลงทะเบียนเมื่อ: 30 เม.ย. 2011 20:18

Re: เทคนิคจำกัดช่วงเวลาโทรใน Elastix - ทำในไฟล์คอนฟิก

โพสต์โดย nuiz » 24 พ.ค. 2011 09:05

ไฟล์เสียงที่ผมทำ เวอร์คนะครับ ลองเช็คดูว่าเอาไปไว้ในไดเร็คตอรี่ไหน ผมคิดว่า asterisk หาไฟล์ไม่เจอ เลยไม่มีเสียง
ในตัวอย่างที่ผมโพสต์ ไฟล์เสียงต้องอยู่ที่ไดเร็คตอรี่ /var/lib/asterisk/sounds/th ครับ เวลาใส่ก็ใส่เฉพาะชื่อไฟล์ ไม่ต้องใส่นามสกุล
** หากมีปัญหากับอุปกรณ์ที่ซื้อมาเองหรือบริการที่ทำขึ้นมาเอง ให้โพสต์ถามในเว็บบอร์ดนี้นะครับ **
** งานเร่งด่วนติดต่อว่าจ้างที่เบอร์ 08-5161-9439 อีเมล์ iamaladin@gmail.com ไลน์ NuizVoip ครับ **
nuiz
Diamond Member
 
โพสต์: 7058
ลงทะเบียนเมื่อ: 24 มี.ค. 2010 09:33


ย้อนกลับไปยัง Elastix - Unified Communications Software

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

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