[asterisk-users] Ringing Groups, SIP Forward and looping problem

Robert Lister robl at linx.net
Fri Sep 28 10:57:08 CDT 2007


On Fri, Sep 28, 2007 at 09:57:52AM +0100, Russell Brown wrote:
> 
> I've a big problem with SIP forwarding back into 'ringing groups'
> creating what can only be described as call storms :-(
> 
> I have a 'ringing groups' of SIP phones with an effective dialplan (much
> simplified) like so:
> 
> 	;   Purchase ledger
> 	[ptsn_inbound]
> 	exten => _846061,1,Dial(Local/6061 at groups)

I am not sure why you are doing it like this but it seems awkward.

Relying on handset diverts seems fraught with danger as you can't be sure 
what's going to happen from a dialplan perspective.

Why don't you set up a queue in queues.conf strategy ringall:

[purchase]
; Dynamic group for users logging on in London Office
strategy = ringall
maxlen = 1
retry = 1
timeout = 20
musiconhold = default
joinempty = strict
leavewhenempty = yes
timeoutrestart = yes
member => SIP/110
member => SIP/111
member => SIP/112
member => SIP/113
member => SIP/114

Then route calls to that queue from the dialplan:-

exten => _846061,1,Queue(purchase|rn|||40)
...

[...variety of options you can do here if there is no answer all busy
 in the queue etc, see variable ${QUEUESTATUS}. Here's what I've got:-
 
exten => s,n,GotoIf($["${QUEUESTATUS}" = "UNKNOWN"]?200)
exten => s,n,GotoIf($["${QUEUESTATUS}" = "BUSY"]?200)
exten => s,n,GotoIf($["${QUEUESTATUS}" = "FULL"]?200)
exten => s,n,GotoIf($["${QUEUESTATUS}" = "JOINUNAVAIL"]?200)
exten => s,n,GotoIf($["${QUEUESTATUS}" = "LEAVEUNAVAIL"]?200)
exten => s,n,GotoIf($["${QUEUESTATUS}" = "LEAVEEMPTY"]?200)
exten => s,n,GotoIf($["${QUEUESTATUS}" = "TIMEOUT"]?200)

]

Then you could set up some features in the dial plan to allow your users
to go in and out of the group as required. Something like:-

exten => _*71,2,Macro(togglegroup,${CALLERID(num)})

( *71 will toggle in and out of group, so you could program a button on
  your phones for example, to set them in and out of group. This set of 
  macros keeps track for each user in and out group state and toggles
  it in and out. It keeps track of it with a db variable.)


[macro-outofgroup]
exten => s,1,NoOp("macro-outofgroup reached: ${ARG1}")
exten => s,n,NoOp( -- DND pausing queue member:  Local/${ARG1} --- )
exten => s,n,PauseQueueMember(|Local/${ARG1}@agent_call)
exten => s,n,Set(DB(${ARG1}/outofgroup)=1)
exten => s,n,Answer
exten => s,n,Playback(extras/dnd-out-of-group)
exten => s,n,Hangup

[macro-ingroup]
exten => s,1,NoOp("macro-ingroup reached: ${ARG1}")
exten => s,n,NoOp( -- DND unpausing queue member:  Local/${ARG1} --- )
exten => s,n,UnPauseQueueMember(|Local/${ARG1}@agent_call)
exten => s,n,DBdel(${ARG1}/outofgroup)
exten => s,n,Answer
exten => s,n,Playback(extras/dnd-now-in-group)
exten => s,n,Hangup

[macro-togglegroup]
exten => s,1,NoOp("macro-togglegroup reached: ${ARG1}")
exten => s,n,GotoIf($["${DB(${ARG1}/outofgroup)}" = ""]?900)
exten => s,n,Macro(ingroup,${ARG1})
exten => s,n,Hangup

exten => s,900,Macro(outofgroup,${ARG1});
exten => s,n,Hangup

(I've got those sounds if you want them, let me know, if you don't mind 
plummy british accent we re-recorded all our sounds files in, plus a few 
custom ones, or you could just play a tone so the user knows the group 
action has been carried out.)

Let me know if this is any use to you.


Regards,


Rob


-- 
Robert Lister     - London Internet Exchange - http://www.linx.net/
sip:robl at linx.net - inoc-dba:5459*710        - tel: +44 (0)20 7645 3510



More information about the asterisk-users mailing list