เชื่อมต่อ Asterisk กับ True NetTalk

Asterisk Opensource IP Pbx

เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย voip4share » 27 ก.พ. 2010 11:58

ดาวน์โหลดเอกสาร pdf ของบทความ Asterisk True NetTalk นี้

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
sip-show-registry.png
Show Registry
sip-show-registry.png (3.81 KiB) เปิดดู 12530 ครั้ง


7. ตรวจสอบการรีจิสเตอร์ของเบอร์ Extension
sip-show-peers.png
Show Peers
sip-show-peers.png (5.39 KiB) เปิดดู 12530 ครั้ง

sip-show-peer-100.png
Show Peer 100
sip-show-peer-100.png (24.97 KiB) เปิดดู 12530 ครั้ง


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


ก็โทรได้ครับ

ลองทำตามดูครับ เวอร์คแน่นอน ผมพยายามเขียนให้ละเอียดที่สุดนะครับ ถ้าสงสัยขั้นตอนไหนก็โพสสอบถามมาได้ หรือว่ามีอะไรที่ผมเขียนตกไปก็รบกวนโพสต์มาด้วยนะครับ ผมและท่านอื่นๆจะได้รู้ด้วย
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

Re: เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย haeha » 27 ก.พ. 2010 17:21

กรณีมี True Nettlak Account มากกว่าหนึ่ง
ต้องไปเพิ่มค่าตรงไหนบ้างครับ
ใส่ไปใน Trunk เดิมหรือสร้างเป็น

true_nettalk1
true_nettalk2

ครับ
http://www.irbeautina.biz
เว็ปขายสินค้าแบรนด์ไทยตั้งโดยโรงงานรับจ้างผลิต ที่สั่งสมประสบการณ์การผลิตเพื่อการส่งออกมากว่า 27 ปี
มีผลิตภัณฑ์หลากหลายอาทิ สินค้าด้านความงาม อาหารเสริม สปา บำรุงผิวพรรณ รักษาสิว ฝ้า น้ำหอม เครื่องประดับ
เปิดรับสมัครตัวแทนจำหน่ายอิสระ แฟรนไชส์
ภาพประจำตัวสมาชิก
haeha
Silver Member
 
โพสต์: 26
ลงทะเบียนเมื่อ: 12 ก.พ. 2010 07:41
ที่อยู่: บางแสน

Re: เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย voip4share » 27 ก.พ. 2010 19:31

เข้าใจถูกต้องแล้วครับ สร้าง Trunk ให้เท่ากับจำนวน Account ที่มี เพราะว่าบรรทัด
username=
secret=
fromuser=
จะแตกต่างกันไปในแต่ละ Account
รวมทั้งบรรทัด register => ด้วยนะครับ ให้มีเท่ากับจำนวน Account ซึ่ง True NetTalk ไม่ได้จำกัดว่า IP Address หนึ่งจะรีจิสเตอร์ได้กี่ Account เขาจำกัดเพียงว่า 1 Account ยอมให้โทรได้ครั้งละ 1 Call

ตัวอย่างครับ

ไฟล์ sip_trunks.conf
โค้ด: เลือกทั้งหมด
[true_nettalk1]
...
fromuser=username1
username=username1
secret=password1
call-limit=1
context=from-trunk-true-nettalk

[true_nettalk2]
...
fromuser=username2
username=username2
secret=password2
call-limit=1
context=from-trunk-true-nettalk

[true_nettalk3]
...
fromuser=username3
username=username3
secret=password3
call-limit=1
context=from-trunk-true-nettalk


ไฟล์ sip_registers.conf
โค้ด: เลือกทั้งหมด
register => username1:password1:username1@61.90.255.132/username1
register => username2:password2:username1@61.90.255.132/username2
register => username3:password3:username1@61.90.255.132/username3


ไฟล์ extensions_internal.conf
โค้ด: เลือกทั้งหมด
[from-internal]
include => from-trunk-true-nettalk

exten => _1XX,1,Dial(SIP/${EXTEN},30,tT)
exten => _1XX,n,Hangup


