If you haven't found an answer to your question, don't hesitate to get in touch with us and we'll see what we can do to help.

Webhooks

Use webhooks to be notified about events that happen in Call Tracker.


Call Tracker can send webhooks that notify your application anytime an event happens. This is especially useful for building custom reporting solutions that need to receive data on call or message activity.

Setting Up Webhooks

You can register new Webhooks in the company settings to send data to your endpoint. For each webhook, you can subscribe to All Events or select specific events to send to your endpoint. See a list of all events and example event data below.

To set up a webhook target endpoint, you need to define a route on your server for receiving the events, configure webhook settings so Call Tracker knows where to POST events to, verify your endpoint is valid, and acknowledge your endpoint is receiving events successfully.

Important Webhook target endpoints must accept JSON data and respond with a 200 response code. If we do not receive a 200 response, we will retry up to 5 times over a 24 hour period on an exponential back off schedule. If the webhook retry process is unsuccessful, your webhook endpoint will be deactivated.


Events
Below are all Events that can trigger webhooks to send data to your application. The structure of the event data follows our API for each of the different object type that is provided in the "object" key. For example, a webhook for the "call.finished" event will contain all data that is available on the API for the call object at that given point in time. See example data for each event below.
Event
call.received Triggers immediately when a new call is received. Note, the call is in progress at this stage and thus all call data is not available.
{
  "type": "call.received",
  "object": "call"
  "data": {
    "source_referrer": "https://www.google.com/",
    "landing_page": "https://calltracker.io/",
    "caller_zip": "",
    "tracker_id": 1570,
    "tracking_number": "+12702822733",
    "caller_state": "",
    "caller_country": "US",
    "status": "ringing",
    "company_name": "Example Company",
    "caller_city": "",
    "visitor_ip": "24.0.64.93",
    "source_keyword": "(not provided)",
    "company_id": 1000,
    "caller_number": "+18558871739",
    "source_channel": "organic",
    "caller_name": "",
    "timestamp": "2019-03-09T09:09:51.733192Z",
    "tracker_name": "Number Pool",
    "id": 59179,
    "call_duration": 0,
    "pages_visited": [
      "https://calltracker.io/"
    ],
    "recording": null,
    "recording_duration": 0,
    "gclid": "",
    "is_first_time": true
  },
  "timestamp": "2019-03-09T09:09:52.010",
  "webhook": {
    "id": 21,
    "target": "https://example.com/webhook/receiver/"
  },
}
call.finished Triggers when the call is finished.
{
  "type": "call.finished",
  "object": "call",
  "data": {
    "caller_number": "+18558871739",
    "source_referrer": "https://www.google.com/",
    "timestamp": "2019-03-09T04:09:51.733192-05:00",
    "gclid": "",
    "company_id": 1000,
    "caller_state": "",
    "landing_page": "https://calltracker.io/",
    "recording_duration": 186,
    "source_channel": "organic",
    "caller_zip": "",
    "call_duration": 219,
    "company_name": "Example Company",
    "pages_visited": [
      "https://calltracker.io/"
    ],
    "caller_city": "",
    "status": "answered",
    "tracker_id": 1570,
    "tracking_number": "+12702822733",
    "recording": null,
    "caller_country": "US",
    "caller_name": "",
    "source_keyword": "(not provided)",
    "id": 59179,
    "tracker_name": "Number Pool",
    "visitor_ip": "24.0.64.93",
    "is_first_time": true
  },
  "timestamp": "2019-03-09T09:13:31.745",
  "webhook": {
    "target": "https://example.com/webhook/receiver/",
    "id": 21
  }
}
call.recording.available Triggers when a call recording is available for download.
{
  "type": "call.recording.available",
  "object": "call",
  "data": {
    "caller_number": "+18558871739",
    "source_referrer": "https://www.google.com/",
    "timestamp": "2019-03-09T09:09:51.733192Z",
    "gclid": "",
    "company_id": 1000,
    "caller_state": "",
    "landing_page": "https://calltracker.io/",
    "recording_duration": 186,
    "source_channel": "organic",
    "caller_zip": "",
    "call_duration": 219,
    "company_name": "Example Company",
    "pages_visited": [
      "https://calltracker.io/"
    ],
    "caller_city": "",
    "status": "answered",
    "tracker_id": 1570,
    "tracking_number": "+12702822733",
    "recording": "https://d2k1yc19c4o170.cloudfront.net/call_recordings/CAa0d99df2ede69656e55cd40e2ca05.mp3",
    "caller_country": "US",
    "caller_name": "",
    "source_keyword": "(not provided)",
    "id": 59179,
    "tracker_name": "Number Pool",
    "visitor_ip": "24.0.64.93"
  },
  "timestamp": "2019-03-09T09:14:06.146",
  "webhook": {
    "target": "https://example.com/webhook/receiver/",
    "id": 21
  }
}
message.received Triggers when an SMS message is received.
{
  "type": "message.received",
  "object": "message"
  "data": {
    "tracker_name": "Example Tracker",
    "tracker_id": 1081,
    "direction": "incoming",
    "company_id": 1000,
    "body": "Hello! This is an message example",
    "to_number": "+18556000724",
    "from_number": "+18558871739",
    "id": 139,
    "company_name": "Example Company",
    "timestamp": "2019-03-09T07:30:00.942Z"
  },
  "timestamp": "2019-03-09T07:30:01.084",
  "webhook": {
    "id": 21,
    "target": "https://example.com/webhook/receiver/"
  },
}
message.sent Triggers when an SMS message is sent.
{
  "type": "message.sent",
  "object": "message",
  "data": {
    "from_number": "+18556000724",
    "direction": "outgoing",
    "tracker_name": "Billing",
    "id": 140,
    "to_number": "+18558871739",
    "timestamp": "2019-03-10T05:07:02.890Z",
    "body": "Thanks for your message!",
    "tracker_id": 1081,
    "company_id": 1000,
    "company_name": "Call Tracker"
  },
  "timestamp": "2019-03-10T05:07:02.918",
  "webhook": {
    "target": "https://example.com/webhook/receiver/",
    "id": 21
  }
}
tracker.created Triggers when a new tracker is created.
{
  "type": "tracker.created",
  "object": "tracker"
  "data": {
    "campaign_search_from": "",
    "company_id": 1000,
    "recording_message": "This call may be recorded for quality assurance.",
    "tracker_type": "offline",
    "campaign_landing_page": "",
    "number_type": "tollfree",
    "phone_numbers": [
      {
        "number": "+18558871739",
        "status": true
      }
    ],
    "campaign_campaign_parameters": "",
    "campaign_referral": "",
    "number_pool_size": null,
    "name": "Startup Lister",
    "id": 1013,
    "swap_target": "",
    "whisper_enabled": true,
    "destination": "+12703152766",
    "whisper_message": "Call from Startup Lister.",
    "campaign_search_for": "",
    "campaign_source": "",
    "recording_enabled": true,
    "status": true,
    "company_name": "Call Tracker"
  },
  "timestamp": "2019-03-06T09:29:16.093",
  "webhook": {
    "id": 21,
    "target": "https://example.com/webhook/receiver/"
  },
}
tracker.updated Triggers when a new tracker is updated.
{
  "type": "tracker.updated",
  "object": "tracker"
  "data": {
    "campaign_search_from": "",
    "company_id": 1000,
    "recording_message": "This call may be recorded for quality assurance.",
    "tracker_type": "offline",
    "campaign_landing_page": "",
    "number_type": "tollfree",
    "phone_numbers": [
      {
        "number": "+18558871739",
        "status": true
      }
    ],
    "campaign_campaign_parameters": "",
    "campaign_referral": "",
    "number_pool_size": null,
    "name": "Startup Lister",
    "id": 1013,
    "swap_target": "",
    "whisper_enabled": true,
    "destination": "+12703152766",
    "whisper_message": "Call from Startup Lister.",
    "campaign_search_for": "",
    "campaign_source": "",
    "recording_enabled": true,
    "status": true,
    "company_name": "Call Tracker"
  },
  "timestamp": "2019-03-06T09:29:16.093",
  "webhook": {
    "id": 21,
    "target": "https://example.com/webhook/receiver/"
  },
}
usage.created Triggers when a new billing usage has been created.
{
  "type": "usage.created",
  "object": "usage",
  "data": {
    "tollfree_numbers": 3,
    "local_numbers": 10,
    "tollfree_minutes": 234,
    "timestamp": "2019-03-10T05:13:57.573179Z",
    "id": 32,
    "company_id": 1000,
    "local_minutes": 203,
    "start_date": "2019-02-10",
    "sms_messages": 18,
    "company_name": "Example Company",
    "end_date": "2019-03-10"
  },
  "timestamp": "2019-03-10T05:13:57.594",
  "webhook": {
    "target": "https://example.com/webhook/receiver/",
    "id": 19
  }
}
voicemail.received Triggers when a new billing usage has been created.
{
  "data": {
    "call_id": 1000,
    "recording_duration": 14,
    "tracker_id": 1000,
    "tracking_number": "+18886787987",
    "recording": https://example.com/recording/example.wav",
    "caller_number": "+18128787987",
    "tracker_name": "Example Call Flow",
    "id": 3,
    "company_id": 1111,
    "transcription": "Hi, this is an example voicemail transcription. Thanks."
  },
  "webhook": {
    "target": "https://example.com/webhook/receiver/",
    "id": 42
  },
  "timestamp": "2019-05-18T08:09:59.492",
  "type": "voicemail.received",
  "object": "voicemail"
}