Voice app for after hours calls to external numbers

Discussion in 'Call Flow Designer' started by transformyx, Sep 27, 2017.

Thread Status:
Not open for further replies.
  1. transformyx

    Joined:
    Sep 3, 2015
    Messages:
    6
    Likes Received:
    4
    A customer is requesting from the phone system to be able to receive phone calls to cell phones for after hours. Sometimes they are in areas with bad cellular data/wifi so they cant use 3CX app. I tried with "ring my mobile simultaneously" but the problem is if somebody's phone is turned of it goes to personal voice mail immediately.
    So the desired call flow and functionality are:

    Client calls in
    Caller hears a prompt saying something like please wait while I find an agent and then music
    the voice app calls a phone number (cell phone)
    agent answers the call and gets prompted "Please press 2 to accept the call"
    agent presses 2
    call to the agent ends
    client is transferred to the agent (agent receives a second call from the client)


    Regards,
    Angel
     
  2. edossantos

    edossantos Support Team
    Staff Member 3CX Support

    Joined:
    Jun 27, 2007
    Messages:
    1,080
    Likes Received:
    77
    Hi Angel,

    You need 2 CFD projects for this, each one containing a callflow. Let's name them "Callflow1" and "Callflow2". Then:
    - The client calls in and is connected to the app "Callflow1".
    - Callflow1 plays a prompt saying something like "Please wait while I find an agent".
    - Callflow1 uses a MakeCall component to make a call. This component needs to be configured with the external agent phone number in the "From" field, and the extension of "Callflow2" in the "To" field. This way, a new call will be established between the agent and "Callflow2".
    - Callflow1 uses a Loop component to start looping. Here we need to wait for Callflow2 to finish the job. So we can play a short music track, for example 30 seconds, and then check a database to see if Callflow2 finished or not. We continue looping until Callflow2 finishes. And every time after checking the database we play the 30 seconds music track. The caller will feel like the music is repeating...
    - Callflow2 receives the call from the external agent. It asks if he's willing to take the call. If the agent presses 2, then Callflow2 saves this information in a database (agent XXXX accepted the call). If the agent doesn't accept the call you can save something different in the database. Finally this second call ends.
    - Callflow1 at some point while checking the database, will see a result from Callflow2. Or here we also need to consider a timeout, maybe if Callflow2 didn't give a response after 1 minute we can consider it a failure and we move to the next agent... So after the timeout or having a response from Callflow2, we decide if we need to try with some other agent, or we transfer the call to this agent.

    Basically that's how you need to do it.

    If you need additional help or have questions regarding a particular step, let me know and we'll go deeper there.

    Kind regards.
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  3. transformyx

    Joined:
    Sep 3, 2015
    Messages:
    6
    Likes Received:
    4
    Hi Ernesto,

    Thank you for the fast response.
    I will need more help.
    Can you use the 3CX server for a database or do you have to run a separate server for a database?
    How do you set up the looping condition to check that database?
    "Callflow2 receives the call from the external agent." I dont understand how this works. When CF1 makes a call using From agent cell phone number to CF2 extension (which is a queue in 3cx I assume), how will that dial the cell phone number of the agent?

    Can you provide just a graphical representation of the building blocks for both call flows?

    Thanks,
    Angel
     
  4. edossantos

    edossantos Support Team
    Staff Member 3CX Support

    Joined:
    Jun 27, 2007
    Messages:
    1,080
    Likes Received:
    77
    Answering your questions below:

    This is up to you. We recommend that the 3CX server is used only for 3CX, because it's a real time application and if other process in the server suddently starts consuming CPU, the audio quality might get affected.... But if you're quite sure that your database is going to be used very lightly, then you can install it in the 3CX server, at your own risk...

    I think you can set the Condition to true. That will make the loop continue iterating forever, until the call is dropped by the caller, or you transfer the call to the destination... As you don't need to do anything else after this, setting the Condition to true in this case is the easiest way to go.

    Let's say that the agent cell phone number is 1234567890, and your Callflow2 is registered in 3CX in the queue with extension 810. Then, when Callflow1 uses the Make Call component, setting From=1234567890 and To=810, it instructs 3CX to make that call. Then the 3CX server makes a call to 1234567890, and when it's connected, it makes a second call to 810. When 810 answers, both calls are bound together, and 1234567890 starts talking to 810. From Callflow2 perspective, it's like a normal inbound call from number 1234567890.

    The complete app is quite complex, you need to take different things in consideration, so I simplified the design, but basically for Callflow1 it shold be something like this:
    upload_2017-9-27_17-5-22.png
    Of course there are some checks missing, you need to complete that a lot, but the main idea is that you loop a set of components. Every time you loop, you play some music, check the database, and check the results...

    For Callflow2 it's a bit simpler. You just need to ask if the user accepts or not, and save that in a database...
    upload_2017-9-27_17-7-58.png

    Hope you find the information useful...

    Kind regards.
     
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
Thread Status:
Not open for further replies.