[SOLVED] Ring Group with voicemail and busy on busy

Most probably this is a trivial question … sorry in advance, if so.

The behaviour I’d like to have:

  • Inbound call rings multiple telephones (via a ring group)
  • After timeout (ring time) call is answered by voicemail (ring group / no answer => Voicemail)
  • However, if all group members are busy, the caller should immediately get a terminate call/busy

What I tried so far:

  • as desribed above: ring group with ring time and unanswered calls going to voicemail. This will make calls go to voicemail either, if all group members are busy.
  • add voicemail to one of the members of the ring group for unanswered calls only. Obviously, this is completely ignored when the extension is called via a ring group

I assume that either there is some way of distinguishing between busy and non-answered, in ring groups too, which I just did not find, yet, or, there is some way to make an extensions unanswered configuration also being respected when called via a ring group. Am I missing something obvious?

Kind regards,
Tom

Use a queue, enable skip busy and leave on empty.

Thank you for the hint. As far as I understand, there is no way to have a queue not pickup the call immediately. So this solution is at the cost of angry callers paying for ring tones (or music)? Sorry, a little frustrated, no offense intended.

I tried using an extension with follow-me, with no success so far.

Can you please explain what you mean?

I’m not sure I understand your Use Case. Let me throw in another recommendation for using a Queue instead of a Ring Group:

  • If you have call being answered by the Ring Group (all phones are ringing), an incoming call will fail. You imply that this is a customer service number, so why would you want your calls to ever fail, or worse yet, go to Voicemail? A Ring Group will answer one inbound call at a time and send everyone else either to VM or busy/hang up. That doesn’t sound customer friendly to me. If you switch to a queue, the phones will ring (just like a ring group) but your callers will be handled rather than just getting dumped.

A Queue can be configured to work “almost” like a Ring Group, except that it will be much more configurable and handle more than one inbound call at a time. From your description of what you want to happen, I’m having trouble understanding why you would want to use a technology that is going to lose you customers and cost you money.

Can you please explain what you mean?

When calling a queue, the queue picks up the call, plays some MoH while ringing extensions in order to get someone to answer the call. Thus, the caller immediately sees his call answered, is charged for the call and there is still no guarantee that he gets to a person.

A ring group or extension however does only pick up the call as soon as there is a person answering the phone. The caller is signaled “answered” and immediately talks to a person (or the mailbox).

It’s actually what you expect as normal behaviour …

I’m not sure I understand your Use Case.

Actually it is quite simple. I just want “normal” behaviour without the caller being hit by the fact that when calling a number, multiple phones will ring. Thus, if no one is available, I want this to be signaled to the caller immediately via a terminate/busy, as 99.99% of the phones will do. And, if the call is not answered within a time, I want the caller to be forwarded to a mailbox. And, if the caller is not willing to wait that long (e.g. because he is knowing that there is a mailbox and he does not want to leave a message, anyway), he just hangs up.

That doesn’t sound customer friendly to me.

No call center, just a phone line with a number of telephones behind it. I attempt it to behave like “normal”.

Actually, when it comes to the notion “customer friendly”, people tend to have different opinions.

so why would you want your calls to ever fail,

If whoever who answers the phone is busy with another call, I wish the caller to be signaled “busy”. That’s what the busy signalling is meant for. People hate waiting in queues for hours, don’t you think?

or worse yet, go to Voicemail?

If no one is there that would answer the call, why whould you hold him in a queue until he gives up rather than at least give him a chance to leave a message, if he wishes so?

Asterisk is a Back to Back User Agent, so I’m not convinced your analysis is always correct. I’m pretty sure the call is marked as “answered” in most cases as soon as your Asterisk server picks up the call.

Sure - but that’s the beauty of using a queue. If there is no one to take the call, you can send the queue immediately to voicemail. If someone is available, the call will ring on their phone. If, after (say) 30 seconds and no one has answered the call, it will get dropped to Voice Mail, or sent to “Terminate Call - Busy” or any other destination. That’s my point about the configurability of the queue.

You wouldn’t - it’s not a ring group. A ring group can handle a single inbound call. If the call is ringing, no one else can contact your number. The fail over destination should then be exercised, which means the call should be answered in any case.

