Skip to main content

Overview

The Call Monitoring dashboard provides real-time visibility into all verification calls made by Highway. Track call status, review verification outcomes, and analyze call history to ensure your identity verification process is running smoothly.

Accessing Call Logs

Navigate to the Verifications Call Logs page to view all calls:
/calls
The call monitoring interface is implemented in highway-frontend/src/app/calls/page.tsx and displays calls in reverse chronological order (newest first).

Real-Time Call Status Tracking

Highway tracks each call through its complete lifecycle with automatic status updates.

Status Flow

1

in_progress

Call is currently active. The AI agent is speaking with the customer.
This status is set immediately when the call is initiated (highway-backend/routes.js:35-44).
2

Status Determination

As the call progresses, the AI agent evaluates customer responses to determine verification outcome.
3

Final Status

When the call ends, the status is updated to one of the completion states:
  • successful_call - Identity verified
  • unsuccessful_call - Identity not verified
  • user_hung_up - Customer ended call early
  • system_error - Technical failure

Status Updates

Status changes are automatically recorded when the AI calls the call_reflection_data function (highway-backend/websocket.js:86-92):
if (response.type === "response.function_call_arguments.done") {
  console.log("arguments", response.arguments);
  supabase
    .from("calls")
    .update({ status: response.arguments.status })
    .eq("id", callId);
}

Call Logs and History

The call monitoring dashboard displays all verification calls with key information.

Data Fetching

From highway-frontend/src/app/calls/page.tsx:40-80:
const fetchData = async () => {
  const supabase = createClient();
  
  // Fetch calls
  const { data: callsData, error: callsError } = await supabase
    .from("calls")
    .select("*")
    .order("created_at", { ascending: false });
    
  // Fetch corresponding verifications
  const verificationIds = [
    ...new Set(callsData?.map((call) => call.verification)),
  ];
  
  const { data: verificationsData, error: verificationsError } =
    await supabase
      .from("verifications")
      .select("*")
      .in("id", verificationIds);
      
  // Create verification lookup map
  const verificationsMap = verificationsData?.reduce(
    (acc, verification) => {
      acc[verification.id] = verification;
      return acc;
    },
    {}
  );
  setVerifications(verificationsMap);
};
Calls are joined with their associated verification records to display customer information alongside call status.

Display Format

Each call is shown in a collapsible card with:
  • Header: Customer name, call ID, and status badge
  • Details: Phone number, timestamp, verification data (expandable)

Status Types

Highway uses five distinct status types to categorize call outcomes.

Status Definitions

IDENTITY VERIFIED
The customer successfully answered the verification questions correctly. Their identity has been confirmed.When this occurs:
  • Customer provided correct answers to verification questions
  • AI agent determined responses matched verification data
  • Call completed normally
Next steps:
  • Proceed with account activation or service provisioning
  • Customer is verified and ready to use your service

Status Badge Colors

From highway-frontend/src/app/calls/page.tsx:86-108:
const getStatusBadge = (status: string) => {
  const statusColors: { [key: string]: string } = {
    user_hung_up: "red",
    system_error: "orange",
    unsuccessful_call: "yellow",
    successful_call: "teal",
    in_progress: "blue",
  };
  
  const statusLabels: { [key: string]: string } = {
    user_hung_up: "USER HUNG UP",
    system_error: "SYSTEM ERROR",
    unsuccessful_call: "IDENTITY NOT VERIFIED",
    successful_call: "IDENTITY VERIFIED",
    in_progress: "IN PROGRESS",
  };
  
  return (
    <Badge color={statusColors[status] || "gray"} size="md">
      {statusLabels[status] || status.replace(/_/g, " ").toUpperCase()}
    </Badge>
  );
};

Viewing Call Details

Click on any call in the list to expand and view detailed information.

Call Summary

Each expanded call shows:

Customer Information

  • Customer name from verification record
  • Phone number called
  • Call ID for reference

Call Metadata

  • Current call status
  • Created timestamp (when call was initiated)
  • Formatted in local timezone

Verification Data Display

