Triggering a Conference Call with Internal Participants + External Caller via CFD

Alan Blanchard

Bronze Partner
Advanced Certified
Joined
Mar 22, 2024
Messages
4
Reaction score
1
Hi everyone,

I’m trying to set up a specific scenario using the 3CX Call Flow Designer (CFD), and I’d like to know if it’s possible — and if so, how you would approach it.

Here’s what I’m trying to achieve:
  • When an external call comes in on a specific DID number, I want it to automatically trigger outbound calls to 5 internal 3CX users.
  • All of these participants (the 5 internal users + the external caller) should be joined together in the same conference call.
  • The idea is for the external caller to be automatically added to a conference call with the 5 internal participants, with no manual action required by anyone.
Is this possible to achieve using CFD, or would it require another method (API, scripting, advanced call queue, etc.)?
And if CFD is capable of handling this, do you have any sample call flows or guidance on which components to use (Call Transfer to Conference, MakeCall, etc.)?

Thanks in advance for your help !
 
  • Like
Reactions: PBX128
You can't do this from the CFD. But you can create a standard audio conference from the Web Client > Meet menu, and configure the extensions you want to join. Then route inbound calls to a specific DID to the conference extension, for example 700. The caller will need to enter the conference ID (you will need to send it to them), and then all the extensions should be called.
 
You can't do this from the CFD. But you can create a standard audio conference from the Web Client > Meet menu, and configure the extensions you want to join. Then route inbound calls to a specific DID to the conference extension, for example 700. The caller will need to enter the conference ID (you will need to send it to them), and then all the extensions should be called.

Dear Ernesto,

Thank you for your response. I tried the suggested method with both immediate and scheduled conferences, but the behavior remains the same. The participants are not automatically called when the external person joins the conference.

I have also tried enabling the option "Call participants when the audio conference starts," but this did not resolve the issue.

Do you have any other suggestions or solutions to ensure that the participants are automatically called when the conference begins?

Thank you for your assistance.
 
Another option could be that you route inbound calls to a CFD app, and then from the CFD app you do the following:
1) Using the MakeCall component, you start a call between each extension and the conference extension.
2) Using the Transfer component, you send the caller to the conference as well.
 
Another option could be that you route inbound calls to a CFD app, and then from the CFD app you do the following:
1) Using the MakeCall component, you start a call between each extension and the conference extension.
2) Using the Transfer component, you send the caller to the conference as well.

Thank you for the suggestion.

I’ve already attempted this approach using the 3CX Call Flow Designer (CFD):
- I routed the incoming call to a CFD app.
- Inside the flow, I tried using multiple MakeCall components to connect each internal extension to the conference extension (e.g., 700).
- I then used a Transfer component to send the external caller to the same conference.

However, the problem is the CFD does not allow the MakeCall component to be used in parallel. If I try to run multiple MakeCall components inside a ParallelExecution, the build fails with the error: ❌ "The Make Call component is not allowed parallelly in more than one branch."

I also tried placing the MakeCall components sequentially, but that causes another issue: each call must complete before the next one starts, which introduces an undesirable delay. The conference won’t be properly joined by all participants quickly enough, especially since the first MakeCall waits for the call to be answered or timeout.

This sequential behavior is not suitable for the kind of experience we’re trying to provide which is a near-instantaneous joining of all participants.

If you have any workaround to launch multiple calls concurrently, I’d be happy to try it out.
 
I also tried placing the MakeCall components sequentially, but that causes another issue: each call must complete before the next one starts, which introduces an undesirable delay. The conference won’t be properly joined by all participants quickly enough, especially since the first MakeCall waits for the call to be answered or timeout.
This is because the MakeCall component waits for the call to be connected, you have 2 options:
1) Reduce the Timeout to 1 second. That will just cause that the MakeCall component can move on to the next call, the initiated call will not be cancelled.
2) You can use a C# script to launch all calls at once:
C#:
PhoneSystem.Root.MakeCall("100", "700");
PhoneSystem.Root.MakeCall("101", "700");
PhoneSystem.Root.MakeCall("102", "700");
PhoneSystem.Root.MakeCall("103", "700");
PhoneSystem.Root.MakeCall("104", "700");
 
  • Like
Reactions: Evolute IT
This is because the MakeCall component waits for the call to be connected, you have 2 options:
1) Reduce the Timeout to 1 second. That will just cause that the MakeCall component can move on to the next call, the initiated call will not be cancelled.
2) You can use a C# script to launch all calls at once:
C#:
PhoneSystem.Root.MakeCall("100", "700");
PhoneSystem.Root.MakeCall("101", "700");
PhoneSystem.Root.MakeCall("102", "700");
PhoneSystem.Root.MakeCall("103", "700");
PhoneSystem.Root.MakeCall("104", "700");
Thank you very much for your detailed answer.

I tested option 1 (reducing the MakeCall timeout to 1 second), and it works perfectly for my needs — despite the very slight delay between each call, which is acceptable in this scenario.

Regarding option 2 with the C# script:

This also works great, and it's very useful to have all the calls launched simultaneously.

That said, I was wondering if there's a way to define a timeout or maximum ring duration for each call initiated via PhoneSystem.Root.MakeCall(). It seems that user preferences (like “Forward if unanswered after X seconds”) are not respected when using this method.

Is there a way to enforce such a timeout, or to programmatically define call behavior if the recipient does not answer?

Thanks again for your help this is getting really close to what I need!
 
That said, I was wondering if there's a way to define a timeout or maximum ring duration for each call initiated via PhoneSystem.Root.MakeCall(). It seems that user preferences (like “Forward if unanswered after X seconds”) are not respected when using this method.

Is there a way to enforce such a timeout, or to programmatically define call behavior if the recipient does not answer?
No, this is not possible, the MakeCall component will just start the call, there is no way to specify a timeout. You can use C# code to monitor the call and drop it after some time, but not from a CFD app, you would need a service running in the server to do that.
 
  • Like
Reactions: Evolute IT
I'm trying to find a solution to do something similar - are any of you willing to share a complete/working C# code?
Thanks in advance.
 
I need an abilty where a user can dial an extension (eg **701), it then it conference calls other extensions. ChatGPT gave me this - haven't been able to test yet, but it does compile happily, but suspect the person making the call is missing.

using System;
using TCX.Configuration;

namespace AutoConference
{
class Program
{
static void Main(string[] args)
{
var ps = PhoneSystem.Root;

// conference bridge number (adjust for your PBX)
string conferenceNumber = "700";

// extensions to invite
string[] participants = { "259", "260" };


foreach (string ext in participants)
{
try
{
ps.MakeCall(ext, conferenceNumber);
System.Threading.Thread.Sleep(500); // wait 0.5 seconds

}
catch (Exception ex)
{

}
}

//Console.WriteLine("Done!");
}
}
}
 
That part I havent been able to work out :|
 
This should start an (unplanned) conference call with a PIN entry. The caller who invokes the call script connects two (foreign) extensions to the 3CX conference call number (if it was configured that way). But where does the PIN come from if it's not planned? I hadn't even considered such a scenario.
 
There is an system option to enforce a pin or no pin - is this what you mean?
 
There is an system option to enforce a pin or no pin - is this what you mean?
Not even that.
It says: force organizer to enter a conference PIN.

You can deactivate the option and call the conference extension. Then you'll hear what happens. ;)
 
Hmm - Im hoping Ernesto Dos Santos Afonso can answer...
 
Well, I'm excited to see what (else) is coming. :)
 
Do you mean how it gets you to create a room when you call 700?