Appearance
Cisco Callmanager CDR Events Webhooks
Feature Overview
The CDR (Call Detail Record) Events Webhooks feature allows you to send Cisco Call Accounting data to any JSON API endpoint. You can define triggers for any CDR event, and send the payload to any JSON API. For example, you could trigger on missed calls, duration over 5 minutes, calls to certain numbers like your call center, or send followup call data to your CRM or ticketing system.
Feature Requirements
- Call Telemetry Server Appliance 0.7.0 or higher
- Call Telemetry Premium License
- Cisco Callmanager 10.5 or higher with CDR Integration to Call Telemetry
Create a new CDR Webhook
In this step you will create a new webhook, and define the conditions for triggering the webhook. You can choose any field in the Cisco Callmanager CDR Schema shown.
Follow the steps below to create a new webhook:
Accessing Webhooks: Navigate to the CDR Sidebar within the Cisco Callmanager interface and select the Webhooks from the sidebar.
Creating a New Webhook: Click the Add button to initiate the creation of a new webhook.
Webhook Configuration:
- Name: Provide a descriptive name for the webhook.
- Destination URL: Specify the destination URL where the JSON payload will be sent.
- Triggering Conditions: Define triggering conditions using logical AND operators.
- Meta Data: optional data you enter that you want to include to your API under the meta key.
- Custom Headers: Any other optional headers, like authentication.
Verification and Webhook Statistics
Once you have created a webhook, you can view the webhook hit counts, and last hit. You must be sending CDR data to the Call Telemetry server to see these statistics.
Below is an example of viewing the webhook hit counts:
Customizing the Webhook Payload
The webhook payload will include 3 keys. All keys will be fully rendered as JSON keys. This payload will be uplaoded as a POST to your destination URL.
Payload structure:
- meta: Metadata defined during webhook configuration.
- cdr: Raw CDR payload capturing the triggering event.
- name: Identifier for the webhook.
Example Webhook Payload POST Request
This is an example showing a full example payload of a CDR Webhook sent as part of the webhook trigger.
json
{
"cdr": {
"lastRedirectRedirectReason": "0",
"destPrecedenceLevel": "4",
"destMediaCap_maxFramesPerPacket": "0",
"destNodeId": "1",
"origRoutingReason": "0",
"authorizationLevel": "0",
"destIpAddr": "1048291520",
"origPrecedenceLevel": "4",
"destCause_location": "0",
"globalCallID_callManagerId": "1",
"destVideoCap_Resolution": "0",
"origIpAddr": "1048291520",
"dateTimeOrigination": "2023-11-06T14:57:22Z",
"destMediaCap_Bandwidth": "0",
"origVideoCap_Bandwidth_Channel2": "0",
"origCause_value": "16",
"globalCallId_ClusterID": "StandAloneCluster",
"totalWaitTimeInQueue": "0",
"origMobileCallDuration": "0",
"destRSVPAudioStat": "0",
"destDeviceName": "SEP20BBC020AAAA",
"origMediaCap_payloadCapability": "0",
"origMediaCap_maxFramesPerPacket": "0",
"destVideoTransportAddress_IP": "0",
"destVideoTransportAddress_IP_Channel2": "0",
"destMediaCap_g723BitRate": "0",
"lastRedirectingRoutingReason": "0",
"dateTimeDisconnect": "2023-11-06T14:57:25Z",
"destVideoCap_Bandwidth": "0",
"origLegCallIdentifier": "19111441",
"destConversationId": "0",
"origVideoTransportAddress_IP": "0",
"origCalledPartyRedirectReason": "0",
"origConversationId": "0",
"origRSVPVideoStat": "0",
"destVideoCap_Bandwidth_Channel2": "0",
"destRSVPVideoStat": "0",
"destCallTerminationOnBehalfOf": "0",
"origVideoCap_Resolution_Channel2": "0",
"origVideoCap_Resolution": "0",
"origMediaCap_g723BitRate": "0",
"origVideoTransportAddress_Port": "0",
"origVideoTransportAddress_Port_Channel2": "0",
"destVideoChannel_Role_Channel2": "0",
"origMediaTransportAddress_Port": "0",
"origDeviceName": "SEP20BBC020AAAA",
"calledPartyPatternUsage": "2",
"wasCallQueued": "0",
"origVideoCap_Codec": "0",
"originalCalledPartyNumber": "1000",
"origIpv4v6Addr": "192.168.123.62",
"dateTimeConnect": "Never",
"origCalledPartyRedirectOnBehalfOf": "0",
"destVideoCap_Codec": "0",
"origVideoCap_Codec_Channel2": "0",
"destDTMFMethod": "3",
"globalCallID_callId": "28001",
"origRSVPAudioStat": "0",
"originalCalledPartyPattern": "1000",
"finalCalledPartyNumber": "1000",
"mobileCallType": "0",
"cdrRecordType": "1",
"callSecuredStatus": "0",
"origVideoCap_Bandwidth": "0",
"lastRedirectDn": "1000",
"destVideoCap_Resolution_Channel2": "0",
"origVideoChannel_Role_Channel2": "0",
"destVideoCap_Codec_Channel2": "0",
"lastRedirectRedirectOnBehalfOf": "0",
"currentRoutingReason": "0",
"joinOnBehalfOf": "0",
"pkid": "1a9eef3d-408d-4f7a-8cfe-dbc40eb59f17",
"origVideoTransportAddress_IP_Channel2": "0",
"destMediaTransportAddress_IP": "0",
"origDTMFMethod": "3",
"destVideoTransportAddress_Port_Channel2": "0",
"origNodeId": "1",
"destMediaTransportAddress_Port": "0",
"origSpan": "0",
"destLegIdentifier": "19111442",
"origMediaTransportAddress_IP": "0",
"origCause_location": "0",
"lastRedirectingPartyPattern": "1000",
"callingPartyNumber": "1000",
"origCallTerminationOnBehalfOf": "12",
"finalCalledPartyPattern": "1000",
"destMobileCallDuration": "0",
"destCause_value": "0",
"destVideoTransportAddress_Port": "0",
"destSpan": "0",
"origMediaCap_Bandwidth": "0",
"duration": 0,
"destMediaCap_payloadCapability": "0"
},
"meta": {
"event": "missed call"
},
"name": "Caller ID Webhook"
}