Skip to content

Call Data Model

🏗️ Primary Entities

Calls: Inbound and outbound calls placed or received on a shop’s Steer Phones phone system

Classification: AI-assigned call category, business outcome, and summary

Sentiment: Customer, employee, and overall sentiment with 0–100 scores

🔗 Key Relationships

Many-to-One: Call → Shop (each call belongs to the shop its phone system serves)

Many-to-One: Call → Tenant (each call belongs to one tenant)

Many-to-One: Call → Phone System (the Steer Phones system the call was placed or received on)

Core identification fields linking calls to tenants, shops, and phone systems.

Field NameData TypeDescriptionRequired
STEER_TENANT_IDString (UUID)Unique tenant identifier (parent organization)Yes
STEER_SHOP_IDString (UUID)Shop location identifier the phone system servesYes
STEER_CALL_IDString (UUID)Unique call identifierYes
STEER_PHONE_SYSTEM_IDString (UUID)Steer Phones phone system the call was placed or received onYes
CALL_PHONE_SYSTEM_NAMEStringBusiness name of the phone systemYes

Direction, parties, and how the call ended.

Field NameData TypeDescriptionRequired
CALL_DIRECTIONStringCall direction (inbound, outbound)Yes
CALL_FROM_NUMBERStringNumber that placed the call, in E.164 format. For inbound calls this is the external caller: usually a customer, sometimes a vendor or partnerNo
CALL_TO_NUMBERStringNumber that was called, in E.164 format. For outbound calls this is the external partyNo
CALL_STATUSStringTelephony call status (see enum values)Yes
CALL_OUTCOMEStringCall outcome classification (see enum values)No
CALL_OUTCOME_SOURCEStringSource of the outcome determination (ai or manual)No
CALL_ANSWERED_BY_EXTENSION_NUMBERStringNumber of the extension that answered the call (e.g., 101)No
CALL_ANSWERED_BY_EXTENSION_NAMEStringName of the extension that answered the callNo

AI-assigned purpose, business outcome, and conversion of the call.

Field NameData TypeDescriptionRequired
CALL_CATEGORY_CODEStringPrimary call purpose classification code (e.g., APPOINTMENT_BOOKING)No
CALL_OUTCOME_CODEStringBusiness outcome code from the category’s options (e.g., APPT_BOOKED)No
CALL_CLASSIFICATION_SUMMARYStringBrief AI-generated summary of the callNo
CALL_IS_CONVERTEDBooleanWhether the call resulted in a conversion (null = not determined)No
CALL_CONVERSION_VALUENumberMonetary value of the conversion (null = no value tracked)No
CALL_IS_EMERGENCYBooleanWhether the call was to an emergency number (911, 933)No

Sentiment labels with scores snapshotted at classification time (0–100, higher is more positive).

Field NameData TypeDescriptionRequired
CALL_CUSTOMER_SENTIMENT_CODEStringCustomer mood classification (see enum values)No
CALL_CUSTOMER_SENTIMENT_SCORENumberCustomer sentiment score (0–100)No
CALL_EMPLOYEE_SENTIMENT_CODEStringEmployee demeanor classification (see enum values)No
CALL_EMPLOYEE_SENTIMENT_SCORENumberEmployee sentiment score (0–100)No
CALL_OVERALL_SENTIMENT_CODEStringOverall call tone classification (see enum values)No
CALL_OVERALL_SENTIMENT_SCORENumberOverall sentiment score (0–100)No
CALL_SENTIMENT_SOURCEStringSource of the sentiment classification (ai or manual)No

Call timing in both UTC and the phone system’s local timezone.

Field NameData TypeDescriptionRequired
CALL_STARTED_ATTimestampWhen the call started ringing (UTC)Yes
CALL_ENDED_ATTimestampWhen the call ended (UTC)No
CALL_STARTED_AT_LOCALTimestampWhen the call started ringing (phone system’s local timezone)Yes
CALL_ENDED_AT_LOCALTimestampWhen the call ended (phone system’s local timezone)No
CALL_DURATION_SECONDSNumberCall duration in seconds (null = call not yet completed)No
CALL_RECORDING_DURATION_SECONDSNumberRecording duration in secondsNo

Record lifecycle tracking.

Field NameData TypeDescriptionRequired
STEER_CREATED_ATTimestampRecord creation timestamp in SteerYes
STEER_UPDATED_ATTimestampRecord last update timestamp in SteerYes

Telephony status of the call:

  • completed: The call connected and ended normally
  • canceled: The call was hung up before it was answered
  • no-answer: The call rang without being answered
  • busy: The called party was busy
  • failed: The call could not be completed
  • ringing / in-progress: The call had not finished when the record was exported

One record from a call export file:

{
"STEER_TENANT_ID": "ce96b905-5647-4901-8a83-8e7dbca90418",
"STEER_SHOP_ID": "2dc598c3-1e9e-408e-82df-b8d7acff380b",
"STEER_CALL_ID": "7b1e4f0a-9c2d-4e8b-a1f3-5d6c7e8f9a0b",
"STEER_PHONE_SYSTEM_ID": "3f2a1b0c-8d7e-4f6a-9b5c-4d3e2f1a0b9c",
"CALL_PHONE_SYSTEM_NAME": "Main Street Auto Care",
"CALL_DIRECTION": "inbound",
"CALL_FROM_NUMBER": "+15555550123",
"CALL_TO_NUMBER": "+15555550100",
"CALL_STATUS": "completed",
"CALL_OUTCOME": "answered",
"CALL_OUTCOME_SOURCE": "ai",
"CALL_ANSWERED_BY_EXTENSION_NUMBER": "101",
"CALL_ANSWERED_BY_EXTENSION_NAME": "Front Desk",
"CALL_CATEGORY_CODE": "APPOINTMENT_BOOKING",
"CALL_OUTCOME_CODE": "APPT_BOOKED",
"CALL_CLASSIFICATION_SUMMARY": "The caller booked an oil change for tomorrow morning and confirmed the drop-off time.",
"CALL_IS_CONVERTED": true,
"CALL_IS_EMERGENCY": false,
"CALL_CUSTOMER_SENTIMENT_CODE": "SATISFIED",
"CALL_CUSTOMER_SENTIMENT_SCORE": 80,
"CALL_EMPLOYEE_SENTIMENT_CODE": "HELPFUL",
"CALL_EMPLOYEE_SENTIMENT_SCORE": 90,
"CALL_OVERALL_SENTIMENT_CODE": "POSITIVE",
"CALL_OVERALL_SENTIMENT_SCORE": 75,
"CALL_SENTIMENT_SOURCE": "ai",
"CALL_STARTED_AT": "2026-10-19 14:02:11.000",
"CALL_ENDED_AT": "2026-10-19 14:05:17.000",
"CALL_STARTED_AT_LOCAL": "2026-10-19 10:02:11.000",
"CALL_ENDED_AT_LOCAL": "2026-10-19 10:05:17.000",
"CALL_DURATION_SECONDS": 186,
"CALL_RECORDING_DURATION_SECONDS": 184,
"STEER_CREATED_AT": "2026-10-19 14:02:11.000",
"STEER_UPDATED_AT": "2026-10-19 14:06:02.000"
}