Skip to main content

ExtensionType Enum

The ExtensionType enum defines the different types of extensions available in the OPBX system for call routing.

Definition

namespace App\Enums;

enum ExtensionType: string
{
case USER = 'user';
case CONFERENCE = 'conference';
case RING_GROUP = 'ring_group';
case IVR = 'ivr';
case AI_ASSISTANT = 'ai_assistant';
case CUSTOM_LOGIC = 'custom_logic';
case FORWARD = 'forward';
case AI_LOAD_BALANCER = 'ai_load_balancer';
}

Values

ValueLabelDescription
userUser ExtensionDirect extension for a user
conferenceConference RoomConference room for multiple participants
ring_groupRing GroupRing multiple extensions simultaneously or sequentially
ivrIVR MenuInteractive voice response menu
ai_assistantAI AssistantAI-powered virtual assistant
custom_logicCustom LogicCustom call routing logic
forwardCall ForwardingForward calls to external number
ai_load_balancerAI Load BalancerRoute calls to AI Assistant Load Balancer

Methods

label(): string

Get human-readable label.

ExtensionType::USER->label();           // "User Extension"
ExtensionType::AI_ASSISTANT->label(); // "AI Assistant"

description(): string

Get detailed description.

ExtensionType::RING_GROUP->description();
// "Ring multiple extensions simultaneously or sequentially"

Capability Checks

requiresUser(): bool

Check if extension type requires user assignment.

ExtensionType::USER->requiresUser();           // true
ExtensionType::CONFERENCE->requiresUser(); // false

supportsVoicemail(): bool

Check if extension type supports voicemail.

ExtensionType::USER->supportsVoicemail();      // true
ExtensionType::AI_ASSISTANT->supportsVoicemail(); // false

canMakeOutboundCalls(): bool

Check if extension type can make outbound calls.

ExtensionType::USER->canMakeOutboundCalls();   // true
ExtensionType::IVR->canMakeOutboundCalls(); // false

requiredConfigFields(): array

Get required configuration fields for the extension type.

ExtensionType::CONFERENCE->requiredConfigFields();
// ['conference_room_id']

ExtensionType::AI_ASSISTANT->requiredConfigFields();
// ['provider', 'phone_number']
TypeRequired Fields
userNone (optional: forward_to)
conferenceconference_room_id
ring_groupring_group_id
ivrivr_id
ai_assistantprovider, phone_number
custom_logiccustom_logic_id
forwardforward_to
ai_load_balancerai_load_balancer_id

values(): array

Get all extension type values as an array.

ExtensionType::values();
// ['user', 'conference', 'ring_group', 'ivr', 'ai_assistant', ...]

Usage Example

use App\Enums\ExtensionType;
use App\Models\Extension;

// Create user extension
$ext = Extension::create([
'extension_number' => '1001',
'type' => ExtensionType::USER,
'user_id' => $user->id,
]);

// Create conference room extension
$ext = Extension::create([
'extension_number' => '8000',
'type' => ExtensionType::CONFERENCE,
'configuration' => ['conference_room_id' => $room->id],
]);

// Check capabilities
if ($extension->type->supportsVoicemail()) {
// Show voicemail settings
}

if ($extension->type->canMakeOutboundCalls()) {
// Allow outbound calling
}

Database Storage

Stored as VARCHAR(50) in the database:

type VARCHAR(50) NOT NULL

Used By