Hello everyone.
All extensions have call waiting enabled, and when the line is busy, the caller doesn’t know it’s busy. How can I implement a voice notification about a busy line, or at least music on hold?
music on hold is your easiest bet. you only need to upload some tracks. Set up the MoH queue of tracks. the assign that queue to the system. not sure how detailed you wish to get.
Is it possible to notify about a busy line without using queues?
There needs to be an understanding of how concepts like Call Waiting and Busy states are handled in FreePBX/Asterisk.
First, Call Waiting. This is a concept, not a built-in feature of Asterisk. The implementation of Call Waiting is done by the designer of the system using Asterisk (in this case FreePBX). In this case (FreePBX) it’s just an internal database value. It is has a value ENABLED or it’s empty.
Second, Extension/Device States. This is built-in to Asterisk. Extension states are controlled by Device States. There are tech based states, such as for chan_pjsip and there’s custom devices such as the DND state.
Third, User Device (phone). Once the call is sent to the actual phone, the response from the phone plays into things.
Fourth, User update. The calling user won’t know if the phone busy (or not even) until a response is sent back to the calling user.
Overall concept is as follows:
- Call is sent to an extension destination in the dialplan
- FreePBX looks for the CW status of the extension
- CW State = ENABLED - FreePBX then checks the Extension State, if the state is “NOT_INUSE” then there are no active calls, if it’s another state showing call activity (BUSY, RINGING, RINGING_INUSE, etc) then “call waiting” happens.
- CW State = none - If there is no CW entry and “call waiting” is triggered, the call will be routed based on the settings of the extension, i.e. going to voicemail.
So there will be two places that this would need to be checked. At the PBX level because it may never make it to the phone. Then the response of the phone if the call is set to it. Also, in order to apply Music on Hold you would actually need to hold the call in some form but at that point the system just won’t “unhold” the call because the phone is no longer busy.
But also there is the Unavailable and Busy greetings that can be recorded by the users. If a call/response indicates a BUSY state in some form, FreePBX by default sends the caller to voicemail flagging the use of the BUSY greeting.
So really if you just want the calling party to know when it hits voicemail that the user was truly busy, make sure your users record their Busy Greeting properly. If there’s no voicemail and the call has no other place to go, it will be hungup with a Busy response which will trigger Busy tones to the calling user.
I’m using Yealink T31G phones. The busy status is only triggered by pressing “Reject Call” when a second line appears, and then everything works as described in the phone’s internal settings. Advanced → Optional Destinations
So then what notification are you trying to do? A recording that plays back they are busy? Or just busy tones will be enough?
You can put a limit on calls under the Advanced settings of an extension with Device State Busy at. If you set that value to 3, for example, once that endpoint has 3 active calls associated with it (inbound or outbound) it changes to the device state to BUSY. So when a call waiting check is done, it would result in a BUSY response and handle the call properly (busy greeting for voicemail, hangup with busy tones, bust forward or busy alt destination)
Couple questions. A) notify who, the caller or the person on the phone? What exactly are you trying to have happen? Why do you not want to use a queue?
Queues are not exactly what I need, let me remind you that the Call Waiting function is enabled, when this function is running, the subscriber who is on the second line hears the usual beeps and does not understand that the line is busy, it is required that there be a notification or resetting to a message about a busy line by voice mail.
When this function is disabled, the busy line message works correctly, but then the caller who was called does not see the missed call.
Let me remind you that if you don’t follow what I said previously, the endpoint will never be considered busy. It will be in an INUSE state but that doesn’t make it BUSY. With Call Waiting on at that point the system considers it a “unavailable” status. Also, as I pointed out if the system finds the endpoint is actually BUSY it will never make it to the callee’s phone.
So if you want the system to make the endpoint busy at a certain point you need to change this:
![]()
As long as it is 0 it’s never busy, even if you have 3 active calls on the phone going the system will never see it as busy.
So figure out how many calls you want to use to have before being busy, 2-3 is a good start and that solves the issue. You want your users to know when they missed a call at the system level, go enable and use Missed Call Notifications module.
I’m sorry if my previous messages sounded rude. I used your “Device State Busy at” suggestion, but nothing has changed when calling a subscriber. I stay on the second line, and I don’t know that the line is busy.
What does this mean? Why won’t you provide some actual detailed information on what you are doing. What steps are you taking? Give us actual details.
The call waiting function is enabled.
“Subscriber A” is talking to “Subscriber B”.
“Subscriber C” makes a call to “Subscriber A”.
“Subscriber A” sees on the phone that “Subscriber C” is calling him but cannot answer him.
“Subscriber C” hears the standard beeps and thinks that “Subscriber A” is ignoring him, not that he is busy.
To avoid this, I wanted to add a standard message for “Subscriber C” so that he would know about the busy line.
OK now show where you set the Device Busy State to 1, a screenshot will work. Then show a verbose call log where the BUSY should be returned but it’s not.
I mean if what you want is “Caller gets busy tone if user is on phone” then you need to disable voicemail and turn off call waiting. The caller will get a busy tone. The user will never see the call but the caller will get a busy tone and know the user isn’t ignoring them.
In the logs, I don’t see the busy status being set at all when making a call with call waiting enabled.
When you turn off voicemail and call waiting, everything works as it should, but then there is no notification of a missed call.
Unless you go into the phone and configure the max calls per line and limit the phone to 1 line appearance, the phone will never return a busy so by sending the call to the phone, it’s going to do Call Waiting at the phone level.
In a “traditional” phone system, if the user is busy the call doesn’t go to their phone the system already knows the line is in use and can’t do call waiting. If CW was enabled and there was an open channel, you’d get the same thing you’re experiencing now. The phone would just ring and not return a busy.
Again, if you want to user to be notified about a missed call you can enable Missed Call Notifications so they will get an email or a notice about it. But if you want to call to appears in the phone’s missed call list then you need to configure the phone properly to return a busy signal.
Busy line behavior in FreePBX can be a bit counterintuitive once call waiting is on. From my experience, you usually need to tweak how the extension handles call limits and busy states rather than relying on defaults. Adjusting call group settings or using custom dialplan logic can force a proper busy notification. It takes some trial and error, but it’s doable without breaking call waiting entirely.
Thank you all for your help, disabling the Call Waiting on the phone helped, then the station began to take on a busy tone from the phone.