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