ไฟล์ extensions_true_nettalk.conf
แบบง่ายสุดๆครับ ไม่ได้มีการเช็ค Channel Status แต่อย่างใด ไว้ผมจะเขียนบทความการเลือก Trunk แบบที่มันฉลาดๆกว่านี้ครับ
โค้ด: เลือกทั้งหมด
[from-trunk-true-nettalk]

exten => s,1,Goto(from-internal,100,1)
exten => s,n,Hangup

exten => _50X.,1,Dial(SIP/${EXTEN:1}@true_nettalk1,30,tT)
exten => _50X.,n,Dial(SIP/${EXTEN:1}@true_nettalk2,30,tT)
exten => _50X.,n,Dial(SIP/${EXTEN:1}@true_nettalk3,30,tT)
exten => _50X.,n,Hangup

exten => _59[89]XXXXXXXXXX,1,Dial(SIP/${EXTEN:1}@true_nettalk,30,tT)
exten => _59[89]XXXXXXXXXX,n,Dial(SIP/${EXTEN:2}@true_nettalk,30,tT)
exten => _59[89]XXXXXXXXXX,n,Dial(SIP/${EXTEN:3}@true_nettalk,30,tT)
exten => _59[89]XXXXXXXXXX,n,Hangup

exten => _5Z.,1,Dial(SIP/555${EXTEN:1}@true_nettalk1,30,tT)
exten => _5Z.,n,Dial(SIP/555${EXTEN:1}@true_nettalk2,30,tT)
exten => _5Z.,n,Dial(SIP/555${EXTEN:1}@true_nettalk3,30,tT)
exten => _5Z.,n,Hangup
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

Re: เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย haeha » 28 ก.พ. 2010 10:47

ขั้นตอนที่ 2.1 ไฟล์ sip.conf
include ต้องเอาไปใส่ไว้ในส่วนไหนเหรอครับ

ทำไมผมเอาไปใน [general] ตามตัวอย่างแล้ว ถึงไม่ work ครับ
พอเข้าไปเช็คใน asterisk console แล้ว
sip show registry แล้ว ถึงไม่ขึ้นว่าติดต่อ server True ได้
แต่ถ้าเขียนแบบปกติ ไม่แยกไฟล์ กลับติดต่อ server ได้ครับ

ตอนนี้ลองแยกแค่ไฟล์ sip.conf ไฟล์เดียว
ลองทดสอบแค่เพียงคำสั่งเดียว คือ register

แยกคำสั่ง register ไปอยู่ในไฟล์ sip_registers.conf

register =>

แล้วใน sip.conf ก็ include เข้ามาในส่วน general ด้วยคำสั่ง include
[general]
include sip_registers.conf

ไม่ทราบว่าผมพลาดตรงไหนไปหรือป่าวครับ แต่คำสั่ง register ตรวจสอบความถูกต้องแล้ว
ตอนแยกกับไม่แยกเขียนแบบเดียวกันแน่นอน ครับ ตอนไม่แยกใช้งานได้ พอแยกไปแล้วไม่ work ครับ
http://www.irbeautina.biz
เว็ปขายสินค้าแบรนด์ไทยตั้งโดยโรงงานรับจ้างผลิต ที่สั่งสมประสบการณ์การผลิตเพื่อการส่งออกมากว่า 27 ปี
มีผลิตภัณฑ์หลากหลายอาทิ สินค้าด้านความงาม อาหารเสริม สปา บำรุงผิวพรรณ รักษาสิว ฝ้า น้ำหอม เครื่องประดับ
เปิดรับสมัครตัวแทนจำหน่ายอิสระ แฟรนไชส์
ภาพประจำตัวสมาชิก
haeha
Silver Member
 
โพสต์: 26
ลงทะเบียนเมื่อ: 12 ก.พ. 2010 07:41
ที่อยู่: บางแสน

Re: เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย voip4share » 28 ก.พ. 2010 12:02

สำหรับไฟล์ sip.conf และ extensions.conf ต้องเอาบรรทัด #include ไว้ภายใต้ [general] ครับ ในหัวข้อที่ 2.1 ผมเขียนผิด (แต่ก็ได้แก้ไขแล้ว ขอบคุณครับ :D ) บรรทัด include ต้องมีเครื่องหมาย # นำหน้าด้วยครับ ผมก็ลืมเขียนอีกหล่ะ แต่ก็ได้แก้ไขหัวข้อ 2.1 ให้ถูกต้องแล้ว ขอบคุณอีกครั้งครับ
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

