# How Many SIP Channels Do You Need? Size SIP Trunks with Erlang B

Source: https://srvscripts.com/guides/how-many-sip-channels/
Updated: 2026-10-03
Publisher: srvScripts (https://srvscripts.com/)

SIP providers sell capacity as channels: the number of calls that can run at the same time. Too few and callers get busy signals in your busiest hour; too many and you pay for lines nobody uses. This guide shows how to size SIP channels from real data: measure the busy hour from your PBX call records, convert it to Erlangs, pick the channel count with Erlang B, then check the bandwidth and set the limit on the PBX.

**Short answer:** Find the busiest hour in your CDR, multiply its calls by the average call length in minutes and divide by 60 to get Erlangs, then use Erlang B at 1% blocking. 6 Erlangs (120 three-minute calls) needs 13 channels; 3 Erlangs needs 8. Our [Erlang calculator](/tools/erlang-calculator/) does the maths and shows bandwidth. Add headroom for growth and calls that hold a channel without talking.

In short: Find the busiest hour in your CDR, multiply its calls by the average call length in minutes and divide by 60 to get Erlangs, then use Erlang B at 1% blocking. 6 Erlangs (120 three-minute calls) needs 13 channels; 3 Erlangs needs 8.

## Concurrent calls, channels and trunks

A channel is one simultaneous call over the trunk, inbound or outbound. Internal calls between extensions do not use trunk channels, but transfers and forwards to mobiles can use two: one leg in and one leg out. Queues and IVRs hold a channel from the moment the caller is answered by the PBX, not when an agent picks up. Count those when you size.

## Measure your busy hour

```
-- busiest hours over the last 30 days, external calls only (FreePBX CDR)
SELECT DATE_FORMAT(calldate, '%Y-%m-%d %H:00') AS hour,
       COUNT(DISTINCT linkedid) AS calls,
       ROUND(SUM(duration)/60) AS minutes
FROM asteriskcdrdb.cdr
WHERE calldate > NOW() - INTERVAL 30 DAY
  AND (dstchannel LIKE 'PJSIP/my-trunk%' OR channel LIKE 'PJSIP/my-trunk%')
GROUP BY hour ORDER BY minutes DESC LIMIT 10;
```

Replace `my-trunk` with your trunk name. `duration` includes ringing time, which also occupies a channel, so it is the right column for sizing. Take a high but typical hour, not a one-off spike, and add expected growth.

## Work out the channels with Erlang B

Erlangs = minutes in the busy hour ÷ 60. Erlang B then gives the channels needed so that only a chosen share of calls finds every channel busy. 1 percent in the busy hour is the usual business target.

| Busy-hour traffic | Example | Channels at 1% blocking |
| --- | --- | --- |
| 1.5 Erlangs | 30 calls × 3 min | 6 |
| 3 Erlangs | 60 calls × 3 min | 8 |
| 6 Erlangs | 120 calls × 3 min | 13 |
| 20 Erlangs | 300 calls × 4 min | 30 |

Larger groups need fewer channels per Erlang, which is why one shared trunk is cheaper than several small ones. Call centres with queues should also run Erlang C for agent numbers; the [Erlang calculator](/tools/erlang-calculator/) does both.

## Bandwidth for those calls

Each G.711 call uses about 87 kbps in each direction on Ethernet (20 ms packets), G.729 about 31 kbps. 13 channels of G.711 need about 1.1 Mbps up and 1.1 Mbps down. Keep voice under roughly half the upload capacity unless QoS is configured, and use the [VoIP bandwidth calculator](/tools/voip-bandwidth-calculator/) for SRTP or VPN overhead.

## Set the limit on the PBX

Set the limit on your side too, so the PBX gives a clean busy or overflow route instead of an error from the provider. In FreePBX, open the trunk and set **Maximum Channels** on the General tab. On plain Asterisk, check the count in the dialplan before dialling:

```
exten => _X.,1,Set(INUSE=${GROUP_COUNT(trunk-out)})
 same => n,GotoIf($[${INUSE} >= 13]?busy)
 same => n,Set(GROUP()=trunk-out)
 same => n,Dial(PJSIP/${EXTEN}@my-trunk,60)
 same => n,Hangup()
 same => n(busy),Busy(5)
```

Watch real usage after the change: `asterisk -rx "core show channels"` during the busy hour, and failed calls with cause 34 (no circuit available) or SIP 503 in the CDR mean you are at the limit.

## SIP channel sizing at a glance

Covers: Concurrent calls, channels and trunks, Measure your busy hour, Work out the channels with Erlang B and Bandwidth for those calls.

Answers: How many SIP channels does a 20-person office need? Does an internal call between extensions use a SIP channel?

**Official documentation:** [ITU-T E.500: traffic intensity](https://www.itu.int/rec/T-REC-E.500), [Asterisk GROUP_COUNT function](https://docs.asterisk.org/).

**Related:** [Erlang calculator](/tools/erlang-calculator/) · [VoIP bandwidth calculator](/tools/voip-bandwidth-calculator/) · [VoIP codec bandwidth](/guides/voip-codec-bandwidth/) · [Migrate a PBX to the cloud](/guides/migrate-pbx-to-cloud/).

## Frequently asked questions

### How many SIP channels does a 20-person office need?

It depends on how much they phone. At a typical 0.1 to 0.2 Erlang per person in the busy hour, 20 people produce 2 to 4 Erlangs, which needs about 7 to 10 channels at 1% blocking. Measure your own CDR before buying.

### Does an internal call between extensions use a SIP channel?

No. Only calls that go over the trunk use channels. A call forwarded or transferred to an outside number uses two: the incoming leg and the outgoing leg.

### What happens when all SIP channels are busy?

The provider rejects the extra call, usually with 503 or 486, and the caller hears busy or is sent to an overflow route. Set a matching limit on the PBX so you control what callers hear.

### Should I buy channels for the absolute peak?

Usually not. Erlang B at 1% blocking already covers a normal busy hour, and the rare extra peak costs a few busy signals rather than paying for idle channels all month.
