สมมติว่ามีการเชื่อมต่อ Elastix กับตู้ PBX ด้วยการ์ด FXO (TDM410P) อย่างในรูปด้านล่างนี้นะครับ
ต้องการให้ยูสเซอร์บน Elastix และ PBX โทรหากันได้ โดยให้ยูสเซอร์ใช้งานได้ง่ายที่สุด
ที่เครื่อง Elastix ทำดังนี้
1. ติดตั้งการ์ด Analog FXO TDM410P เชื่อมต่อกับเบอร์ Extensions (เบอร์สายใน) ของตู้สาขา เบอร์ 200 - 203
** หรืออาจจะใช้ VoIP Gateway แบบ FXO แทนก็ได้ แต่จะไม่อยู่ในบทความนี้ครับ **
2. มี ATA (SIP) แบบ FXS รีจิสเตอร์ด้วยเบอร์ Extensins สองเบอร์คือ 100 และ 101
3. เบอร์ Extensions บน Elastix มี 3 หลักตั้งแต่ 100 - 199
4. โทรระหว่างเบอร์ Extensions 1xx กดตรงๆได้เลย
5. โทรไปยังเบอร์ในตู้ PBX กด 77 ตามด้วยเบอร์ที่ตู้ เช่น 77400 หรือ 77401 แต่ต้องการให้เวลายูสเซอร์ใช้งาน เขาสามารถกดเบอร์ 400 หรือ 401 ได้เลย
ที่ฝั่ง PBX ทำดังนี้
1. เซ็ต Hunting เบอร์ 200 - 203 มีเบอร์ 200 เป็นเบอร์นำหมู่
2. แจ้งยูสเซอร์ว่าถ้าต้องการโทรหายูสเซอร์ฝั่ง Elastix ให้กด 200 รอฟังเสียง Dialtone แล้วค่อยกดเบอร์ 1xx แต่ถ้ากด 200 แล้วสายไม่ว่างแสดงว่าสายเต็ม ให้รอสักพักแล้่วกดใหม่
บน Elastix มีเมนูที่เกี่ยวข้องดังนี้
- Extensions
- Trunks
- Outbound Routes
- Inbound Routes
- Followme
- Announcement
- DISA
มาลงมือคอนฟิกกันเลยครับ
1. คอนฟิกการ์ด Analog FXO เชื่อมต่อกับตู้สาขา
คอนฟิกการ์ดที่ Elastix ใช้เชื่อมต่อกับตู้สาขา ตามแต่ละยี่ห้อและประเภทของการ์ดครับ หาอ่านได้จากบทความติดตั้งการ์ดบน Elastix ในเว็บนี้แหล่ะครับ
การ์ด 4 FXO (TDM400P)
การ์ด 16 FXO (BL1600)
การ์ด 1 FXO (X100P)
ต่อสายโทรศัพท์จากตู้ PBX เข้าพอร์ต FXO ครบทั้ง 4 พอร์ต เข้าเว็บ Elastix -> System -> Hardware Detector จะเห็นสีเขียวๆแบบนี้
2. สร้างเบอร์ Extensions บน Elastix
สร้างเบอร์ Extension ทั้งที่เป็นของ ATA (SIP) และที่มีบนตู้สาขา (เบอร์ควรจะให้เหมือนกับเบอร์บนตู้สาขานะครับ กันงงทีหลัง) สรุปว่ามีเบอร์ Extensions 4 เบอร์ต่อไปนี้
100, 101 แบบ SIP สองเบอร์นี้สำหรับให้ ATA รีจิสเตอร์
400, 401 สองเบอร์นี้สร้างไว้เฉยๆ ไม่ต้องให้อะไรรีจิสเตอร์เข้ามา จะสร้างแบบ SIP หรือ IAX2 ก็ได้ สังเกตุว่าเบอร์เดียวกับบนตู้สาขาเลยครับ กันงง
3. คอนฟิก Trunks
เป็น DAHDI Trunks ครับเพื่อให้ ATA (เบอร์ 100, 101) โทรผ่าน Asterisk ไปยังตู้ PBX ได้ และในทางกลับกันให้เบอร์ 400, 401 โทรมายังเบอร์บน Elastix ได้ ในการคอนฟิกผมไม่ได้แยกว่าพอร์ตไหนใช้โทรออก พอร์ตไหนใช้โทรเข้า คือสามารถโทรเข้าโทรออกได้พร้อมๆกัน 4 สาย พอร์ต FXO บนการ์ดทุกพอร์ตผมให้อยู่ใน Group 0 ซึ่งเป็นดีฟอลท์
PBX -> Trunks -> Add ZAP Trunk (DAHDI compatibility mode)
สร้างอันเดียวพอครับ ใช้ได้ทั้งโทรเข้าและโทรออก
4. คอนฟิก Outbound Routes
ตั้งโค๊ดให้ Elastix รู้ว่าเราต้องการโทรออกผ่านการ์ด FXO เช่น 77
PBX -> Outbound Routes
5. คอนฟิก Inbound Routes
ให้ Elastix รับสายที่เรียกมาจากตู้ PBX
ไม่ต้องคอนฟิก ZAP Channel DIDs นะครับเพราะเคสนี้เราไม่มีเบอร์พิเศษ ไม่มีพอร์ตพิเศษที่จองเอาไว้ทำอย่างใดอย่างหนึ่ง ทุกพอร์ตใช้เพื่อจุดประสงค์เดียวกันหมดคือ รับสายจากตู้ PBX แล้วส่งต่อไปเบอร์ SIP Extensions 100, 101
สร้าง DISA เอาไว้ให้จ่าย Dial tone ให้ตู้ PBX เพื่อให้ยูสเซอร์ฝั่ง PBX กดเบอร์ Extension 100, 101
*** พอดีว่าตอนแรกผมคอนฟิก DISA อย่างเดียวแล้วเรียกใช้งานจาก Inbound Routes ปรากฏว่าเวลาโทรเข้าจาก PBX มาที่ Elastix มันก็เรียก DISA ให้นะครับ แต่มันไม่ยอมรับสาย ไม่ได้ยิน Dialtone ก็เลยกดเบอร์ต่อไม่ได้ ผมก็เลยต้องคอนฟิกอะไรสักอย่างหนึ่งก่อนแล้วค่อยเรียก DISA ผมเลือกคอนฟิก Announcement ***
PBX -> DISA
Announcement
PBX -> Inbound Routes
ช่อง DID Number เว้นว่างไว้ ส่วน Set Destination เลือก Announcement -> OLD-PBX
6. ทดสอบโทรจากเบอร์บน Elastix ไปยังเบอร์บนตู้ PBX
ผมจะเทสโทรจากเบอร์ Extensions 100 บน Elastix ไปยังเบอร์ Extension 401 บนตู้ PBX โดยกดเต็มรูปแบบคือ 77 ตัดสายนอก ตามด้วย 401 มาดูข้อความบน Asterisk Console กัน
- โค้ด: เลือกทั้งหมด
[Mar 22 15:41:12] -- Executing [77401@from-internal:1] Macro("SIP/100-00000000", "user-callerid,SKIPTTL,") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:1] ExecIf("SIP/100-00000000", "0]?Set(CALLERID(number)=100)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:2] ExecIf("SIP/100-00000000", "0]?Set(CALLERID(number)=100)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:3] ExecIf("SIP/100-00000000", "0?Set(CALLERID(number)=)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:4] Set("SIP/100-00000000", "AMPUSER=100") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:5] GotoIf("SIP/100-00000000", "0?report") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:6] ExecIf("SIP/100-00000000", "1?Set(REALCALLERIDNUM=100)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:7] Set("SIP/100-00000000", "AMPUSER=100") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:8] Set("SIP/100-00000000", "AMPUSERCIDNAME=bkk") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:9] GotoIf("SIP/100-00000000", "0?report") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:10] Set("SIP/100-00000000", "AMPUSERCID=100") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:11] Set("SIP/100-00000000", "CALLERID(all)="bkk" <100>") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:12] ExecIf("SIP/100-00000000", "0?Set(CHANNEL(language)=)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:13] GotoIf("SIP/100-00000000", "1?continue") in new stack
[Mar 22 15:41:12] -- Goto (macro-user-callerid,s,22)
[Mar 22 15:41:12] -- Executing [s@macro-user-callerid:22] NoOp("SIP/100-00000000", "Using CallerID "bkk" <100>") in new stack
[Mar 22 15:41:12] -- Executing [77401@from-internal:2] Set("SIP/100-00000000", "_NODEST=") in new stack
[Mar 22 15:41:12] -- Executing [77401@from-internal:3] Macro("SIP/100-00000000", "record-enable,100,OUT,") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-record-enable:1] GotoIf("SIP/100-00000000", "1?check") in new stack
[Mar 22 15:41:12] -- Goto (macro-record-enable,s,4)
[Mar 22 15:41:12] -- Executing [s@macro-record-enable:4] ExecIf("SIP/100-00000000", "0?MacroExit()") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-record-enable:5] GotoIf("SIP/100-00000000", "0?Group:OUT") in new stack
[Mar 22 15:41:12] -- Goto (macro-record-enable,s,15)
[Mar 22 15:41:12] -- Executing [s@macro-record-enable:15] GotoIf("SIP/100-00000000", "0?IN") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-record-enable:16] ExecIf("SIP/100-00000000", "1?MacroExit()") in new stack
[Mar 22 15:41:12] -- Executing [77401@from-internal:4] Macro("SIP/100-00000000", "dialout-trunk,1,401,,") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:1] Set("SIP/100-00000000", "DIAL_TRUNK=1") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:2] GosubIf("SIP/100-00000000", "0?sub-pincheck,s,1") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:3] GotoIf("SIP/100-00000000", "0?disabletrunk,1") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:4] Set("SIP/100-00000000", "DIAL_NUMBER=401") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:5] Set("SIP/100-00000000", "DIAL_TRUNK_OPTIONS=tr") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:6] Set("SIP/100-00000000", "OUTBOUND_GROUP=OUT_1") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:7] GotoIf("SIP/100-00000000", "0?nomax") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:8] GotoIf("SIP/100-00000000", "0?chanfull") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:9] GotoIf("SIP/100-00000000", "0?skipoutcid") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:10] Set("SIP/100-00000000", "DIAL_TRUNK_OPTIONS=") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:11] Macro("SIP/100-00000000", "outbound-callerid,1") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:1] ExecIf("SIP/100-00000000", "0?Set(CALLERPRES()=)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:2] ExecIf("SIP/100-00000000", "0?Set(REALCALLERIDNUM=100)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:3] GotoIf("SIP/100-00000000", "1?normcid") in new stack
[Mar 22 15:41:12] -- Goto (macro-outbound-callerid,s,6)
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:6] Set("SIP/100-00000000", "USEROUTCID="bkk" <100>") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:7] Set("SIP/100-00000000", "EMERGENCYCID=") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:8] Set("SIP/100-00000000", "TRUNKOUTCID=") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:9] GotoIf("SIP/100-00000000", "1?trunkcid") in new stack
[Mar 22 15:41:12] -- Goto (macro-outbound-callerid,s,12)
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:12] ExecIf("SIP/100-00000000", "0?Set(CALLERID(all)=)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:13] ExecIf("SIP/100-00000000", "1?Set(CALLERID(all)=bkk <100>)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:14] ExecIf("SIP/100-00000000", "0?Set(CALLERID(all)=)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-outbound-callerid:15] ExecIf("SIP/100-00000000", "0?Set(CALLERPRES()=prohib_passed_screen)") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:12] ExecIf("SIP/100-00000000", "1?AGI(fixlocalprefix)") in new stack
[Mar 22 15:41:12] -- Launched AGI Script /var/lib/asterisk/agi-bin/fixlocalprefix
[Mar 22 15:41:12] == fixlocalprefix: Dialpattern X. matched. 401 -> 401
[Mar 22 15:41:12] -- <SIP/100-00000000>AGI Script fixlocalprefix completed, returning 0
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:13] Set("SIP/100-00000000", "OUTNUM=401") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:14] Set("SIP/100-00000000", "custom=DAHDI/r0") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:15] ExecIf("SIP/100-00000000", "0?Set(DIAL_TRUNK_OPTIONS=M(setmusic^))") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:16] Macro("SIP/100-00000000", "dialout-trunk-predial-hook,") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk-predial-hook:1] MacroExit("SIP/100-00000000", "") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:17] GotoIf("SIP/100-00000000", "0?bypass,1") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:18] GotoIf("SIP/100-00000000", "0?customtrunk") in new stack
[Mar 22 15:41:12] -- Executing [s@macro-dialout-trunk:19] Dial("SIP/100-00000000", "DAHDI/r0/401,300,") in new stack
[Mar 22 15:41:12] -- Called r0/401
[Mar 22 15:41:16] -- DAHDI/1-1 answered SIP/100-00000000
[Mar 22 15:44:25] -- Executing [h@macro-dialout-trunk:1] Macro("SIP/100-00000000", "hangupcall,") in new stack
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:1] GotoIf("SIP/100-00000000", "1?noautomon") in new stack
[Mar 22 15:44:25] -- Goto (macro-hangupcall,s,3)
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:3] NoOp("SIP/100-00000000", "TOUCH_MONITOR_OUTPUT=") in new stack
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:4] GotoIf("SIP/100-00000000", "1?noautomon2") in new stack
[Mar 22 15:44:25] -- Goto (macro-hangupcall,s,6)
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:6] NoOp("SIP/100-00000000", "MONITOR_FILENAME=") in new stack
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:7] GotoIf("SIP/100-00000000", "1?skiprg") in new stack
[Mar 22 15:44:25] -- Goto (macro-hangupcall,s,10)
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:10] GotoIf("SIP/100-00000000", "1?skipblkvm") in new stack
[Mar 22 15:44:25] -- Goto (macro-hangupcall,s,13)
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:13] GotoIf("SIP/100-00000000", "1?theend") in new stack
[Mar 22 15:44:25] -- Goto (macro-hangupcall,s,15)
[Mar 22 15:44:25] -- Executing [s@macro-hangupcall:15] Hangup("SIP/100-00000000", "") in new stack
[Mar 22 15:44:25] == Spawn extension (macro-hangupcall, s, 15) exited non-zero on 'SIP/100-00000000' in macro 'hangupcall'
[Mar 22 15:44:25] -- Hungup 'DAHDI/1-1'
[Mar 22 15:44:25] == Spawn extension (macro-dialout-trunk, s, 19) exited non-zero on 'SIP/100-00000000' in macro 'dialout-trunk'
[Mar 22 15:44:25] == Spawn extension (from-internal, 77401, 4) exited non-zero on 'SIP/100-00000000'
โทรจากเบอร์ 100 ไป 401 บนตู้ PBX ได้ครับถึงจะกดหลายหลักอยู่สักหน่อย หัวข้อต่อไปผมมีวิธีทำให้สั้นลงครับ โดยกดแค่เบอร์ 401 เท่านั้น
7. คอนฟิก Follow Me
สร้างเบอร์ Extensions 400 และ 401 บน Elastix จะเลือกเป็นแบบ SIP หรือ IAX2 ก็ได้ ไม่ต้องคอนฟิกอะไรมากเพราะจุดประสงค์คือต้องการใช้ฟีเจอร์ Followme ของสองเบอร์นี้
เบอร์ Extensions 400 ให้คอนฟิก Followme ใส่ 77400# แทน 400
เบอร์ Extensions 401 ให้คอนฟิก Followme ใส่ 77401# แทน 401
เมื่อ ATA กดโทร 400 หรือ 401 มันจะออกทางการ์ด FXO ไปยังตู้สาขา
ตัวอย่างต่อไปนี้ผมจะทำกับเบอร์ Extensions 401 นะครับ ส่วนเบอร์ 400 นั้นก็ทำเหมือนกัน
PBX -> Extensions -> 401
คลิ๊ก Add Follow Me Settings
Ring Time (max 60 sec) ระยะเวลารอสาย ถ้าใช้ค่า 20 ตามดีฟอลท์มันจะสั้นไปครับ บางทียูสเซอร์ไม่ทันจะรับสายมันก็ตัดไปแล้ว
Follow-Me List ใส่ 77401# โดยที่ 77 คือโค๊ดตัดออกพอร์ต FXO ส่วนเครื่องหมาย # เป็นการบอกให้ Elastix รู้ว่าให้ส่งออกทาง Trunks
Play Music On Hold? เลือก Music On Hold ระหว่างรอสาย
Destination if no answer ถ้ายูสเซอร์ไม่รับสายภายในระยะเวลา Ring Time ให้ทำอะไรต่อ ผมเลือกตัดสาย Terminate Call -> Hangup
กด Submit -> Apply Configuration Changes Here
ลองเทสใหม่ครับ โทรจากเบอร์ 100 ไปเบอร์ 401 บนตู้สาขา คราวนี้กด 401 เฉยๆ ก็เวอร์คครับ
** เมื่อเราใช้เทคนิค Follow Me นี้ เบอร์ 4xx สามารถอยู่บนตู้ PBX ก็ได้ หรืออยู่บน Elastix ก็ได้ หรือมีอยู่ทั้ง 2 ระบบก็ได้ เบอร์ซ้ำกันก็ได้ด้วยนะครับ **
- ถ้าเบอร์อยู่บน Elastix ในช่อง Follow-Me List ใส่ 401
- ถ้าเบอร์อยู่บน PBX ใส่แบบนี้ 77401#
- ถ้าเบอร์อยู่บน Elastix ด้วยและ PBX ด้วย ใส่แบบนี้
401
77401#
เวลาโทรไปใครรับสายก่อนคนนั้นก็ได้คุย
คงพอเข้าใจนะครับ
8. โทรจากเบอร์ Extensions บนตู้สาขามาที่ Elastix
คราวนี้ก็เป็นทีของยูสเซอร์บนตู้ PBX บ้างหล่ะครับที่จะต้องโทรหาเบอร์บน Elastix ผมทดสอบโทรจากเบอร์ Extensions 401 บน PBX ไปที่เบอร์ 100 บน PBX เช่นเดียวกัน รอจนได้ยิน Dialtone แล้วผมก็กดเบอร์ 100 บน Elastix ได้ข้อความใน Asterisk Console ตามด้านล่างครับ สังเกตุว่ามีเบอร์ 401 อยู่ใน Messages ด้วยเป็นเพราะว่าตู้ PBX ที่ผมใช้มันรองรับ CallerID ซึ่งถ้าหัวเครื่องโทรศัพท์ที่ต่อกับเบอร์ 100 รองรับ CallerID ด้วย มันก็จะโชว์ว่าเบอร์ 401 โทรเข้ามา
*** บางท่านอาจจะสงสัยว่า เบอร์ 401 จะกด 100 ตรงๆเลยได้มั๊ย ผมขอตอบว่าปกติจะไม่ได้ครับเพราะเมื่อกด 100 ตู้ PBX มันจะเช็คเจอว่าเบอร์นี้ไม่ได้อยู่บนตัวมัน เราก็จะได้ยินตู๊ดๆๆๆๆ หรือเสียงบอกว่าไม่มีเบอร์นี้ แล้วแต่ตู้ PBX หน่ะครับ แล้วอาจจะถามต่อว่ามีทางมั๊ย มีครับ แต่ต้องคอนฟิกตู้ PBX เพิ่มนิดหน่อย ***
- โค้ด: เลือกทั้งหมด
[Mar 22 16:39:58] -- Starting simple switch on 'DAHDI/1-1'
[Mar 22 16:39:59] -- Executing [s@from-zaptel:1] NoOp("DAHDI/1-1", "Entering from-zaptel with DID == ") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:2] Ringing("DAHDI/1-1", "") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:3] Set("DAHDI/1-1", "DID=s") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:4] NoOp("DAHDI/1-1", "DID is now s") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:5] GotoIf("DAHDI/1-1", "1?zapok:notzap") in new stack
[Mar 22 16:39:59] -- Goto (from-zaptel,s,8)
[Mar 22 16:39:59] -- Executing [s@from-zaptel:8] NoOp("DAHDI/1-1", "Is a Zaptel Channel") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:9] Set("DAHDI/1-1", "CHAN=1-1") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:10] Set("DAHDI/1-1", "CHAN=1") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:11] Macro("DAHDI/1-1", "from-zaptel-1,s,1") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:12] NoOp("DAHDI/1-1", "Returned from Macro from-zaptel-1") in new stack
[Mar 22 16:39:59] -- Executing [s@from-zaptel:13] Goto("DAHDI/1-1", "from-pstn,s,1") in new stack
[Mar 22 16:39:59] -- Goto (from-pstn,s,1)
[Mar 22 16:39:59] -- Executing [s@from-pstn:1] Set("DAHDI/1-1", "__FROM_DID=s") in new stack
[Mar 22 16:39:59] -- Executing [s@from-pstn:2] Gosub("DAHDI/1-1", "app-blacklist-check,s,1") in new stack
[Mar 22 16:39:59] -- Executing [s@app-blacklist-check:1] GotoIf("DAHDI/1-1", "0?blacklisted") in new stack
[Mar 22 16:39:59] -- Executing [s@app-blacklist-check:2] Set("DAHDI/1-1", "CALLED_BLACKLIST=1") in new stack
[Mar 22 16:39:59] -- Executing [s@app-blacklist-check:3] Return("DAHDI/1-1", "") in new stack
[Mar 22 16:39:59] -- Executing [s@from-pstn:3] ExecIf("DAHDI/1-1", "0 ?Set(CALLERID(name)=401)") in new stack
[Mar 22 16:39:59] -- Executing [s@from-pstn:4] Set("DAHDI/1-1", "__CALLINGPRES_SV=allowed_not_screened") in new stack
[Mar 22 16:39:59] -- Executing [s@from-pstn:5] Set("DAHDI/1-1", "CALLERPRES()=allowed_not_screened") in new stack
[Mar 22 16:39:59] -- Executing [s@from-pstn:6] Goto("DAHDI/1-1", "app-announcement-38,s,1") in new stack
[Mar 22 16:39:59] -- Goto (app-announcement-38,s,1)
[Mar 22 16:39:59] -- Executing [s@app-announcement-38:1] GotoIf("DAHDI/1-1", "0?begin") in new stack
[Mar 22 16:39:59] -- Executing [s@app-announcement-38:2] Answer("DAHDI/1-1", "") in new stack
[Mar 22 16:39:59] -- Executing [s@app-announcement-38:3] Wait("DAHDI/1-1", "1") in new stack
[Mar 22 16:40:01] -- Executing [s@app-announcement-38:4] NoOp("DAHDI/1-1", "Playing announcement OLD-PBX") in new stack
[Mar 22 16:40:01] -- Executing [s@app-announcement-38:5] Playback("DAHDI/1-1", ",noanswer") in new stack
[Mar 22 16:40:01] -- Executing [s@app-announcement-38:6] Goto("DAHDI/1-1", "disa,2,1") in new stack
[Mar 22 16:40:01] -- Goto (disa,2,1)
[Mar 22 16:40:01] -- Executing [2@disa:1] Set("DAHDI/1-1", "_DISA="disa,2,newcall"") in new stack
[Mar 22 16:40:01] -- Executing [2@disa:2] Set("DAHDI/1-1", "_DISACONTEXT=from-internal") in new stack
[Mar 22 16:40:01] -- Executing [2@disa:3] Set("DAHDI/1-1", "_KEEPCID=TRUE") in new stack
[Mar 22 16:40:01] -- Executing [2@disa:4] Set("DAHDI/1-1", "TIMEOUT(digit)=5") in new stack
[Mar 22 16:40:01] -- Digit timeout set to 5.000
[Mar 22 16:40:01] -- Executing [2@disa:5] Set("DAHDI/1-1", "TIMEOUT(response)=10") in new stack
[Mar 22 16:40:01] -- Response timeout set to 10.000
[Mar 22 16:40:01] -- Executing [2@disa:6] DISA("DAHDI/1-1", "no-password,disa-dial") in new stack
[Mar 22 16:40:01] -- Remote UNIX connection
[Mar 22 16:40:01] -- Remote UNIX connection disconnected
[Mar 22 16:40:07] -- Executing [100@disa-dial:1] NoOp("DAHDI/1-1", "called 100 in from-internal by disa,2,newcall") in new stack
[Mar 22 16:40:07] -- Executing [100@disa-dial:2] Dial("DAHDI/1-1", "Local/100@from-internal,300,") in new stack
[Mar 22 16:40:07] -- Called 100@from-internal
[Mar 22 16:40:07] -- Executing [100@from-internal:1] Set("Local/100@from-internal-a731;2", "__RINGTIMER=30") in new stack
[Mar 22 16:40:07] -- Executing [100@from-internal:2] Macro("Local/100@from-internal-a731;2", "exten-vm,novm,100") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:1] Macro("Local/100@from-internal-a731;2", "user-callerid,") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:1] ExecIf("Local/100@from-internal-a731;2", "0]?Set(CALLERID(number)=0401)") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:2] ExecIf("Local/100@from-internal-a731;2", "0]?Set(CALLERID(number)=0401)") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:3] ExecIf("Local/100@from-internal-a731;2", "0?Set(CALLERID(number)=)") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:4] Set("Local/100@from-internal-a731;2", "AMPUSER=401") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:5] GotoIf("Local/100@from-internal-a731;2", "1?report") in new stack
[Mar 22 16:40:07] -- Goto (macro-user-callerid,s,13)
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:13] GotoIf("Local/100@from-internal-a731;2", "0?continue") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:14] Set("Local/100@from-internal-a731;2", "__TTL=64") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:15] GotoIf("Local/100@from-internal-a731;2", "1?continue") in new stack
[Mar 22 16:40:07] -- Goto (macro-user-callerid,s,22)
[Mar 22 16:40:07] -- Executing [s@macro-user-callerid:22] NoOp("Local/100@from-internal-a731;2", "Using CallerID "System. " <401>") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:2] Set("Local/100@from-internal-a731;2", "RingGroupMethod=none") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:3] Set("Local/100@from-internal-a731;2", "VMBOX=novm") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:4] Set("Local/100@from-internal-a731;2", "EXTTOCALL=100") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:5] Set("Local/100@from-internal-a731;2", "CFUEXT=") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:6] Set("Local/100@from-internal-a731;2", "CFBEXT=") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:7] Set("Local/100@from-internal-a731;2", "RT=""") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:8] Macro("Local/100@from-internal-a731;2", "record-enable,100,IN") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-record-enable:1] GotoIf("Local/100@from-internal-a731;2", "1?check") in new stack
[Mar 22 16:40:07] -- Goto (macro-record-enable,s,4)
[Mar 22 16:40:07] -- Executing [s@macro-record-enable:4] ExecIf("Local/100@from-internal-a731;2", "0?MacroExit()") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-record-enable:5] GotoIf("Local/100@from-internal-a731;2", "0?Group:OUT") in new stack
[Mar 22 16:40:07] -- Goto (macro-record-enable,s,15)
[Mar 22 16:40:07] -- Executing [s@macro-record-enable:15] GotoIf("Local/100@from-internal-a731;2", "1?IN") in new stack
[Mar 22 16:40:07] -- Goto (macro-record-enable,s,20)
[Mar 22 16:40:07] -- Executing [s@macro-record-enable:20] ExecIf("Local/100@from-internal-a731;2", "1?MacroExit()") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-exten-vm:9] Macro("Local/100@from-internal-a731;2", "dial,30,tr,100") in new stack
[Mar 22 16:40:07] -- Executing [s@macro-dial:1] GotoIf("Local/100@from-internal-a731;2", "1?dial") in new stack
[Mar 22 16:40:07] -- Goto (macro-dial,s,3)
[Mar 22 16:40:07] -- Executing [s@macro-dial:3] AGI("Local/100@from-internal-a731;2", "dialparties.agi") in new stack
[Mar 22 16:40:07] -- Launched AGI Script /var/lib/asterisk/agi-bin/dialparties.agi
[Mar 22 16:40:07] dialparties.agi: Starting New Dialparties.agi
[Mar 22 16:40:07] dialparties.agi: Caller ID name is 'System.' number is '401'
[Mar 22 16:40:07] dialparties.agi: Methodology of ring is 'none'
[Mar 22 16:40:07] -- dialparties.agi: Added extension 100 to extension map
[Mar 22 16:40:07] -- dialparties.agi: Extension 100 cf is disabled
[Mar 22 16:40:07] -- dialparties.agi: Extension 100 do not disturb is disabled
[Mar 22 16:40:07] dialparties.agi: EXTENSION_STATE: 0 (NOT_INUSE)
[Mar 22 16:40:07] dialparties.agi: Extension 100 has ExtensionState: 0
[Mar 22 16:40:07] -- dialparties.agi: Checking CW and CFB status for extension 100
[Mar 22 16:40:07] -- dialparties.agi: dbset CALLTRACE/100 to 401
[Mar 22 16:40:07] -- dialparties.agi: Filtered ARG3: 100
[Mar 22 16:40:07] -- <Local/100@from-internal-a731;2>AGI Script dialparties.agi completed, returning 0
[Mar 22 16:40:07] -- Executing [s@macro-dial:7] Dial("Local/100@from-internal-a731;2", "SIP/100,30,tr") in new stack
[Mar 22 16:40:07] == Using SIP RTP TOS bits 184
[Mar 22 16:40:07] == Using SIP RTP CoS mark 5
[Mar 22 16:40:07] -- Called 100
[Mar 22 16:40:07] -- Local/100@from-internal-a731;1 is ringing
[Mar 22 16:40:07] -- SIP/100-00000003 is ringing
[Mar 22 16:40:07] -- Local/100@from-internal-a731;1 is ringing
[Mar 22 16:40:11] -- SIP/100-00000003 answered Local/100@from-internal-a731;2
[Mar 22 16:40:11] -- Local/100@from-internal-a731;1 stopped sounds
[Mar 22 16:40:11] -- Local/100@from-internal-a731;1 answered DAHDI/1-1
[Mar 22 16:40:11] -- Executing [h@macro-dial:1] Macro("Local/100@from-internal-a731;2", "hangupcall") in new stack
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:1] GotoIf("Local/100@from-internal-a731;2", "1?noautomon") in new stack
[Mar 22 16:40:11] -- Goto (macro-hangupcall,s,3)
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:3] NoOp("Local/100@from-internal-a731;2", "TOUCH_MONITOR_OUTPUT=") in new stack
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:4] GotoIf("Local/100@from-internal-a731;2", "1?noautomon2") in new stack
[Mar 22 16:40:11] -- Goto (macro-hangupcall,s,6)
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:6] NoOp("Local/100@from-internal-a731;2", "MONITOR_FILENAME=") in new stack
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:7] GotoIf("Local/100@from-internal-a731;2", "1?skiprg") in new stack
[Mar 22 16:40:11] -- Goto (macro-hangupcall,s,10)
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:10] GotoIf("Local/100@from-internal-a731;2", "1?skipblkvm") in new stack
[Mar 22 16:40:11] -- Goto (macro-hangupcall,s,13)
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:13] GotoIf("Local/100@from-internal-a731;2", "1?theend") in new stack
[Mar 22 16:40:11] -- Goto (macro-hangupcall,s,15)
[Mar 22 16:40:11] -- Executing [s@macro-hangupcall:15] Hangup("Local/100@from-internal-a731;2", "") in new stack
[Mar 22 16:40:11] == Spawn extension (macro-hangupcall, s, 15) exited non-zero on 'Local/100@from-internal-a731;2' in macro 'hangupcall'
[Mar 22 16:40:11] == Spawn extension (macro-dial, s, 7) exited non-zero on 'Local/100@from-internal-a731;2' in macro 'dial'
[Mar 22 16:40:11] == Spawn extension (macro-exten-vm, s, 9) exited non-zero on 'Local/100@from-internal-a731;2' in macro 'exten-vm'
[Mar 22 16:40:11] == Spawn extension (from-internal, 100, 2) exited non-zero on 'Local/100@from-internal-a731;2'
[Mar 22 16:41:00] == Spawn extension (disa-dial, 100, 2) exited non-zero on 'DAHDI/1-1'
[Mar 22 16:41:00] -- Hungup 'DAHDI/1-1'
ก็เป็นอันว่าหลังจากเปิดกระทู้ทิ้งไว้ข้ามอาทิตย์ 55+ ตอนนี้ก็คอนฟิกเสร็จและใช้งานได้แล้วนะครับ