Skip to main content

CallStatus Enum

The CallStatus enum defines the possible states of a call throughout its lifecycle.

Definition

namespace App\Enums;

enum CallStatus: string
{
case INITIATED = 'initiated';
case RINGING = 'ringing';
case ANSWERED = 'answered';
case COMPLETED = 'completed';
case BUSY = 'busy';
case NO_ANSWER = 'no_answer';
case FAILED = 'failed';
}

Values

ValueDescription
initiatedCall has been initiated
ringingCall is ringing at destination
answeredCall has been answered
completedCall completed successfully
busyDestination was busy
no_answerNo answer from destination
failedCall failed

Methods

isTerminal(): bool

Check if the call has reached a terminal (final) state.

CallStatus::COMPLETED->isTerminal();  // true
CallStatus::BUSY->isTerminal(); // true
CallStatus::INITIATED->isTerminal(); // false

Terminal states: completed, busy, no_answer, failed

isActive(): bool

Check if the call is currently active.

CallStatus::ANSWERED->isActive();   // true
CallStatus::RINGING->isActive(); // true
CallStatus::COMPLETED->isActive(); // false

Active states: initiated, ringing, answered

Call Lifecycle

initiated → ringing → answered → completed
↓ ↓ ↓
failed busy no_answer

Usage Example

use App\Enums\CallStatus;
use App\Models\CallLog;

// Create new call log
$call = CallLog::create([
'call_id' => 'CA123',
'from_number' => '+1234567890',
'to_number' => '+1987654321',
'status' => CallStatus::INITIATED,
]);

// Update as call progresses
$call->update(['status' => CallStatus::RINGING]);
$call->update(['status' => CallStatus::ANSWERED]);
$call->update(['status' => CallStatus::COMPLETED]);

// Check if call is still active
if ($call->status->isActive()) {
// Show in active calls list
}

// Check if call has ended
if ($call->status->isTerminal()) {
// Generate CDR
}

Database Storage

Stored as VARCHAR(50) in the database:

status VARCHAR(50) NOT NULL

Used By