All of your concerns are configuration items in a queue. Every call gets answered, even if you have someone calling in while the Ring Group is ringing all of the phones in your group are ringing. The standard queue is a powerful tool that can handle every one of your concerns with simplicity. If there are features that want over and above the ones in the standard queue module, there is an Advanced Queues commercial module that has even more features.

You are asking for Ring Groups to do something that they don’t do. You can either explore the possibilities of using Queues or you can pine for a solution that doesn’t exist. You don’t have to accept any help at all and are certainly free to figure this out on your own if that’s really what you want to do. Sorry I couldn’t help you.

I will have to disagree with that, a ring group is only constrained as to concurrent calls by the method of ingress that was used.

Which is not a solution for my problem due to the mentioned issues with queueing.

Ok, so the point is that there is no solution. The best matching option is to only use extensions in such a case and being unable to ring multiple extensions.

I am ready to accept any solution - but as you just told me, there is no solution for my problem. Which is valuable information, too.

Your “solution” is to suggesting me that I should change my requirements so that they fit your personally prefered way of handling things.

This is untrue. See the myriads of users asking for how to configure a ring group in a way it is signalling “busy” to a caller if there is already a call in progress. As dicko mentioned: it is a question of your ingress - if mutliple channels are available, multiple calls can be accepted.

I think this I could do this with some custom dialplan. Have a Custom Destination that references code in extensions_custom.conf. Have the ring group enable ‘skip busy’ and set the destination as the Custom Dest. Then add dialplan that checks for how long the channel has been up and terminates the call, otherwise continue on to the GUI destination to get a voicemail.

That sounds like an interesting approach. Terminate/busy if CDR{duration} is low, advance to voicemail if not - did I get your idea right? Should be a one-liner, I guess.

I’ll give it a try once i remember all those lost memories about extensions.conf and dialplans :slight_smile:

I’ll let you know if it worked.

IIRC CDR duration is only written on channel close, so it will be something else you need to check. Nothing I’ve ever done before, that’s why I added the “think” to my response.

Silly me, of course CDR variables are not set before the end of the call.

Hmh, maybe route to a custom extension, set some custom STARTTIME variable from EPOCH, dial ring group, 2nd custom extension as non answered destination, calculate time difference …

Actually, the first custom extension can already verify if the SIP device(s) are busy using DEVICE_STATE, thus terminate/busy if DEVICE_STATE is busy, otherwise dial ring group, and finally, ring group will advance to voicemail after ring time via the non answered mechanism. This way, the well-known problem if the call should be terminated if all group members are busy or if at least one of the group members is busy, can be handled, too. Well, hard-coded, but then I do not have that many ring groups this must be applied to.

Does this sound feasible?

Ok, my solution (one might call it a workaround) so far (example):

  • Setup a ring group 2021 with members 22,24,25 with ringtime 35 and voice mailbox on “no answer”
  • Create a custom device 2027 dialing Local/2026@from-internal-custom
  • added an extension 2026 to extensions_custom.conf (see below)
  • inbound route going to 2027

extensions_custom:

exten => 2026,1,GotoIf($[ $["${DEVICE_STATE(SIP/24)}"="BUSY"] | $["${DEVICE_STATE(SIP/24)}"="INUSE"] | $["${DEVICE_STATE(SIP/22)}"="BUSY"] | $["${DEVICE_STATE(SIP/22)}"="INUSE"] | $["${DEVICE_STATE(SIP/25)}"="BUSY"] | $["${DEVICE_STATE(SIP/25)}"="INUSE"] ]?app-blackhole,busy,1)
same => n,Dial(Local/2021@from-internal)

The GotoIf terminates with busy if one of the phones is busy (actually, testing for “INUSE” should do the trick and allow us to use ‘&’ in order to terminate/busy only if all phones are busy?), thus for a typical application with one person and multiple phones.

So far this (surprise, surprise) seems to meet the requirements for me.

The call is routed via 2027 to 2026, the GotoIf exits to terminate/busy if the condition is met (thus, we are free to use whatever condition we’d like) and dialing the ring group if not. After ringtime, the GUI “no answer” action is triggered.

I tried to mostly use FreePBX GUI elements, that’s why the routing looks a little complicated.

1 Like

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