FleetWorks’ track-and-trace system automates check calls to carriers, collecting location data, arrival times, and delivery information to improve operational efficiency and provide real-time visibility across your supply chain.


How It Works

Track-and-trace calls follow a simple lifecycle:

  1. Appointment Scheduling: Based on a load’s next check times, the system schedules check calls. Alternatively, a call can be triggered or scheduled via API call.
  2. Outbound Call: An AI-powered call is made to the carrier or driver at the scheduled time.
  3. Information Collection: The system collects key data points like current location, ETA, and check-in/out times.
  4. Data Delivery: Information is stored and can be sent to your TMS.
  5. Smart Escalation: Calls are automatically transferred to your staff when needed (late drivers, temperature issues, etc.).

Pickup vs. Delivery Calls

The system supports both pickup and delivery tracking:

Pickup Tracking Calls

  • Focus on confirming driver is on route to pickup location
  • Ask about current location and ETA to the pickup
  • After pickup, verify loaded and unloaded times
  • For reefer loads, confirm temperature settings

Delivery Tracking Calls

  • Focus on delivery status and completion
  • Ask about current location and ETA to delivery
  • After delivery, verify unload time
  • Check for clean BOL or issues
  • For reefer loads, verify temperatures maintained

Multilingual Support

The system provides seamless support for both English and Spanish-speaking drivers:

  1. The system picks up the driver’s language
  2. The conversation continues in the driver’s preferred language
  3. All data collection and escalation logic works identically regardless of language
  4. Logged data is always in English

Smart Escalation

Calls are automatically transferred to your team when human assistance is needed:

  • Driver is running late to an appointment
  • Temperature discrepancies on reefer loads
  • Bill of Lading (BOL) issues or exceptions
  • Any situation requiring human judgment

Data Collected

Track-and-trace calls can collect a variety of information:

  • Current location of the driver
  • Estimated arrival time at next stop
  • Check-in and check-out times
  • BOL status (clean or with exceptions)
  • Reefer temperature for temperature-controlled loads

All collected data is accessible via end of call webhooks and also viewable in the FleetWorks dashboard.

Example shape of data collected:

{
    "eta": string | null,
    "summary": string,
    "bol_clean": boolean | null,
    "lumper_fees": number | null,
    "reefer_temp": number | null,
    "check_in_time": string | null,
    "check_out_time": string | null,
    "current_location": string | null,
    "escalated_reason": string | null,
    "on_time_for_next_stop": boolean | null
}

This depends on what kind of questions were asked during the call- fields will be null if the question was not asked.


Example Conversation

ASSISTANT: Hi, this is FleetWorks Logistics, calling about your load going to Lodi, California.

DRIVER: Hey.

ASSISTANT: Hey, are you still on your way to Mendota, California?

DRIVER: I'm I'm, uh, just passed Cromir. Don't you guys have me macro point?

ASSISTANT: Just manually verifying while I have you here. Cromir, California?

DRIVER: Yes sir.

ASSISTANT: Gotcha, Cromir, California. Let me log that. Cool, so your about 9 minutes away from Mendota?

DRIVER: No I did check-in already. At 11 PM.

ASSISTANT: You said 11 PM Pacific, right?

DRIVER: Yea. What was my appointment window starting?

ASSISTANT: Appointment window starts at 10 pm. Let me put in 11 pm for you, one sec. And have you loaded yet at Mendota?

DRIVER: Hang on.

ASSISTANT: Sure thing, take your time.

DRIVER: Yeah. I loaded I'm already on my way to Lodi.

ASSISTANT: Awesome, and what time did ya finish loading?

DRIVER: About 5 minutes ago.

ASSISTANT: That would be around 11:25 PM, right?

DRIVER: Something like that, sure.

ASSISTANT: Alright, uh. Let me put that in. Everything looks good. Are ya on track to make it to the next dropoff?

DRIVER: Yep.

ASSISTANT: And what's your reefer temp set at right now?

DRIVER: Set a 34 I think, but let me double check.

ASSISTANT: Alright.

DRIVER: Yeah. 34.

ASSISTANT: Great, let me put that in. Sorry, did you say 34 degrees?

DRIVER: No. No, sorry. 24.

ASSISTANT: Gotcha, let me update that real quick. Perfect, thanks for confirming that. Everything's all set on my end. Thanks for the update! Drive safe!

DRIVER: Okay.

Triggering Track & Trace Calls

Track & trace calls can be initiated by either campaigns or using the API.

API-Based Triggers

You can trigger a track & trace call using the API endpoint. The request body must match the following schema:

