Well, this is not really what I want.
Actually, the task is as follows:
- Customer dials in
- System is looking for available (answering and confirming) support team member
- While (2) is in progress, customer listens to background music and periodic announcement
- Once someone is confirming to take the call, the customer is bridged to him
- If no one is able to take the call, the customer is forwarded to the voice mail.
Obvious solution (on the first sight) would be to use Queue and/or AgentQueue, but… None of the provide functionality that I need - escalation.
It means, that I’ve a list of members, and this list should be called in sequence - 1st member, if no answer - try him again, then 2nd member, if no answer - 3rd member and so on. When member is answering, he must actually confirm (by pressing some digit) that he will take the call.
Asterisk’s agent is close solution, but there is no escalation, and I cannot change confirmation digit. And, agents must be logged in - I want to avoid this (I’ve a fixed list of numbers to call).
Currently, I am doing all this using macro in Dial() application: macro is called when called channel is answered, then it dials out the agent, asks him to confirm, etc. Problem of this solution is, that call, originated by Dial() in this macro, is not monitored for hangup etc. - which adds additional delays, and customer is waiting, waiting…
So, basically, the task is to be able to hold someone on the line, while doing something else (probably, calling someone else, announcing to him that something is happening etc), and finally bridging two calls.
And the question, actually, is - can this be done without modifying (adding) source code…