<div dir="ltr">Generally the idea of arbitrarily killing calls seems awful, even if the behavior is expected.<div><br></div><div>Yeah so john we need to .<CLICK> RING.... John is confused, your brain has to reset because whatever was happening no longer matters.  </div><div><br></div><div>You can have priority queues and allow the agents to manage the transition rather than have the carpet yanked from their feet.  </div><div><br></div><div>For the most part, arbitrary automation of call control between 2 humans should avoided IMHO.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 13, 2017 at 2:31 AM, Jean Aunis <span dir="ltr"><<a href="mailto:jean.aunis@prescom.fr" target="_blank">jean.aunis@prescom.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
As I highlighted recently on the asterisk-users list (<a href="http://lists.digium.com/pipermail/asterisk-users/2017-November/292079.html" rel="noreferrer" target="_blank">http://lists.digium.com/piper<wbr>mail/asterisk-users/2017-Novem<wbr>ber/292079.html</a>), there is no native way in Asterisk to implement call preemption. By call preemption, I mean the following :<br>
<br>
- given calls have a priority, which may be notified by the network (see the SIP header Priority for instance), or which may be set by another way<br>
<br>
- given the number of calls to or from a given peer is limited<br>
<br>
- when this limit is reached, and an additional call comes in with a higher priority than previous ones, one of these calls should be hanged up to leave room to the new call.<br>
<br>
At the moment, it is possible to limit the number of calls to a peer using the GROUP/GROUP_COUNT functions. It is also possible to list all channels in Asterisk and choose one to hangup in an AGI script, but there is no way to list channels in a particular group. And there is no concept of priority attached to a channel.<br>
<br>
Therefore, I plan to add a new dialplan application which would preempt a channel in a particular group, below a given priority. It would be used this way : ChannelPreempt(mygroup,5) where "mygroup" is the group in which to look for a channel to hangup, and "5" is the priority below which the channel must by chosen. The application would return the preemption status and the preempted channel in channel variables.<br>
<br>
I would like to have your opinions about the best way to implement this. Here are my thoughts so far:<br>
<br>
1- add a "priority" field to the channel structure<br>
<br>
2- allow the CHANNEL function to read and write this field<br>
<br>
3- inside the new ChannelPreempt application:<br>
<br>
    - loop through the group list, and find the channel in the given group with the lowest priority<br>
<br>
    - if this priority is lower than the provided one, hangup the selected channel with ast_softhangup<br>
<br>
    - otherwise, do nothing<br>
<br>
    - set the following dialplan variables on completion:<br>
<br>
        * PREEMPTION_STATUS: "SUCCESS" if we found a channel to hang up, "FAILURE" otherwise<br>
<br>
        * PREEMPTED_CHANNEL: the name of the channel that was hanged up in case of success, empty otherwise<br>
<br>
By the way, would this feature have a chance to be merged upstream ?<br>
<br>
Regards<span class="HOEnZb"><font color="#888888"><br>
<br>
Jean Aunis<br>
<br>
<br>
-- <br>
______________________________<wbr>______________________________<wbr>_________<br>
-- Bandwidth and Colocation Provided by <a href="http://www.api-digital.com" rel="noreferrer" target="_blank">http://www.api-digital.com</a> --<br>
<br>
asterisk-dev mailing list<br>
To UNSUBSCRIBE or update options visit:<br>
  <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev" rel="noreferrer" target="_blank">http://lists.digium.com/mailma<wbr>n/listinfo/asterisk-dev</a></font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">James </div></div>
</div>