From highway-frontend/src/app/calls/page.tsx:171-185:
<div style={{ marginTop: "10px", fontWeight: 800 }}>
  Verification Data:
</div>
<pre
  style={{
    whiteSpace: "pre-wrap",
    wordWrap: "break-word",
    backgroundColor: theme.colors?.dark?.[5],
    padding: "10px",
    borderRadius: "5px",
    marginTop: "5px",
  }}
>
  {JSON.stringify(verification?.data, null, 2)}
</pre>
The verification data section shows the exact JSON data that was used during the verification call, formatted for readability.
{
  "date_of_birth": "1990-01-01",
  "address": "123 Main St, Anytown, USA",
  "last_4_ssn": "1234",
  "mother_maiden_name": "Johnson"
}
This helps you understand:
  • What questions the AI asked
  • What data points were verified
  • Context for successful or unsuccessful outcomes

Call Analytics

Use the call monitoring dashboard to analyze verification performance:

Key Metrics to Track

Calculate the percentage of successful verifications:
Success Rate = (successful_calls / total_completed_calls) × 100
Target: 70-85% success rate is typical for phone verificationLow success rate indicators:
  • Verification questions may be too difficult
  • Data might be outdated or incorrect
  • Questions unclear or ambiguous
Monitor how often customers end calls early:
Hang-Up Rate = (user_hung_up / total_calls) × 100
Target: Below 15% hang-up rateHigh hang-up rate indicators:
  • Call timing may be inconvenient
  • Introduction unclear or alarming
  • Questions feel invasive
  • AI voice or pacing issues
Track technical failures:
Error Rate = (system_errors / total_calls) × 100
Target: Below 5% error rateCommon causes:
  • OpenAI API issues
  • Twilio connectivity problems
  • Server resource constraints
  • Network latency issues

Analysis Examples

SELECT COUNT(*) as successful_count
FROM calls
WHERE status = 'successful_call'
AND created_at >= NOW() - INTERVAL '30 days';

Monitoring Best Practices

  • Check call logs daily during initial deployment
  • Review weekly once system is stable
  • Investigate any unusual status patterns immediately
  • Monitor for clusters of errors or hang-ups
For unsuccessful_call:
  • Review verification data accuracy
  • Consider if questions are too difficult
  • Check if data is current and correct
For user_hung_up:
  • Listen to call recordings (if enabled)
  • Review AI introduction script
  • Check call timing and customer timezone
For system_error:
  • Check server logs immediately
  • Verify API credentials and quotas
  • Test WebSocket connectivity
  • Ensure verification data is accurate before calling
  • Update outdated customer information
  • Remove or fix verifications with invalid data
  • Test verification questions with sample calls
  • Track average call duration
  • Monitor OpenAI API latency
  • Measure time-to-first-response
  • Optimize VAD threshold if needed

Troubleshooting

Common Issues

Calls Stuck in “in_progress”If calls remain in progress status indefinitely:
  1. Check if WebSocket connection is closing properly
  2. Verify call_reflection_data function is being called
  3. Review server logs for WebSocket errors
  4. Ensure Twilio is sending disconnect events
Fix: The status update happens on WebSocket close (highway-backend/websocket.js:153-165). Verify this event is firing.
Missing Verification DataIf verification data shows as “N/A” or undefined:
  1. Verify verification record exists in database
  2. Check that verification foreign key is set correctly in calls table
  3. Ensure verification wasn’t deleted after call was initiated
  4. Review data fetching logic for joins

Debugging Steps

1

Check Database

Verify call record exists and has correct verification ID:
SELECT * FROM calls WHERE id = [call_id];
2

Review Server Logs

Look for WebSocket errors or API failures in backend logs
3

Test API Connections

Verify OpenAI and Twilio APIs are accessible and responsive
4

Check Network

Ensure WebSocket connections can be established from your server

Next Steps

AI Phone Calls

Understand how the AI conducts verification calls

Verification Management

Learn how to create and manage verifications

Supabase Integration

Explore the database schema and queries

Setup Guide

Backend and frontend setup instructions

Build docs developers (and LLMs) love