NetBorder Call Analyzer Answering Machine Detection - Unknown and Reject CPD's
Overview
Often times the most common issue is that the overall accuracy of NCA is low due to a high number of Unknown and Reject dispositions being returned to the dialer. This page will go over the common pre- and post-connect scenarios that lead to these results.
CPD = Unknown
An "Unknown" result is returned when the call progresses as expected, but is terminated before we are able to confidently assert a disposition. It is possible that this occurse due to excessively high thresholds being configured on the system, however it is much more common for the scenarios listed below to trigger an Unknown disposition.
Pre-Connect - Dialer sends a CANCEL method
There is only one scenario where NCA will return a disposition of Unknown if the it never receives a 200OK for call. This occurs when the Dialer sends a "CANCEL" method indicating that we should abandon the call attempt before we come up with a disposition. As indicated in the User Guide on page 49, if this is occurring on your system you will need to modify your dialer configuration to avert this behavior.
Traditionally Dialers have their own pre-connect timeout settings, to address the issue of "How long should we let the line ring waiting for someone to pickup before we abandon the call attempt and consider it 'Not Answered'?". These timers must be disabled when using NCA because NCA has it's own set of timers that more accurately reflect the actual time of the call. Consider the following timeline:
Both NCA and the Dialer have equal pre-connect timemout settings
The dialer initiates a call
The dialer is improperly configured and still has it's pre-connect timeout settings set
The Dialer's pre-connect timer starts
NCA receives the INVITE and begins processing the request
NCA sends out a new INVITE to the final destination
NCA's pre-connect timer starts
Due to the time it takes for NCA to process the request, this timer is started shortly after the Dialer's
The Dialer's timer expires and a CANCEL method is sent to NCA, causing a result of "Unknown" to be returned
NCA is milliseconds away from it's own timer expiring, which would have properly triggered a "No Answer" disposition to be returned
As a general rule: NCA has it's own timers to handle all scenarios, and as such all timers on the Dialer should be disabled!
Additional Note: NCA will return a "Cancelled" disposition if the "Advanced Results" are enabled.
Post-Connect - Timer Expires
If NCA does receive a 200OK for a specific call, NCA will return an "Unknown" result if our Post Connect timer expires before we hit any of our configured confidence thresholds.
NCA has a non-configurable post-connect timout of 10 seconds. This is not configurable because NCA should never take more than 10 seconds to hit a specific threshold even under worst-case conditions, and as such if this timer does expire it usually indicates that there is an issue on the line that needs to be addressed.
No Audio
More often than not, this issue occurs when there is an issue with the Media Stream (RTP) reaching NCA, and we end up not receiving any audio for the call. When this happens, it usually means that NCA has been introduced behind a NAT unsuccessfully, and more information can be found on that topic here. In the call-logs, you will find the string "10.00 second(s)" just before NCA logs sending the Unknown disposition back to the dialer, and if call-recording is enabled there will be at least 10 seconds of silence at the end of the audio file.
EAMD Issue
The other less common cause is that NCA has identified the call as an Answering Machine, however we have been configured to wait for "End of Greeting", so that the Dialer application can play a file or connect an agent to the callee's voicemail. In this scenario, our "End of Greeting" timer has triggered and is active, but the call is abondoned for some other reason. Due to the extremely specific nature of this issue it is very rarely seen in the field.
CPD = Reject
A Reject disposition is returned when for some reason the call is forcefully torn down before NCA is able to come up with a disposition. Unlike the "Unknown" disposition which is triggered by an internal timer expiring, the "Reject" disposition is returned due to SIP signalling tearing down the call.
Pre-Connect - "Catch All" error result
When NCA sends out an INVITE to the intended destination and the call is not able to go through, we return a CPD-Result header that matches the specific error code. If we receive a 4xx, 5xx, or 6xx in response to our INVITE that is NOT in the list below, we return a 'Reject' disposition as the call was not able to go through and we do not have any more information about it.
List of special results:
SIP Code | CPD Result |
404 "Not Found" | SIT-Vacant |
408 "Request Timeout" | No-Answer |
480 "Temporarily Unavailable" | SIT-Reorder |
486 "Busy Here" | Busy |
600 "Busy Everywhere" | Busy |
Everything Else | Reject |
Pre-Connect - NCA License Limit Reached
NCA is licensed for a number of simultaneous analyses occuring on the system. If you have a license for 10 channels and NCA is already analyzing 10 different RTP streams, NCA will reject the next INVITE with a 603 Decline, as well as return the "Reject" CPD.
Post-Connect - User Hangs Up
If the callee answers the phone, but hangs up before NCA can assert a disposition, NCA will return a "Reject" disposition as the callee has rejected the call. This is what happens when someone picks up the phone and says 'Hello?' but the delay between when they say that and when the agent is connected is so large that they can recognize that this is an "outbound dial" attempt and hangup before you can "try to sell them something".
Out of the box, NCA is geared towards making that gap as small as possible. It usually takes ~0.7 seconds from the time the user starts to say "Hello" to the time NCA correctly identifies the caller as a Human and passes that result back to the Dialer.
Post-Connect Unknown and Reject
It is very important to note that all "Post-Connect" results only occur in a production environment when a person's number is dialed and they actually answer their phone. This means that every Post-Connect "Unknown" or "Reject" result implies that a user picked up the phone but was not actually connected to an agent. THIS IS AN ISSUE THAT MUST BE ADDRESSED!
Every time a person picks up the phone and is not connected to a live agent, this is considered an "Abandoned Call". There are very strict laws about what percentage of calls can be abandoned in an outbound dialing campaign, so it is possible that your technical issue resulting in one-way-audio (Unknown result) actually means you are breaking the law in your country. Make sure that you do real test campaigns and analyze the results before going into full production mode.