On Wed, Jul 13, 2011 at 6:24 PM, ran
zhang
<rzhang@gosilverplus.com>
wrote:
hi all:
I'm trying to limit each registered user's active
calls, so
if that particular registered user pass the limit, FS stops
sending any
new incoming call to it and it can't make any new calls.
I looked into 'limit' api, the counter increment
everytime a
call FS receives, regardless of which user it is for, and
counter doesnt
reset itself after the call is finished.
I presume you mean the limit "dialplan app" and not API. In
any case, if you have the default configs then locate the
Local_Extension in conf/dialplan/default.xml. Add this line
right after the condition:
<action
application="limit" data="hash ${domain} $1 1
handle_over_limit XML over_limit_actions"/>
Then add this new file as "limits.xml" in conf/dialplan/ :
<include>
<context
name="over_limit_actions">
<extension
name="oops, too many calls for this one">
<condition
field="destination_number"
expression="handle_over_limit">
<action
application="answer"/>
<action
application="playback" data="ivr/ivr-no_no_no.wav"/>
<action
application="playback" data="ivr/ivr-no_no_no.wav"/>
<action
application="playback" data="ivr/ivr-no_no_no.wav"/>
<action
application="hangup" data="USER_BUSY"/>
</condition>
</extension>
</context>
</include>
Save, then do F6 or reloadxml. Now when you call a local
extension it won't allow more than one call. Note that you can
change the value in the limit's data argument. For example,
this would cause a limit of 4 concurrent calls, sending the
5th call into "oops, too many calls" extension:
<action
application="limit" data="hash ${domain} $1 4
handle_over_limit XML over_limit_actions"/>
The limit application handles everything for you. Note that
this only covers calls made *to* the extension. If you want to
handle calls made *from* the extension you will need to add
another limit app to the dialplan. Here's an example; put it
right after the "global" extension in default.xml:
<!-- set
outound caller limit -->
<extension
name="set outbound limit" continue="true">
<condition
field="destination_number" expression="^1?\d{7}"
break="on-false"/>
<condition
field="caller_id_number" expression="^(10[01][0-9])">
<action
application="limit" data="hash ${domain} $1
4 handle_over_limit XML over_limit_actions"/>
<action
application="log" data="INFO Added limit for caller
$1"/>
</condition>
</extension>
Again, save, press F6 or do reloadxml. Now when this person
makes a call to a 7-digit number or does 1+ 7 or more digits,
it will add to his limit totals. However, if he just calls
another 4-digit extension on the system then it won't add to
his limit. (Adjust this as you see fit.)
Let me know if this works for you (it worked for me in my
little lab setting) and I will throw it up on the wiki and
maybe add it to the cookbook.
-MC