Call waiting/music on hold

The Call Waiting feature, when configured in Asterisk or via FreePBX, allows an extension to receive a second parallel call during an ongoing conversation. The main problem with Call Waiting is that when calling a busy subscriber, they hear a standard dial tone on the handset, which creates a false sense of being ignored.
The caller thinks that the called subscriber did not answer the phone due to lunch, a smoke break, inattention, or abduction by aliens.
I saw a lot of threads on this topic, but some are outdated due to a change in the version of FreePBX (I use version FreePBX 15 and Asterisk 16), and some have no answer at all. I ask the experts and gurus of these systems for help in resolving this issue!

I think you mean ringback tone, not dial tone.

Do you force Answer? Note that doing so will likely cause the caller to be billed, which might also be irritating.

If you do not, does your provider support early media? This is unlikely, because it allow certain types of useful call to not be billed. However, unless they allow early media, nothing that Asterisk plays before answer will get through.

Asterisk follows the calls waiting standard of public telephone systems. If someone is on the phone and another call comes, the second caller will hear ringback tone and the called party either sees the call on another key on the phone or hears a calls waiting beep.

There are ways to work around this on a small scale such as having the incoming number go to a ring group or a queue which can answer and play a recording or music on hold while it rings the extension. Since the call is answered by the ring group or queue, the caller will be billed for the call while they wait.

Another option is to disable calls-waiting on the extension so that a second call either receives busy tone or goes directly to the extension’s voice mail.

The question does not apply to callbacks outside the FreePB system. I’m interested in solving the problem using “extension custom” tools like this:
[from-internal-custom]
include => macro-dialout-one-predial-hook

[macro-dialout-one-predial-hook]
exten => s,1,Noop(HINT STATUS - ${EXTENSION_STATE(${DEXTEN})})
exten => s,n,ExecIf($[“${EXTENSION_STATE(${DEXTEN})}” = “INUSE”]?Playback(/var/lib/asterisk/sounds/ru/custom/busytest))
exten => s,n,ExecIf($[“${EXTENSION_STATE(${DEXTEN})}” = “INUSE”]?Set(D_OPTIONS=Ttm))
exten => s,n,ExecIf($[“${EXTENSION_STATE(${DEXTEN})}” = “RINGINUSE”]?Playback(/var/lib/asterisk/sounds/ru/custom/busytest))
exten => s,n,ExecIf($[“${EXTENSION_STATE(${DEXTEN})}” = “RINGINUSE”]?Set(D_OPTIONS=Ttm))

or this:
[from-internal-custom]

;----- Playback Wait for answer in INUSE line -----
[macro-dialout-one-predial-hook]
exten => s,1,Noop(DEVICE STATE - ${DEVICE_STATE(${DSTRING})})
exten => s,n,ExecIf($[“${DEVICE_STATE(${DSTRING})}” = “INUSE”]?Playback(custom/wait_for_answer))
exten => s,n,ExecIf($[“${DEVICE_STATE(${DSTRING})}” = “INUSE”]?Set(D_OPTIONS=Ttm))

(this is an example that refuses to work on my system)

Doesn’t anyone have any ideas?

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.