{
  "phone_number": "+19876543210",  // Required: E.164 format
  "call_type": "pickup",             // Required: "pickup" or "dropoff"
  "load_number": "L12345",          // Required: Your load reference
  "next_stop_city": "Chicago",      // Required
  "next_stop_state": "IL",          // Required
  "next_stop_appt_start": "2025-01-01T01:00:00Z",  // Required: ISO 8601 format
  "next_stop_appt_end": "2025-01-01T06:00:00Z",    // Required: ISO 8601 format
  "load_stops": [                   // Required: Minimum 2 stops
    {
      "type": "pickup",             // "pickup" or "dropoff"
      "address": {
        "city": "Chicago",
        "state": "IL",
        "country": "US",            // Optional
        "zip": "60601",             // Optional
        "timezone": "America/Chicago" // Optional
      },
      "windowStart": "2025-01-01T01:00:00Z",
      "windowEnd": "2025-01-01T06:00:00Z"     // Can be null
    },
    {
      "type": "dropoff",
      "address": {
        "city": "Los Angeles",
        "state": "CA"
      },
      "windowStart": "2025-01-02T08:00:00Z",
      "windowEnd": null
    }
  ],
  "reefer_temp": "34",              // Optional: Can be string or number
  "waiting_at_facility": false,     // Optional
  "tracking_operator_phone": "+15559876543"  // Optional
}

Read more on how to trigger a track & trace call using the API.

Campaign-Based

Create a campaigns using the Track and Trace Check Call agent. Upload a CSV file with your load data to run multiple calls at once. The system automatically runs the track and trace calls and emails you a summary of the results when complete.

CSV Format

A sample CSV file can be downloaded from the Campaigns page of the Fleetworks dashboard. Your CSV should include the following columns:

Required Columns:

ColumnDescriptionExample
phone_numberDriver/carrier phone number in E.164 format+19876543210
call_typeEither “pickup” or “dropoff”pickup
load_numberYour load reference numberL12345
next_stop_cityCity of the next stopChicago
next_stop_stateState of the next stopIL
next_stop_appt_startAppointment window start time (ISO 8601)2025-01-01T01:00:00Z
next_stop_appt_endAppointment window end time (ISO 8601)2025-01-01T06:00:00Z
load_stopsJSON array of load stops (minimum 2 stops)See example below

Optional Columns:

ColumnDescriptionExample
reefer_tempTarget trailer temperature34
waiting_at_facilityWhether driver is already at facilitytrue
tracking_operator_phonePhone number for escalations+15559876543

Load Stops Format

The load_stops column should contain a JSON array with the following structure for each stop:

[
  {
    "type": "pickup",
    "address": {
      "city": "Chicago",
      "state": "IL",
      "country": "US",     // Optional
      "zip": "60601",      // Optional
      "timezone": "America/Chicago"  // Optional
    },
    "windowStart": "2025-01-01T01:00:00Z",
    "windowEnd": "2025-01-01T06:00:00Z"  // Can be null
  },
  {
    "type": "dropoff",
    "address": {
      "city": "Los Angeles",
      "state": "CA"
    },
    "windowStart": "2025-01-02T08:00:00Z",
    "windowEnd": null
  }
]

Example CSV Row

phone_number,call_type,reefer_temp,waiting_at_facility,next_stop_appt_start,next_stop_appt_end,next_stop_city,next_stop_state,tracking_operator_phone,load_number,load_stops
+19876543210,pickup,,,2025-06-17T08:00:00Z,2025-06-17T12:00:00Z,Los Angeles,CA,,LOAD123456,"[{""type"":""pickup"",""address"":{""city"":""Los Angeles"",""state"":""CA""},""windowStart"":""2025-06-17T08:00:00Z"",""windowEnd"":""2025-06-17T12:00:00Z""},{""type"":""dropoff"",""address"":{""city"":""Phoenix"",""state"":""AZ""},""windowStart"":""2025-06-18T10:00:00Z"",""windowEnd"":""2025-06-18T14:00:00Z""}]"
+19876543210,PICK,28,true,2025-06-16T09:00:00Z,2025-06-16T13:00:00Z,Chicago,IL,+19876543210,12345678,"[{""type"":""pickup"",""address"":{""city"":""San Francisco"",""state"":""CA""},""windowStart"":""2025-06-15T07:00:00Z"",""windowEnd"":""2025-06-15T11:00:00Z""},{""type"":""dropoff"",""address"":{""city"":""Denver"",""state"":""CO""},""windowStart"":""2025-06-16T12:00:00Z"",""windowEnd"":""2025-06-16T16:00:00Z""},{""type"":""dropoff"",""address"":{""city"":""Houston"",""state"":""TX""},""windowStart"":""2025-06-17T09:00:00Z"",""windowEnd"":""2025-06-17T13:00:00Z""}]"

Note: In CSV format, JSON strings must have their quotes escaped by doubling them (e.g., "" instead of ").