O'Reilly logo

Asterisk Cookbook by Russell Bryant, Leif Madsen

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 2. Call Control

Introduction

The recipes in this chapter focus on making and controlling phone calls in Asterisk. The rich set of possibilities for controlling calls is part of what makes Asterisk a telephony applications platform and not just another PBX.

Creating Call Limits Using Groups

Problem

You would like to implement custom call limits in the Asterisk dialplan.

Solution

Use the GROUP() and GROUP_COUNT() dialplan functions:

exten => _1NXXNXXXXXX,1,Set(GROUP(outbound)=myprovider)
    same => n,Set(COUNT=${GROUP_COUNT(myprovider@outbound)})
    same => n,NoOp(There are ${COUNT} calls for myprovider.)
    same => n,GotoIf($[${COUNT} > 2]?denied:continue)
    same => n(denied),NoOp(There are too many calls up already.  Hang up.)
    same => n,HangUp()
    same => n(continue),GoSub(callmyprovider,${EXTEN},1})

Discussion

In this example solution, we have shown how you could use the GROUP() and GROUP_COUNT() functions to limit the number of calls sent to a provider to no more than two calls at a time. You can think of using the GROUP() function as a way to apply a marker to a channel. GROUP_COUNT() is the method of getting a count of how many active channels are up with a given mark on them.

The argument provided to the GROUP() function is a category. In our example, the category used is outbound. The first line sets the channel’s outbound group value to myprovider. On the next line, we set the COUNT variable to the number of channels that are marked as being in the myprovider group within the outbound

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required