Assume that I receive an Invite from a SIP device that Asterisk has
registered with. How do I get Asterisk to dial out using the Invite details
as if the Invite had been received from a UA registered with Asterisk? i.e.
UA -> SIP Proxy -> Asterisk -> PSTN gateway.
For example
INVITE sip:95556789@60.234.xxx.xxx SIP/2.0
Record-Route: <sip:147.202.nn.nnn;ftag=bf7eced18eb7271b;lr=on>
Via: SIP/2.0/UDP 147.202.nn.nnn;branch=z9hG4bKe49c.21b320a3.0
Via: SIP/2.0/UDP 60.234.nnn.nnn;branch=z9hG4bK76bf3dec8d45b972
From: "User"
<sip:1122334455@proxy.domain.com>;tag=bf7eced18eb7271b
To: <sip:5556789@domain.com>
etc
If the Invite was received from a SIP device registered with Asterisk (in
the [from-internal] context) then the call would be routed to
[outrt-003-test] and dial out correctly.
I want to do the same thing with the Invite received from the SIP proxy. Can
anyone advise how I can achieve this (in Asterisk 1.2.9)? Cut-down versions
of conf files are below.
sip.conf
register=1122334455:password@domain.com/66554433
[1122334455]
type=peer
host=proxy.domain.com
fromuser=1122334455
context=from-internal
extensions.conf
[from-internal]
include => from-internal-additional
exten => s,1,Macro(hangupcall)
exten => h,1,Macro(hangupcall)
exten => 66554433, 1, ?????????
[from-internal-additional]
include => outbound-allroutes
[outbound-allroutes]
include => outrt-003-test
exten => foo,1,Noop(bar)
[outrt-003-test]
exten => _90[2-79]XXXXXX.,1,Macro(dialout-trunk,1,${EXTEN:1},,)
exten => _90[2-79]XXXXXX.,n,Macro(dialout-trunk,5,${EXTEN:1},,)
exten => _90[2-79]XXXXXX.,n,Macro(dialout-trunk,3,${EXTEN:1},,)
exten => _90[2-79]XXXXXX.,n,Macro(dialout-trunk,2,${EXTEN:1},,)
exten => _90[2-79]XXXXXX.,n,Macro(outisbusy,)
[macro-dialout-trunk]
exten => s,1,GotoIf($["${ARG3}" = ""]?3:2) ; arg3 is
pattern password
exten => s,2,Authenticate(${ARG3})
exten => s,3,Macro(user-callerid)
exten => s,4,Macro(record-enable,${CALLERID(number)},OUT)
exten => s,5,Macro(outbound-callerid,${ARG1})
exten => s,6,Set(GROUP()=OUT_${ARG1})
exten => s,7,GotoIf($[ ${GROUP_COUNT()} > ${OUTMAXCHANS_${ARG1}} ]?108)
; if we've used up the max channels, continue at (n+101)
exten => s,8,Set(DIAL_NUMBER=${ARG2})
exten => s,9,Set(DIAL_TRUNK=${ARG1})
exten => s,10,AGI(fixlocalprefix) ; this sets DIAL_NUMBER to the proper dial
string for this trunk
exten => s,11,Set(OUTNUM=${OUTPREFIX_${ARG1}}${DIAL_NUMBER}) ; OUTNUM is
the final dial number
exten => s,12,Set(custom=${CUT(OUT_${ARG1},:,1)}) ; Custom trunks are
prefixed with "AMP:"
exten => s,13,GotoIf($["${custom}" = "AMP"]?16)
exten => s,14,Dial(${OUT_${ARG1}}/${OUTNUM},120,${TRUNK_OPTIONS}) ; Regular
Trunk Dial
exten => s,15,Goto(s-${DIALSTATUS},1)
; This is a custom trunk. Substitute $OUTNUM$ with the actual number and
rebuild the dialstring
; example trunks: "AMP:CAPI/XXXXXXXX:b$OUTNUM$,30,r",
"AMP:OH323/$OUTNUM$@XX.XX.XX.XX:XXXX"
exten => s,16,Set(pre_num=${CUT(OUT_${ARG1},$,1)})
exten => s,17,Set(the_num=${CUT(OUT_${ARG1},$,2)}) ; this is where we
expect to find string OUTNUM
exten => s,18,Set(post_num=${CUT(OUT_${ARG1},$,3)})
exten => s,19,GotoIf($["${the_num}" = "OUTNUM"]?20:21) ;
if we didn't find
"OUTNUM", then skip to Dial
exten => s,20,Set(the_num=${OUTNUM}) ; replace "OUTNUM" with the
actual
number to dial
exten => s,21,Dial(${pre_num:4}${the_num}${post_num},120,${TRUNK_OPTIONS})
exten => s,22,Goto(s-${DIALSTATUS},1)
exten => s,108,Noop(max channels used up)
exten => s-BUSY,1,NoOp(Trunk is reporting BUSY)
exten => s-BUSY,2,Busy()
exten => s-BUSY,3,Wait(60)
exten => s-BUSY,4,NoOp()
exten => _s-.,1,NoOp(Dial failed due to ${DIALSTATUS})
Please note that Asterisk also receives Invites from the same proxy (same IP
and port) that need to be treated differently i.e. as if they were external
incoming calls. If this were not the case then the following sip.conf
achieves the desired result (I've tested this successfully). The call gets
into the from-internal context and the outbound call to the PSTN is made:
sip.conf
register=1122334455:password@domain.com
[1122334455]
type=peer
context=from-internal
However when I create another SIP peer, even though the Invite from the
Proxy has different From details, and I specify fromuser and host in
sip.conf under [1122334455], the call is treated as an external call.
Any advice appreciated.
Cameron