Re: เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย haeha » 28 ก.พ. 2010 18:16

ขอบคุณครับ ช่วงนี้เบลอๆ สงสัยนอนน้อย เพราะตอนผมลองใส่ คำสั่ง #include ผมดันใส่แบบนี้

include => sip_registers.conf

ซึ่งพอใช้ sip reload แล้วมันผ่านไม่แจ้ง error แต่ติดต่อกะ True Nettalk ไม่ได้ เลยไปงมเช็คค่าที่ใส่ในคำสั่ง
register เสียนาน กับเช็คชื่อไฟล์ว่าเขียนชื่อ sip_registers.conf ผิดหรือป่าว

พอลองใส่ #include => sip_registers.conf ดันเกิด error

[Feb 28 17:58:52] ERROR[4462]: config.c:1102 process_text_line: The file '=> sip_registers.conf' was listed as a #include but it does not exist.
[Feb 28 17:58:52] ERROR[4462]: chan_sip.c:24241 reload_config: Contents of sip.conf are invalid and cannot be parsed

แต่ไม่ได้มองว่า มันเป็นที่ '=>' - -"

เลยพาลคิดเอาไปเองว่าคำสั่งที่ถูกต้องไม่มี # บ๊องส์ไปเสียนานเลยนี่ผม จุดใต้ตำตอ นี่เอง

แบบที่ถูกเขียน
#include sip_registers.conf
http://www.irbeautina.biz
เว็ปขายสินค้าแบรนด์ไทยตั้งโดยโรงงานรับจ้างผลิต ที่สั่งสมประสบการณ์การผลิตเพื่อการส่งออกมากว่า 27 ปี
มีผลิตภัณฑ์หลากหลายอาทิ สินค้าด้านความงาม อาหารเสริม สปา บำรุงผิวพรรณ รักษาสิว ฝ้า น้ำหอม เครื่องประดับ
เปิดรับสมัครตัวแทนจำหน่ายอิสระ แฟรนไชส์
ภาพประจำตัวสมาชิก
haeha
Silver Member
 
โพสต์: 26
ลงทะเบียนเมื่อ: 12 ก.พ. 2010 07:41
ที่อยู่: บางแสน

Re: เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย haeha » 03 มี.ค. 2010 12:10

สอบถามข้อมูลหน่อยครับ
ตอนนี้ผมติดตั้ง Asterisk บนเครื่องป่าว
ไม่ได้ติดตั้ง Asterisk card

ผมลองเซตให้ Asterisk เป็นระบบตอบรับ โดยใช้เลขหมายจาก Totnetcall เพียงอย่างเดียวในการทดสอบ
ตอนนี้มี Totnetcall 3 เลขหมาย
สมมติว่าเป็นเบอร์ tot1 ,tot2 ,tot3

เบอร์ 1 กับ เบอร์ 2 เซตไว้ใน asterisk

ส่วนเบอร์ 3 ให้เพื่อน ที่อยู่จากอีกเครือข่ายโทรเข้ามา

ตอนนี้เบอร์ภายในโทรออก totnetcall ได้
แต่จากเบอร์ totnetcall ภายนอก โทรเข้ามาหาระบบเราไม่ได้จะเกิด error ขึ้นแบบนี้

โค้ด: เลือกทั้งหมด
[Mar  3 11:42:11] NOTICE[19944]: chan_sip.c:20039 handle_request_invite: Call from 'tot1' to extension 'tot1' rejected because extension not found.


Asterisk แจ้งว่า rejected สายนี้เพราะไม่เจอ extension

ไม่ทราบว่าเป็นเพราะอะไรเหรอครับ:
- จะสามารถใช้ extension s ในการรับสายเข้าจาก Totnetcall ได้ไหมครับ
- หรือเพราะผมไม่สามารถใช้ extension s ได้เนื่องจากไม่ได้ติดตั้ง asterisk card ไว้
- หรือต้องไปตั้งค่าอะไรเพิ่มถ้าจะรับสายนอก

