1. ลงทะเบียนรับแอ๊คเค๊าท์จาก True NetTalk
ไปที่เว็บไซต์ http://www.truenettalk.com ครับ แล้วลงทะเบียนเพื่อรับ Account ฟรีมาลองใช้งานดูก่อน ซึ่ง Account ทดลองนี้โทรได้ประเทศไทยแล้วก็ประเทศหลักๆอีกราวๆ 10 ประเทศครับ โทรได้นาน 30 นาที ลงทะเบียนแล้วรอรับ SMS
สมมติว่าได้ Username = 98000003669 และ Password = 70780000
True NetTalk รองรับ G.723.1, G.729 ด้วยนะครับ ถ้ายังไม่ได้ลง G.723.1, G.729 ให้ Asterisk ผมมีบทความเกี่ยวกับเรื่องนี้โดยเฉพาะนะครับ Asterisk G.723, G.729 Codec
2. คอนฟิกพารามิเเตอร์เกี่ยวกับ SIP
ผมแยกไฟล์ sip.conf ออกเป็น 4 ไฟล์ย่อยๆนะครับ (จริงๆไม่ต้องแยกก็ได้ เขียนรวมไว้ในไฟล์ sip.conf ไฟล์เดียวเลย แต่มันจะดูยุ่งๆ) คือ sip.conf, sip_registers.conf, sip_trunks.conf และ sip_clients.conf
2.1 ไฟล์ sip.conf
- โค้ด: เลือกทั้งหมด
[general]
context=default
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
tlsenable=no
tlsbindaddr=0.0.0.0
srvlookup=yes
maxexpiry=300
minexpiry=60
defaultexpiry=120
disallow=all
allow=g729
allow=g723
allow=alaw
allow=ulaw
canreinvite=no
nat=yes
realm=voip4share.com
callerid=VoIP4Share
useragent=VoIP4Share
sdpsession=VoIP4Share
usereqphone=yes
dtmfmode=rfc2833
videosupport=no
t38pt_udptl=yes
t38pt_usertpsource=yes
registertimeout=60
registerattempts=0
canreinvite=no
pedantic=yes
rtptimeout=30
rtpholdtime=60
#include sip_registers.conf
#include sip_trunks.conf
#include sip_clients.conf
สำคัญมากๆครับ บรรทัด #include sip_registers.conf ต้องอยู่ก่อนบรรทัด #include sip_trunks.conf และ #include sip_clients.conf นะครับ เพราะว่าในไฟล์ sip.conf เราต้องใส่บรรทัด register => ก่อนที่จะเป็น Clients หรือว่า Trunks
2.2 ไฟล์ sip_registers.conf
;รีจิสเตอร์กับ True NetTalk ด้วย Username/Password ที่ได้รับจาก SMS
- โค้ด: เลือกทั้งหมด
register => 98000003669:70780000:98000003669@61.90.255.132:5060/98000003669
2.3 ไฟล์ sip_trunks.conf
;สร้าง Trunk ของ True NetTalk
- โค้ด: เลือกทั้งหมด
[true_nettalk]
host=61.90.255.132
fromdomain=61.90.255.132
outboundproxy=61.90.255.132
insecure=port,invite
realm=huawei
port=5060
username=98000003669
secret=70780000
type=peer
disallow=all
allow=g729
allow=g723
dtmfmode=rfc2833
fromuser=98000003669
context=from-trunk-true-nettalk
call-limit=1
qualify=yes
2.4 ไฟล์ sip_clients.conf
;สร้างเบอร์ Extension 2 เบอร์คือ 100 และ 101
- โค้ด: เลือกทั้งหมด
[100]
type=friend
secret=pass100
qualify=yes
port=5060
nat=yes
mailbox=100@voip4share
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=g729
dial=SIP/100
context=from-internal
canreinvite=no
callgroup=0
pickgroup=0
callerid=Nui <100>
call-limit=1
[101]
type=friend
secret=pass101
qualify=yes
port=5060
nat=yes
mailbox=101@voip4share
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=g729
dial=SIP/100
context=from-internal
canreinvite=no
callgroup=0
pickgroup=0
callerid=Kik <101>
call-limit=1
4. คอนฟิก Dialplan
ผมแยก Dialplan ออกเป็น 3 ไฟล์นะครับ เพื่อให้แยก Dialplan ออกเป็นส่วนๆ จะได้ดูง่ายๆ ไฟล์แรกชื่อ extensions.conf ดั้งเดิม อีกไฟล์คือ extensions_true_nettalk.conf สำหรับสร้าง Dilplan โทรออกไปยัง True NetTalk และรับสายเข้าด้วย และไฟล์สุดท้ายคือ extensions_internal.conf สำหรับสร้าง Dialplan โทรภายในเบอร์ Extension ครับ
4.1 ไฟล์ extensions.conf
- โค้ด: เลือกทั้งหมด
[general]
#include extensions_true_nettalk.conf
#include extensions_internal.conf
[globals]
4.2 ไฟล์ extensions_internal.conf
- โค้ด: เลือกทั้งหมด
[from-internal]
; ถ้ากดเบอร์อื่นที่ไม่ใช่ 1xx เช่น 5 นำหน้า ให้ไปดูที่ Context ชื่อ from-trunk-true-nettalk
- โค้ด: เลือกทั้งหมด
include => from-trunk-true-nettalk
exten => _1XX,1,Dial(SIP/${EXTEN},30,tT)
exten => _1XX,n,Hangup
4.3 ไฟล์ extensions_true_nettalk.conf
- โค้ด: เลือกทั้งหมด
[from-trunk-true-nettalk]
; รับสายจาก True NetTalk แล้วโอนไปเบอร์ Extension 100 บรรทัด Prioirty 1
- โค้ด: เลือกทั้งหมด
exten => _8X.,1,Goto(from-internal,100,1)
exten => _8X.,n,Hangup
exten => _9X.,1,Goto(from-internal,100,1)
exten => _9X.,n,Hangup
; โทรเบอร์ในประเทศไทย กด 0 นำหน้าได้เลย
; ยูสเซอร์กด 5 ตามด้วยเบอร์ปลายทางในประเทศไทย Asterisk จะตัด 5 ออกแล้วส่งตัวเลขที่เหลือไป True NetTalk
- โค้ด: เลือกทั้งหมด
exten => _50X.,1,Dial(SIP/${EXTEN:1}@true_nettalk,30,tT)
exten => _50X.,n,Hangup
; โทรไปเบอร์ True NetTalk อื่น เบอร์ที่ขึ้นต้นด้วย 8 เป็น Prepaid ส่วนที่ขึ้นต้นด้วย 9 เป็น Postpaid
; ยูสเซอร์กด 5 ตามด้วยเบอร์ True NetTalk เบอร์อื่น Asterisk จะตัด 5 ออกแล้วส่งตัวเลขที่เหลือไป True NetTalk
- โค้ด: เลือกทั้งหมด
exten => _59[89]XXXXXXXXXX,1,Dial(SIP/${EXTEN:1}@true_nettalk,30,tT)
exten => _59[89]XXXXXXXXXX,n,Hangup
; โทรไปต่างประเทศ 555 เป็น Prefix ที่ True NetTalk บอกว่าต้องแปะมาถ้าจะโทรไปต่างประเทศ
; แต่ก็ไม่รู้ว่าตอนนี้เขาจะรับรหัสประเทศตรงๆหรือยัง
; ยูสเซอร์กด 5 ตามด้วยรหัสประเทศ รหัสพื้นที่ และเบอร์ Asterisk จะตัด 5 ออก ก่อนจะส่งตัวเลขที่เหลือไป Asterisk จะเติม Prefix 555 ก่อนส่งไป True NetTalk
- โค้ด: เลือกทั้งหมด
exten => _5Z.,1,Dial(SIP/555${EXTEN:1}@true_nettalk,30,tT)
exten => _5Z.,n,Hangup
5. รีโหลด SIP และ Dialplan
เข้า Asterisk Console แล้วพิมพ์ 2 คำสั่งนี้เพื่อรีโหลด SIP และ Dialplan ใหม่
- โค้ด: เลือกทั้งหมด
sip reload
dialplan reload
6. ตรวจสอบการรีจิสเตอร์กับ True NetTalk
เข้า Asterisk Console แล้วพิมพ์คำสั่ง sip show registry
7. ตรวจสอบการรีจิสเตอร์ของเบอร์ Extension
8. โทรออก
Dialplan ที่ผมทำไว้นะครับ เป็นดังนี้
โทรเบอร์ประเทศไทย กด 5 เพื่อตัดออก Trunk ของ True Nettalk (สมมติว่าบน Asterisk มีหลายเร้าท์ครับ) ตามด้วยเบอร์ปลายทาง กดเหมือนปกติครับ
โทรเบอร์ True NetTalk อื่น กด 5 ก่อนเพื่อเลือก True Nettalk แล้วกดเบอร์ NetTalk เบอร์อื่นได้เลย
โทรเบอร์ต่างประเทศ กด 5 ก่อนแล้วกดรหัสประเทศ รหัสพื้นที่ และเบอร์ปลายทาง ซึ่ง Asterisk จะเติม Prefix 555 ให้เองครับ
มาดูขั้นตอนที่เกิดขึ้นเมื่อโทรไปเบอร์ปลายทางในประเทศไทยและต่างประเทศครับ (เบอร์ True NetTalk ผมไม่ได้เทสเพราะว่ามีเบอร์เดียวครับ)
8.1 โทรออกไปเบอร์ประเทศไทย
โทรไปเบอร์ 087505xxxx
กด 5087505xxxx
จาก Asterisk Console
sip2*CLI>
-- Executing [5087505xxxx@from-internal:1] Dial("SIP/100-00008dc6", "SIP/087505xxxx@true_nettalk|30|tT") in new stack
-- Called 087505xxxx@true_nettalk
-- SIP/true_nettalk-00008dc7 is making progress passing it to SIP/100-00008dc6
-- SIP/true_nettalk-00008dc7 is ringing
-- SIP/true_nettalk-00008dc7 answered SIP/100-00008dc6
จากโปรแกรม WireShark
0.000000 192.168.4.55 -> 61.90.255.132 SIP/SDP Request: INVITE sip:087505xxxx@61.90.255.132:5060;user=phone, with session description
0.267958 61.90.255.132 -> 192.168.4.55 SIP Status: 100 Trying
0.312135 61.90.255.132 -> 192.168.4.55 SIP Status: 407 Proxy Authentication Required
0.312219 192.168.4.55 -> 61.90.255.132 SIP Request: ACK sip:087505xxxx@61.90.255.132:5060;user=phone
0.312339 192.168.4.55 -> 61.90.255.132 SIP/SDP Request: INVITE sip:087505xxxx@61.90.255.132:5060;user=phone, with session description
0.512190 192.168.4.55 -> 61.90.255.132 SIP/SDP Request: INVITE sip:087505xxxx@61.90.255.132:5060;user=phone, with session description
0.543868 61.90.255.132 -> 192.168.4.55 SIP Status: 100 Trying
3.415559 61.90.255.132 -> 192.168.4.55 SIP/SDP Status: 183 Session Progress, with session description
3.576134 61.90.255.132 -> 192.168.4.55 SIP Status: 180 Ringing
7.559657 61.90.255.132 -> 192.168.4.55SIP/SDP Status: 200 OK, with session description
7.559861 192.168.4.55 -> 61.90.255.132 SIP Request: ACK sip:087505xxxx@61.90.255.132:5060;user=phone;transport=udp
10.456141 61.90.255.132 -> 192.168.4.55 SIP Request: BYE sip:98000003669@192.168.4.55
10.456273 192.168.4.55 -> 61.90.255.132 SIP Status: 200 OK
โทรได้ครับ และผมลองอีกเบอร์ 029009000 ก็โทรได้ กด DTMF ก็เวอร์คด้วย
8.2 โทรไปเบอร์ต่างประเทศ
โทรไปเบอร์ 1 212 777 3456
กด 512127773456
จาก Asterisk Console
sip2*CLI>
-- Executing [512127773456@from-internal:1] Dial("SIP/100-00008dc8", "SIP/55512127773456@true_nettalk|30|tT") in new stack
-- Called 55512127773456@true_nettalk
-- SIP/true_nettalk-00008dc9 is making progress passing it to SIP/100-00008dc8
-- SIP/true_nettalk-00008dc9 answered SIP/100-00008dc8
ก็โทรได้ครับ
ลองทำตามดูครับ เวอร์คแน่นอน ผมพยายามเขียนให้ละเอียดที่สุดนะครับ ถ้าสงสัยขั้นตอนไหนก็โพสสอบถามมาได้ หรือว่ามีอะไรที่ผมเขียนตกไปก็รบกวนโพสต์มาด้วยนะครับ ผมและท่านอื่นๆจะได้รู้ด้วย