Call Data Record
- Rijnhard Hessel
CDRs are sent after every call, whether or not it was answered/handled. These are used for call accounting both on the providers side as well as in the 3rd party application. As CDRs are critical we make use of a persistent Redis List to send them. A single worker must exist which handles/processes these notifications.
Redis |
//Notification Example brpop enigma:notifications:campaigns { type: "cdr", payload: { extension : <ext>, number : <client_number>, dial_number : <dial_number>, recording_url: <recording_url>, call_ref : <internal_call_ref>, contact_ref : <custom_call_ref>, dialed_at : <dialed_at>, call_time : <call_time>, end_reason : <disposition>, end_code : <ISDN_termination_code>, call_dir : <call_dir>, ref : <campaign_ref> } }
|
---|
Values:
<ext> | The agent extension number |
---|---|
<internal_call_ref> | Internal dialler call reference, this is used to disposition the call and download recordings |
<custom_call_ref> | Your custom call reference specified for this callee (use this for your lookups) |
<disposition> | Dispositions: how the call ended |
<SIP_termination_code> | The SIP termination code |
<campaign_ref> | Your Campaign reference |
<client_number> | The clients number (as opposed to the agent)
|
<dial_number> | The dialers number (as opposed to the callee)
|
Example:
# get cdr's for all campaigns brpop enigma:notifications:campaigns
When will you get a CDR?
You will receive a CDR for each call that the dialer makes, at the end of the call.
If a callee has multiple numbers, it will try the numbers in order and send a CDR for each number it tried to call, if a call is connected then the callee has been contacted and the rest of the numbers won't be called.
Key CDR Indicators
Conditions | Meaning |
---|---|
extension is null | Callee hangup in queue (before being connected to an agent) |
Only one integrator can consume CDR's currently. This is a limitation in how a Redis List was designed, and we use a Redis List here to be reliable. Its an unfortunate limitation that will be fixed in the future but requires a lot of planned features to be implemented first and the completion of a fairly large rearchitecting of the application.