ผมมีบทความนึงซึ่งเทสแล้วเวอร์คดีครับ เป็นโซลูชั่นโทรเบอร์มือถือราคาประหยัด ก็โทรด้วยซิมการ์ดนั่นแหล่ะครับ โดยผมเอาตัว GSM FWT (Fixed Wireless Terminal) มาต่อกับพอร์ต FXO ของการ์ด TDM410P โดยที่บนการ์ด TDM410P ผมใส่ FXO modules ทั้ง 4 โมดูล รวมเป็น 4 พอร์ต
หน้าตา GSM FWT ที่ผมนำมาทดสอบ เป็นแบบนี้
*** โซลูชั่นแบบนี้เวอร์คกับการ์ด FXO ทุกรุ่น ทุกยี่ห้อนะครับ ไม่จำเป็นต้องเป็นการ์ด TDM410P ตามในตัวอย่างนี้ก็ได้ ***
พอร์ต 1 ต่อเบอร์ PSTN ใช้โทรออกเบอร์ 02
พอร์ต 2 ว่าง
พอร์ต 3 ต่อกับ GSM FWT ใส่ซิม AIS โปรแบบบุฟเฟต์โทรได้ทุกเครือข่าย ผมจะใช้สำหรับโทรออกเบอร์มือถือและเบอร์ต่างจังหวัด
พอร์ต 4 ว่าง
1. ติดตั้ง Asterisk + DAHDI
ตามบทความนี้เลยครับ เทคนิคการติดตั้งการ์ด TDM410P บน Asterisk เทสให้ชัวร์ๆว่าสามารถโทรเข้าและออกทางการ์ด TDM410P ได้ ไม่งั้นเดี๋ยวจะงงเวลาเจอปัญหาโทรไม่เข้า โทรไม่ออก
2. เชื่อมต่อ GSM FWT กับพอร์ต FXO
ใช้สายโทรศัพท์ธรรมดา เชื่อมจาก FXO พอร์ต 3 ไปยัง Phone 1 หรือ Phone 2 ดังรูป
3. คอนฟิก DAHDI แยก Group ไม่ให้ออกพอร์ตมั่ว
จริงๆเราไม่ต้องคอนฟิกแยก Group ของแต่ละพอร์ตก็ได้นะครับ เพราะเราสามารถระบุหมายเลขพอร์ตที่จะโทรออกได้เลย เช่นอยากให้โทรออกทางพอร์ตที่ 1 ก็คอนฟิก Dialplan แบบนี้
exten => _02X.,1,Dial(DAHDI/1/${EXTEN},60)
exten => _02X.,n,Hangup
สังเกตุตรง DAHDI/1 นะครับว่าไม่มีตัว G, g, r หรือ R
ทำนองเดียวกันอยากให้โทรเบอร์ DTAC ออกทางพอร์ต 3 ก็คอนฟิกแบบนี้
exten => _0851X.,1,Dial(DAHDI/3/${EXTEN},60)
exten => _0851X.,n,Hangup
แต่ถ้าเรามีหลายๆพอร์ตที่จะโทรออก ก็คอนฟิกแบบนี้ทีละบรรทัด บรรทัดละพอร์ต ก็ใช้งานได้เหมือนกัน แต่จะดูไม่โปรเท่าไหร่ เราต้องใช้ Group ครับ เราต้องคอนฟิกแยก Group ของพอร์ต 1 และ 3 ให้มันอยู่คนละ Group กันครับ ไม่งั้นมันจะมั่วเวลาโทรออก ผมจะให้พอร์ต 1 อยู่ Group 1 และพอร์ต 3 อยู่ Group 3 ส่วนพอร์ตอื่นๆที่เหลือก็ปล่อยไว้ตามเดิมครับ
ไฟล์ /etc/asterisk/dahdi-channels.conf
;;; line="1 WCTDM/0/0 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=1
context=from-pstn
channel => 1
callerid=
group=
context=default
;;; line="3 WCTDM/0/2 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=3
context=from-pstn
channel => 3
callerid=
group=
context=default
รีโหลด Dahdi รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi restart"
เช็ค Group
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show channels group 1"
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Chan Extension Context Language MOH Interpret Blocked State
1 from-pstn default In Service
รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dahdi show channels group 3"
ผลลัพธ์
- โค้ด: เลือกทั้งหมด
Chan Extension Context Language MOH Interpret Blocked State
3 from-pstn default In Service
เราก็ได้พอร์ตที่อยู่ใน Group 1 และ 3 ตามที่ต้องการแล้ว
4. คอนฟิก Dialplan โทรออก
โทรเบอร์ 02 ให้ออกทางพอร์ต 1 (Group 1)
โทรเบอร์ DTAC ให้ออกทางพอร์ต 3 (Group 3)
ไฟล์ /etc/asterisk/extensions.conf
- โค้ด: เลือกทั้งหมด
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
[from-internal]
exten => _02.,1,Dial(DAHDI/G1/${EXTEN},60)
exten => _02.,n,Hangup
exten => _0851X.,1,Dial(DAHDI/G3/${EXTEN},60)
exten => _0851X.,n,Hangup
รีโหลด Dialplan รันคำสั่งนี้
- โค้ด: เลือกทั้งหมด
asterisk -rx "dialplan reload"
เทสโทรจาก Softphone กดโทร 0851619439 บนหน้าจอ Asterisk Console (รันคำสั่ง asterisk -r) จะเห็นข้อความคล้ายๆแบบนี้
- โค้ด: เลือกทั้งหมด
-- Executing [0851619439@from-internal:1] Dial("SIP/88000-00000004", "DAHDI/G3/0851619439,60") in new stack
-- Called G3/0851619439
-- DAHDI/3-1 answered SIP/88000-00000004
-- Hungup 'DAHDI/3-1'
== Spawn extension (from-internal, 0851619439, 1) exited non-zero on 'SIP/88000-00000004'
โทรออกทาง G3 ครับ และถ้าลองโทรเบอร์ 029009000 บ้าง ก็จะเห็นข้อความคล้ายๆแบบนี้
- โค้ด: เลือกทั้งหมด
-- Executing [09009000@from-internal:1] Dial("SIP/88000-00000005", "DAHDI/G1/09009000,60") in new stack
-- Called G1/09009000
-- DAHDI/1-1 answered SIP/88000-00000005
-- Hungup 'DAHDI/1-1'
== Spawn extension (from-internal, 09009000, 1) exited non-zero on 'SIP/88000-00000005'
5. คอนฟิก Dialplan รับสายเข้า
ผมทำแบบง่ายๆนะครับ โทรเข้ามาไม่ว่าจะเข้ามาทางพอร์ต 1 (ต่อกับเบอร์โทรศัพท์) หรือพอร์ต 3 (ต่อกับ GSM FWT) ก็ให้มันมาดังที่เบอร์ SIP Extensions 88000
5.1 เช็คก่อนว่าพอร์ต 1 และ 3 อยู่ใน context ชื่ออะไร
ดูที่ไฟล์ /etc/asterisk/dahdi-channels.conf เฉพาะพอร์ต 1 และ 3
;;; line="1 WCTDM/0/0 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=1
context=from-pstn
channel => 1
callerid=
group=
context=default
;;; line="3 WCTDM/0/2 FXSKS (EC: OSLEC - INACTIVE)"
signalling=fxs_ks
callerid=asreceived
group=3
context=from-pstn
channel => 3
callerid=
group=
context=default
เป็น context from-pstn ทั้งคู่
5.2 สร้าง Dialplan เพิ่ม
โดยเพิ่ม [from-pstn] เข้าไป
- โค้ด: เลือกทั้งหมด
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=DAHDI/G2
[from-internal]
exten => _02.,1,Dial(DAHDI/G1/${EXTEN},60)
exten => _02.,n,Hangup
exten => _0851X.,1,Dial(DAHDI/G3/${EXTEN},60)
exten => _0851X.,n,Hangup
[from-pstn]
exten => s,1,NoOp(Incoming Call From ${CALLERID(num)})
exten => s,1,Dial(SIP/88000)
exten => s,n,Hangup
5.3 รีโหลด Dialplan แล้วเทสโทรเข้าเบอร์ซิมที่ใส่ใน GSM FWT
- โค้ด: เลือกทั้งหมด
asterisk -rx "diaplan reload"
ข้อความใน Asterisk Console เวลาโทรเข้า
- โค้ด: เลือกทั้งหมด
== Starting post polarity CID detection on channel 3
-- Starting simple switch on 'DAHDI/3-1'
-- Executing [s@from-pstn:1] NoOp("DAHDI/3-1", "Incoming Call From 0851619439") in new stack
-- Executing [s@from-pstn:2] Dial("DAHDI/3-1", "SIP/88000") in new stack
== Using SIP RTP CoS mark 5
-- Called 88000
-- SIP/88000-00000006 is ringing
-- SIP/88000-00000006 answered DAHDI/3-1
== Spawn extension (from-pstn, s, 2) exited non-zero on 'DAHDI/3-1'
-- Hungup 'DAHDI/3-1'
บน Softphone ที่ใช้ทดสอบ โชว์เบอร์โทรเข้า
5.4 เล็กๆน้อยๆกับการโชว์เบอร์ (CallerID)
เวลาโทรออกทาง GSM FWT ไปเบอร์มือถือ ก็จะโชว์เป็นเบอร์ซิมการ์ดที่เอามาใส่ แต่เวลาโทรเข้ามา อย่างเช่นในตัวอย่างที่ผมทำให้ดูผมส่งคอลไปยังเบอร์ Extension ซึ่งมันก็โชว์เบอร์โทรเข้าอยู่แล้ว แต่ก็ไม่ใช่ว่ามันจะโชว์เป็นเบอร์โทรเข้าได้ทุกกรณีนะครับ ขึ้นอยู่กับเงื่อนไขสองสามข้อต่อไปนี้
- GSM FWT รองรับ Caller ID หรือไม่
- GSM FWT รองรับ CallerID แบบใด ซึ่งมีอยู่ 2 แบบที่นิยมใช้กันคือ Bell และ DTMF
- คอนฟิกพารามิเตอร์เกี่ยวกับ CallerID ในไฟล์ /etc/asterisk/chan_dahdi.conf ถูกต้องหรือไม่
ถ้าคอนฟิกไม่ถูกต้อง นอกจากเบอร์จะไม่โชว์แล้วบางทีไม่มีสายเรียกเข้ามาอีกต่างหาก ได้ยินแต่สัญญาณสายว่าง
เครื่อง GSM FWT ที่ผมเอามาทดสอบ มันรองรับ CallerID แบบ DTMF ดังนั้นในไฟล์ /etc/asterisk/chan_dahdi.conf ผมเพิ่มบรรทัดต่อไปนี้
- โค้ด: เลือกทั้งหมด
cidsignalling=dtmf
cidstart=polarity
แต่ถ้า GSM FWT ที่ใช้อยู่รองรับ CallerID แบบ Bell ก็น่าจะเปลี่ยนเป็นแบบนี้ (เป็นค่าดีฟอลท์ครับ ไม่ต้องทำก็ได้)
- โค้ด: เลือกทั้งหมด
cidsignalling=bell
cidstart=ring
เซฟไฟล์แล้วรันคำสั่ง asterisk -rx "dahdi restart" เพื่อให้มีผล
บทความที่เกี่ยวข้อง
เทคนิคการติดตั้งการ์ด TDM410P บน Asterisk + DAHDI 2.5.0.2
เทคนิคการติดตั้งการ์ด TDM410P บน Asterisk + DAHDI 2.6.0