How to make an internal call from a call flow

Maxwell1751

SOHO User
Joined
May 25, 2024
Messages
3
Reaction score
1
Hello,

I am working on a call flow where the incoming caller is greeted, prompted for various info, then placed on "hold" (music plays) while an internal call is placed to an agent. If the agent answers, the caller is announced including some of the info that was collected from them. Then the agent needs to press a digit to take the call and be connected with the original caller. If the agent does not answer, or does not accept the call by pressing the digit, the original caller needs to be prompted for a callback number.

I am very comfortable with database setup and querying and C# coding so I have no problem using some more advanced methods as this is definitely a complicated call flow.

From reading various posts on this forum I understand that to make the internal call I need to make a separate project that will do the announcing to the internal agent and wait for the input.

Just to clarify what that means is that I need to use a MakeCall control to make a call from an extension that has this separate dialer project to the internal agent extension, right? And the best way to communicate info to this dialer project seems to be to add a record to a table from the main call flow and read it from the dialer project.

Then, how do I keep the main call flow waiting for the agent to be ready? Do I have it poll a record in the database every few seconds waiting for the dialer project to mark the call as "accepted"?

Finally, how do I actually transfer the original call into the internal call to connect them to the agent?

Thank you!
 
This is not something you will be able to do with a CFD app. You can't merge 2 calls for example. Actually I'm not even sure if this is something you could do with the Call Control API either. Probably the only option would be building a SIP Client to handle this.
 
May I offer a different approach? I admit in advance this is not very elegant, but we are dealing with the limitations of the CFD.

How about have the CFD call a web service that pushes an event to a client application (maybe a web page or desktop application). Have the agent accept the call by pressing a button on the client application. Pressing the button updates a flag somewhere that the CFD can check (perhaps another web API).

In the CFD, you could have a loop (do not forget to "sleep" for a couple of seconds between iterations) that periodically checks for the acceptance. If the call is accepted, then perform a transfer of the existing CFD call to the agent. If after X iterations the call is not accepted, then request the call-back number.

You will have to instruct the agent to carefully pay attention to who is calling. We do not want the agent to inadvertently answer a different call thinking it is the CFD call and then be busy when the CFD transfers the call to the agent.
 
The client application approach unfortunately wouldn't work for us since the agent may not be in front of a computer when being on call.

To overcome the call bridging issue, is there a way to add another SIP client to an existing call? I could perhaps make a simple external SIP client that just bridges 2 calls.
 
@edossantos_sipcall is the developer of the Call Flow Designer. If he says it cannot be done, then it cannot be done. I know the original 3CX Call Control API very well, and I don't recall seeing anything that would allow us to merge with an already existing call. I am just now looking into the new websockets API to see if there is an alternative there, but it would be pretty complicated to integrate that API into the CFD. You would probably have to create a web service front end to that API rather than try and access it directly.

I assume they have a smart phone? Android or IPhone? We could put a client application there. But let's assume that is not an option either. Let us pretend they only have an analog phone....

In this case, you could do a MakeCall between a 2nd CFD application and your agent. The agent either accepts or rejects the call, and it sets the flag and then disconnects the call. Then the first CFD continues as described in my first scenario. Merging the two calls together... well, I suppose you might be able to transfer everyone to a conference call 7000. I have not tried that.
 
I think the conference call might be the solution here! When the agent accepts the call, an unused conference number is assigned and stored in the DB and both calls are transferred to it. I think this might solve that problem!
 

Forum statistics

Threads
111,973
Messages
590,070
Members
164,890
Latest member
James Hacker