พอดีลองมาหลายวันแล้วไม่ได้ สักทีครับ
ส่วนโค้ดผมใช้ตามตัวอย่างเลย แต่ตรง extension ในการรับสายนอกเพิ่มเป็น มี error ดังนี้
โค้ด: เลือกทั้งหมด
exten => s,1,Answer()
exten => s,n,Playback(welcome)
exten => s,n,Goto(from-internal,100,1)
exten => s,n,Hangup


จากของเดิมเป็น
โค้ด: เลือกทั้งหมด
exten => s,n,Goto(from-internal,100,1)
exten => s,n,Hangup


ขอบคุณครับ
http://www.irbeautina.biz
เว็ปขายสินค้าแบรนด์ไทยตั้งโดยโรงงานรับจ้างผลิต ที่สั่งสมประสบการณ์การผลิตเพื่อการส่งออกมากว่า 27 ปี
มีผลิตภัณฑ์หลากหลายอาทิ สินค้าด้านความงาม อาหารเสริม สปา บำรุงผิวพรรณ รักษาสิว ฝ้า น้ำหอม เครื่องประดับ
เปิดรับสมัครตัวแทนจำหน่ายอิสระ แฟรนไชส์
ภาพประจำตัวสมาชิก
haeha
Silver Member
 
โพสต์: 26
ลงทะเบียนเมื่อ: 12 ก.พ. 2010 07:41
ที่อยู่: บางแสน

Re: เชื่อมต่อ Asterisk กับ True NetTalk

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

อืม ผมไม่เคยรู้มาก่อนเลยนะครับว่า Extension 's' จะใช้งานได้ก็ต่อเมื่อติดตั้ง Card เดี๋ยวต้องขอค้นข้อมูลก่อน ตอนนี้ผมว่าใช้ 's' ได้โดยไม่ต้องมีการ์ดก็ได้เพราะว่าคอนเซ็ปต์ของ Extensions 's' คือมันแทน Extensions อะไรก็ได้ใน Context ที่มันอยู่

ปัญหาของคุณ haeha เกิดจาก Context ครับซึ่ง Context ในไฟล์ sip.conf กับ extensions.conf ของคุณ haeha มันไม่สัมพันธ์กัน ลองแกะจากตัวอย่างข้างล่างนี้ครับ ได้แน่นอน

ไฟล์ sip.conf
โค้ด: เลือกทั้งหมด
[tot1]
context=from-tot-netcall-trunk

[tot2]
context=from-tot-netcall-trunk



ไฟล์ extensions.conf
โค้ด: เลือกทั้งหมด
[from-tot-netcall-trunk]
exten => s,1,Answer()
exten => s,n,Playback(welcome)
exten => s,n,Goto(from-internal,100,1)
exten => s,n,Hangup

[from-internal]
exten => 100,1,Dial(SIP/100,30,tTR)
exten => 100,n,Hangup


ในไฟล์ sip.conf ตอนสร้าง Trunk tot1 และ tot2 จะเห็นว่ามีบรรทัด context=from-trunk-tot-netcall อยู่ และเมื่อมีคนโทรเข้ามาทาง Trunk สองอันนี้ Asterisk มันจะมองหาบรรทัด context= แล้วมันก็จะไปหา context ชื่อเดียวกันนี้ในไฟล์ extensions.conf ครับ
ถ้าหา context นี้ไม่เจอ หรือเจอแต่ว่าไม่มีเบอร์ที่เราแทนด้วย tot1 หรือ tot2 อยู่ มันก็จะส่ง 404 Notfound กลับไป หรือบน Asterisk console ก็จะแสดงข้อความประมาณว่า Call from 'tot1' to extension 'tot1' rejected because extension not found อย่างที่คุณ haeha เจอครับ
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

Re: เชื่อมต่อ Asterisk กับ True NetTalk

โพสต์โดย haeha » 03 มี.ค. 2010 23:14

ลองแกะ code มาหลายวันและครับ
รอบนี้เลยยก code มาด้วย เผื่อผมจะเอ๋อเองอีก
ช่วยผมเช็คทีผมว่าก็เขียนตรงกันนะครับ ใน extension กับ ใน sip

