• V20: 3CX Re-engineered. Get V20 for increased security, better call management, a new admin console and Windows softphone. Learn More.

Outbound Dialer CRM Integration

Status
Not open for further replies.
I changed the MakeCall around so the call is from: "900" to: TRIM(getNextNumber.ScalarResult)

This cuts the delay down to 2 seconds which is bearable but how do I get the external number in the callflow, previously I used session.ani but this doesn't work now.
 
If you change the order of Origin and Destination, the effect is that the call is being made to the extension 900 first, and when the app receives the call it doesn't have the caller number, because that part of the call is not established yet. That's why in this case it might be better to do it in the other way...

If this makes a difference in the delay you notice, then probably your server is small for your scenario. Usually the Queue Manager should answer the call immediately, but 3 seconds of difference is a lot... Can you check if the CPU consumption or memory usage is high for your server?
 
Hi

I've just done another test and the Memory is at 59% with 1.6GB free and the CPU usage is at 1%, so I can't see that being the issue.

Could I possibly send you the logs and wireshark capture to have a look at for me?
 
We went live with the dialler and it all seems to be working fine, one issue I've notice though is, if a customer doesn't have an answer machine the dialler will just keep ringing and ringing, is there anyway to set a time out?
 
Unfortunately not, there is no way to set a timeout for the call request... Usually the destination will finally send a no answer signal back after a while...
 
Okay, it's not really an issue. At the minute it is just set with 1 dialler, that starts every 2 minutes, if I call is still 'RINGING' when the 2 minutes is up, will it dial again or wait till the first call has gone?
 
Also I increment a counter so a number is called a maximum of 2 times, on the numbers that aren't going to answer machine and are just receiving a no answer signal the counter isn't incrementing because it isn't making it into the CallFlow, do I need to put a counter increment in the 'Error Handler Flow' of the Dialer?
 
Okay, it's not really an issue. At the minute it is just set with 1 dialler, that starts every 2 minutes, if I call is still 'RINGING' when the 2 minutes is up, will it dial again or wait till the first call has gone?
The dialer will make another call if you execute the MakeCall component, no matter if the previous call is still in progress. If that's a problem, you can use a C# script, and using the 3CX Call Control API you can determine if there is another call in progress, and drop it from your script.

Also I increment a counter so a number is called a maximum of 2 times, on the numbers that aren't going to answer machine and are just receiving a no answer signal the counter isn't incrementing because it isn't making it into the CallFlow, do I need to put a counter increment in the 'Error Handler Flow' of the Dialer?
You will not get any error in the Dialer if the call is not answered. So the Error Handler Flow of the dialer will not help you here. In this case you would need to consider that call unanswered after X seconds if you didn't receive any feedback in your callflow.
 
The dialer will make another call if you execute the MakeCall component, no matter if the previous call is still in progress. If that's a problem, you can use a C# script, and using the 3CX Call Control API you can determine if there is another call in progress, and drop it from your script.

It's not an issue was just curious as to whether the next call would be made while a call was still in use.

You will not get any error in the Dialer if the call is not answered. So the Error Handler Flow of the dialer will not help you here. In this case you would need to consider that call unanswered after X seconds if you didn't receive any feedback in your callflow.

I've changed my CFD slightly, I now increase the counter by 1 in the dialer as the call is made instead of after the call has finished.
 
The dialer is up and running and working well, thanks for all the help.

We have noticed one slight issue, a few customers are getting a voicemail so are ringing back, the customer has now been dealt with by an agent. The issue is the dialer doesn't know this, so after it has tried all the numbers it loops back to any unanswered numbers to try again. So some customers are receiving a second call after already speaking to an agent.

What would be the best way for an agent to update the status of a number in the database? Could I setup a CFD on the Accounts queue so if an agent presses a certain key combination at the end of the call it will update the status? Or could I set a CFD in the Accounts queue that queries the database for the number, if it finds it update the status?
 
Hello Philip,

I think that the agent should have a web page or some way to update the database with the information of this customer. This way, when the CFD iterates, it checks the database and knows if it has to call a number or not... That would be the simplest solution in my opinion.

Kind regards.
 
Hi

I've further developed the dallier so it loads in a list of numbers and has 3 options of what message to play, it decides which message to play from the 'ReportName' field in the database, I've used the following Scalar Database Statement:

SELECT SUBSTRING(ReportName, 1, 3) FROM Customers WHERE "Telm | CaseApplicants"='{0}'

So it gets the first 3 letters of the ReportName string, so if its an Accounts call is gets 'Acc', documents required call it gets 'Doc' and so on.

I'm then using an IF statement to play the message, I need an IF statement to say ScalarResult.getMessage equals 'Acc'

Does that make sense? I tried ScalarResult.getMessage == 'Acc' but that didn't work.
 
You need to use a CFD function for that:
EQUAL(YourDatabaseAccessComponentName.ScalarResult,"Acc")

You can use that expression for the "Condition" property of the branch in your "Create a Condition" component.
 
Brilliant that works, I had tried it but turns out I was doing a query instead of a scalar database access.
 
If you use the StatementType=Query then you need to use the CFD functions GET_TABLE_CELL_VALUE to get the actual value...
 
Status
Not open for further replies.

Getting Started - Admin

Latest Posts

Forum statistics

Threads
141,625
Messages
748,896
Members
144,739
Latest member
Ghisl1
Get 3CX - Absolutely Free!

Link up your team and customers Phone System Live Chat Video Conferencing

Hosted or Self-managed. Up to 10 users free forever. No credit card. Try risk free.

3CX
A 3CX Account with that email already exists. You will be redirected to the Customer Portal to sign in or reset your password if you've forgotten it.