Playing MOH after a delay (timer)


Is it possible in FreePBX to Play Music on Hold (or announcements) after a delay, like if someone doesn’t pick up the Phone after 20 seconds of ringing FreePBX starts an announcement like “Sorry it’s taking longer than usual…”.

Of course. The trick is that it isn’t just playing MOH, you are transitioned to a different state. For example, after 20 seconds, you can specify that you want the caller to go to voice mail, get dropped into a queue, or lots of other things.

Tell us what you want to actually accomplish, and I’m sure we can come up with a dozen ways of doing what you really want to do.


Thanks for your reply, I basically just want the incoming calls to hear the usual ringing for the first 20 seconds and after that play something like an announcement (repeatedly) I have an audio file with some music in it and the actual announcement. I’ve had that functionality in my old PBX, just can’t seem to replicate it in FreePBX.

Couple of choices.

  1. Send the call immediately to a ring group. Starts out with an announcement and rings the phones. If the call gets answered, the MOH stops. The advantage here is the “junk calls” will stop as soon as they realize that an “answering machine” has picked up.
    2a) After 20 seconds ringing on the extension, send the call to a ring group or queue (with MOH) instead of sending the call to voicemail. This way, the call will continue to ring on the agent’s phone (assuming they are the only one in the queue).
    2b) After …, send the call to a parking lot. This gives you the music on hold you want, but doesn’t ring the phone until the parking lot expires, at which point, the call drops back onto the original extension.

The advantage of 2) is that the call goes to an extension first, then goes to the group, but junk callers don’t get the message immediately. The advantage of 1) is that the call gets “answered” immediately and junk callers won’t hang on, but goes to the group no matter who the call is actually for.


I’m already using a ring group, since I have 10 extensions that have to ring so can’t use the 2nd choice, I’ve tried setting the ring time to 20 seconds on the first ring group, and then playing the audio on the second ring group, which works but I get a call missed sign on all of them since when the first ring group stops it stops ringing for a sec. Is there any other way?

Maybe a change in perspective is appropriate. You have 10 extensions in a ring group and they didn’t get to it in 20 seconds - I’d call that a missed call too.

I know it doesn’t solve the problem posted, but I can’t think of a way to do this without changing contexts, which is what generates the missed call UNLESS you write a custom inbound context that uses audio files. An audio of the phone ringing until the call timer (which you’d also have to implement) hit 20 seconds, then change the audio file to music.

Sounds ridiculously convoluted for something that I’m still not convinced is the right way to handle your incoming callers.

Let me say something that probably blew by you a few sentences ago: If the inbound call never rings, most robocallers and telemarketers will hang up, since the call was handled by an answering machine. This is a good thing. Also, when someone calls and immediately gets a voice on the phone, they are likely to hang in there for the rest of the call. In the “new” telephony environment, a ringing phone is a phone that isn’t working or a phone to a business that’s closed.

Note that I’m not saying “drop straight into an IVR”, but going with a queue (instead of a ring group) gives you and your callers a lot of control over the calling experience and gives you a lot of what you’re looking for.

Keep at it, though. I’m sure there’s a way to do it, you just need to figure it out.