การทดสอบ:
เบอร์ 0681117290 เป็นเบอร์เพื่อนที่อยู่ network คนละเครือข่ายกัน ไว้โทรมาเป็นสายเข้า
เบอร์ 0681117069 ลงทะเบียนไว้ใน Asterisk

ทดสอบโดยเพื่อน ขั้นแรก
ให้เพื่อนที่อยู่คนละ network Login เข้ามาเป็นเบอร์ภายในได้ -> เบอร์ 101
ผล -> เข้ามาได้ และโทรได้ตามปกติ

ต่อมาทดสอบโดย
เพื่อนออกจากเบอร์ภายใน (101)
แล้วให้ Login เข้า netcall ด้วยเบอร์ 0681117290 แล้วให้เพื่อนโทรเข้า 0681117069
ซึ่งลงทะเบียนไว้ ใน Asterisk ส่วนตัว

ผล เกิด error ดังว่า
เช็คแล้วเช็คอีก ก็ไม่ทราบว่าผิดตรงไหน

เลยมารบกวนอีกรอบครับ

Asterisk Console Error:
โค้ด: เลือกทั้งหมด
[Mar  3 21:59:11] NOTICE[7189]: chan_sip.c:20039 handle_request_invite: Call from '0681117069' to extension '0681117069' rejected because extension not found.
  == Using SIP RTP CoS mark 5
  == Using UDPTL CoS mark 5
[Mar  3 21:59:12] NOTICE[7189]: chan_sip.c:20039 handle_request_invite: Call from '0681117069' to extension '0681117069' rejected because extension not found.

Ngrep Error:

[code]#
U 203.113.125.82:5060 -> 192.168.1.5:5060
  INVITE sip:0681117069@192.168.1.5:5060 SIP/2.0..Via: SIP/2.0/UDP 203.113.125.82:5060;b
  ranch=z9hG4bKcjo3hd308g81fec4a301.1..From: "0681117290"<sip:0681117290@203.113.125.82>
  ;tag=SDqu32201-SD4tcsd01-b1703210..To: "0681117069"<sip:0681117069@203.113.125.82>..Su
  pported: 100rel,timer..Content-Type: application/sdp..Session-Expires: 1800..Call-ID:
  SDqu32201-9ee619ff014dfb47406c65e9e945e557-besq791..CSeq: 1 INVITE..Allow: INVITE,ACK,
  OPTIONS,BYE,CANCEL,UPDATE,REGISTER,INFO,PRACK,SUBSCRIBE,NOTIFY,MESSAGE..Contact: <sip:
  0681117290@203.113.125.82:5060;transport=udp>..Max-Forwards: 69..Content-Length: 262..
  ..v=0..o=UTSTARCOM 0 0 IN IP4 125.27.16.84..s=-..c=IN IP4 125.27.16.84..t=0 0..m=audio
   14984 RTP/AVP 107 119 0 98 8 3 101..a=sendrecv..a=rtpmap:107 BV32/16000..a=rtpmap:119
   BV32-FEC/16000..a=rtpmap:98 iLBC/8000..a=rtpmap:101 telephone-event/8000..a=fmtp:101
  0-15..
#
U 192.168.1.5:5060 -> 203.113.125.82:5060
  SIP/2.0 404 Not Found..Via: SIP/2.0/UDP 203.113.125.82:5060;branch=z9hG4bKcjo3hd308g81
  fec4a301.1;received=203.113.125.82..From: "0681117290"<sip:0681117290@203.113.125.82>;
  tag=SDqu32201-SD4tcsd01-b1703210..To: "0681117069"<sip:0681117069@203.113.125.82>;tag=
  as786548c5..Call-ID: SDqu32201-9ee619ff014dfb47406c65e9e945e557-besq791..CSeq: 1 INVIT
  E..Server: VoIP4Share..Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOT
  IFY, INFO..Supported: replaces, timer..Content-Length: 0....
