Call Preemption

Home » Asterisk Users » Call Preemption
Asterisk Users 5 Comments


Has anyone already implemented some sort of call preemption in Asterisk
? I am trying to achieve something like this :

– I want to limit the number of calls on a given SIP peer to 10

– on the other hand, some calls have higher priority than others

– when the ceiling of 10 calls is reached and a call with a high priority is attempted, I would like to drop a call with a lower priority to let the new one go through

Monitoring the ceiling is easy with channel groups, but it is does not help in implementing call preemption since there is no function to retrieve all the channels of a given group.

Does anyone have an idea ?


Jean Aunis

5 thoughts on - Call Preemption

  • The task itself sounds like a job for an AGI script to me… check for amount of calls, if 10, hangup one.

    But how do you determine the priority of a call?

    Am 07.11.2017 um 12:21 schrieb Jean Aunis:

  • Please don’t top-post.

    An AGI using AMI to do ‘core show channels concise’, parse the output, pick your victim, AMI to do ‘channel request hangup x’

    Note that there are ‘race condition’ opportunities.

  • Le 08/11/2017 à 20:35, John Kiniston a écrit :
    Thank you for your answer. I’m already using GROUP and GROUP_COUNT to limit the amount of calls. The problem is that I do not want to drop the last incoming call, I want to drop one of the calls previously set up in the same group, in order to leave room to the new call. Unfortunately, it seems here is no function to list all the channels being part of a given group.

  • Thank you for your answers. In this case the priority would be transmitted in the SIP signalling with the SIP “Priority” header, but in the future it could be determined by other means (for instance, by searching the caller in a list of privileged numbers).

    The problem with “core show channels concise” is that it will display all the channels currently existing in Asterisk, whereas I want to pick the channel to hangup in a subset of the existing channels. For example
    : I don’t care about the number of channels dedicated to “internal”
    calls, but I want to limit the number of calls to 10 for a SIP trunk A, and to 15 for a SIP trunk B.

    I’m currently using GROUP and GROUP_COUNT to gather my channels in groups, which already allows me to limit the amount of calls to a given SIP trunk. Ideally, I would like to pick a channel to hangup in a particular group. But if there is a mechanism better than groups to do this, I’ll take it.