#
U 203.113.125.82:5060 -> 192.168.1.5:5060
  ACK sip:0681117069@192.168.1.5:5060 SIP/2.0..Via: SIP/2.0/UDP 203.113.125.82:5060;bran
  ch=z9hG4bKcjo3hd308g81fec4a301.1..From: "0681117290"<sip:0681117290@203.113.125.82>;ta
  g=SDqu32201-SD4tcsd01-b1703210..To: "0681117069"<sip:0681117069@203.113.125.82>;tag=as
  786548c5..Call-ID: SDqu32201-9ee619ff014dfb47406c65e9e945e557-besq791..CSeq: 1 ACK..Ma
  x-Forwards: 70....
#
U 203.113.125.82:5060 -> 192.168.1.5:5060
  INVITE sip:0681117069@192.168.1.5:5060 SIP/2.0..Via: SIP/2.0/UDP 203.113.125.82:5060;b
  ranch=z9hG4bKcjo3hd308g81fec4a301.1..From: "0681117290"<sip:0681117290@203.113.125.82>
  ;tag=SDqu32201-SD4tcsd01-b1703210..To: "0681117069"<sip:0681117069@203.113.125.82>..Su
  pported: 100rel,timer..Content-Type: application/sdp..Session-Expires: 1800..Call-ID:
  SDqu32201-9ee619ff014dfb47406c65e9e945e557-besq791..CSeq: 1 INVITE..Allow: INVITE,ACK,
  OPTIONS,BYE,CANCEL,UPDATE,REGISTER,INFO,PRACK,SUBSCRIBE,NOTIFY,MESSAGE..Contact: <sip:
  0681117290@203.113.125.82:5060;transport=udp>..Max-Forwards: 69..Content-Length: 262..
  ..v=0..o=UTSTARCOM 0 0 IN IP4 125.27.16.84..s=-..c=IN IP4 125.27.16.84..t=0 0..m=audio
   14984 RTP/AVP 107 119 0 98 8 3 101..a=sendrecv..a=rtpmap:107 BV32/16000..a=rtpmap:119
   BV32-FEC/16000..a=rtpmap:98 iLBC/8000..a=rtpmap:101 telephone-event/8000..a=fmtp:101
  0-15..
#
U 192.168.1.5:5060 -> 203.113.125.82:5060
  SIP/2.0 404 Not Found..Via: SIP/2.0/UDP 203.113.125.82:5060;branch=z9hG4bKcjo3hd308g81
  fec4a301.1;received=203.113.125.82..From: "0681117290"<sip:0681117290@203.113.125.82>;
  tag=SDqu32201-SD4tcsd01-b1703210..To: "0681117069"<sip:0681117069@203.113.125.82>;tag=
  as786548c5..Call-ID: SDqu32201-9ee619ff014dfb47406c65e9e945e557-besq791..CSeq: 1 INVIT
  E..Server: VoIP4Share..Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOT
  IFY, INFO..Supported: replaces, timer..Content-Length: 0....
#
U 203.113.125.82:5060 -> 192.168.1.5:5060
  ACK sip:0681117069@192.168.1.5:5060 SIP/2.0..Via: SIP/2.0/UDP 203.113.125.82:5060;bran
  ch=z9hG4bKcjo3hd308g81fec4a301.1..From: "0681117290"<sip:0681117290@203.113.125.82>;ta
  g=SDqu32201-SD4tcsd01-b1703210..To: "0681117069"<sip:0681117069@203.113.125.82>;tag=as
  786548c5..Call-ID: SDqu32201-9ee619ff014dfb47406c65e9e945e557-besq791..CSeq: 1 ACK..Ma
  x-Forwards: 70....#
[/code]

code ที่ใช้ทดลอง

extensions.conf
[code][general]

[from-trunk-totnetcall]
exten => s,1,Answer()
exten => s,n,Playback(welcome)
exten => s,n,Goto(from-internal,100,1)
exten => s,n,Hangup

exten => _50X.,1,Dial(SIP/${EXTEN:1}@totnetcall-1,30,tT)
exten => _50X.,n,Hangup

[from-internal]

exten => 100,1,Dial(SIP/100,30,tTr)
exten => 100,n,Hangup[/code]

sip.conf
[code][general]
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
language=th

exernrefresh=100
localnet=192.168.1.0/255.255.255.0

register => 0681117069:xxxxxx:0681117069@203.113.125.82:5060/0681117069

[totnetcall-1]
host=203.113.125.82
fromdomain=203.113.125.82
outboundproxy=203.113.125.82
insecure=port,invite
realm=10.10.2.50
port=5060
username=0681117069
secret=xxxxxx
type=peer
disallow=all
allow=g729
allow=g723
allow=alaw
allow=ulaw
dtmfmode=rfc2833
fromuser=0681117069
context=from-trunk-totnetcall
call-limit=1
qualify=yes

[100]
type=friend
secret=100
qualify=yes
port=5060
nat=yes
mailbox=100@irpbx
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=g729
allow=g723
allow=alaw
allow=ulaw
dial=SIP/100
context=from-internal
canreinvite=no
callgroup=0
pickgroup=0
callerid="Nui"<100>
call-limit=1

[101]
type=friend
secret=101
qualify=yes
port=5060
nat=yes
mailbox=101@voip4share
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=g729
allow=g723
allow=alaw
allow=ulaw
dial=SIP/101
context=from-internal
canreinvite=no
callgroup=0
pickgroup=0
callerid="Kik"<101>
call-limit=1


ขอความกรุณาอีกรอบครับ มึนมาหลายวันและ
แก้ไขล่าสุดโดย haeha เมื่อ 03 มี.ค. 2010 23:38, แก้ไขแล้ว 1 ครั้ง
http://www.irbeautina.biz
เว็ปขายสินค้าแบรนด์ไทยตั้งโดยโรงงานรับจ้างผลิต ที่สั่งสมประสบการณ์การผลิตเพื่อการส่งออกมากว่า 27 ปี
มีผลิตภัณฑ์หลากหลายอาทิ สินค้าด้านความงาม อาหารเสริม สปา บำรุงผิวพรรณ รักษาสิว ฝ้า น้ำหอม เครื่องประดับ
เปิดรับสมัครตัวแทนจำหน่ายอิสระ แฟรนไชส์
ภาพประจำตัวสมาชิก
haeha
Silver Member
 
โพสต์: 26
ลงทะเบียนเมื่อ: 12 ก.พ. 2010 07:41
ที่อยู่: บางแสน

Re: เชื่อมต่อ Asterisk กับ True NetTalk

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

ทุกอย่างถูกหมดครับ ยกเว้นตรง Extension 's' สงสัยผมจะมั่วเองครับ เคสนี้ใช้ Extension 's' ไม่ได้ครับ ผมกลับไปอ่านอีกรอบก็เพิ่งจะเข้าใจว่า Extension 's' จะใช้ได้ก็ต่อเมื่อเป็นคอลที่ไม่มีเบอร์ Extension มาด้วยเท่านั้น
แต่เคสของคุณ haeha มันเป็นคอลที่มีเบอร์ Extension มาด้วย ซึ่งก็คือเบอร์ 0681117069 (จาก Invite Message นี้ครับ INVITE sip:0681117069@192.168.1.5:5060) ก็เลยใช้ 's' ไม่ได้

ดังนั้นเขียน Dialplan ใหม่เป็นแบบนี้

[from-trunk-totnetcall]
exten => 0681117069,1,Answer()
exten => 0681117069,n,Playback(welcome)
exten => 0681117069,n,Goto(from-internal,100,1)
exten => 0681117069,n,Hangup

หรือ

exten => _068X.,1,Answer()
exten => _068X.,n,Playback(welcome)
exten => _068X.,n,Goto(from-internal,100,1)
exten => _068X.,n,Hangup

คอลที่ไม่มีเบอร์ Extension มาด้วยคือคอลที่โทรเข้ามาทางแชนแนล FXO ที่ต่อกับ PSTN ครับ แต่สำหรับ E1 มันจะมีเบอร์ Extension มาด้วยซึ่งเรียกว่า DNIS (Dialed Number Identification Service)
voip4share
Administrator
 
โพสต์: 656
ลงทะเบียนเมื่อ: 18 พ.ย. 2009 11:26
ที่อยู่: รามคำแหง กรุงเทพฯ

ต่อไป

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

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

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