Enumerations
OPBX uses PHP 8.1+ backed enums for fixed value sets.
Auto Dialer Enums
CallerIdStrategy
Distribution strategy for Caller ID pools.
File: App\Enums\CallerIdStrategy
Table Column: auto_dialer_campaigns.caller_id_strategy
| Case | Value | Description |
|---|---|---|
ROUND_ROBIN | round_robin | Cycle through Caller IDs sequentially (weighted by pool weight) |
RANDOM | random | Weighted random selection |
LEAST_RECENTLY_USED | least_recently_used | Select the least recently used Caller ID (ignores weight) |
CampaignStatus
Campaign lifecycle states.
File: App\Enums\CampaignStatus
Table Column: auto_dialer_campaigns.status
| Case | Value | Description |
|---|---|---|
DRAFT | draft | Initial configuration |
ACTIVE | active | Currently dialing |
PAUSED | paused | Temporarily stopped |
COMPLETED | completed | All destinations processed |
ARCHIVED | archived | Archived; cannot be started or take a list |
canStart() is true for draft and paused, canPause() and isRunnable() only for active, and canAcceptList() for draft, paused and active.
DestinationStatus
Status of a destination (phone number) in a campaign.
File: App\Enums\DestinationStatus
Table Column: auto_dialer_destinations.status
| Case | Value | Description |
|---|---|---|
PENDING | pending | Waiting to be called |
DIALING | dialing | Currently being dialed |
CONNECTED | connected | Call connected |
COMPLETED | completed | Successfully completed |
FAILED | failed | Failed |
INVALID | invalid | Invalid number |
AmdMode
Answering Machine Detection modes.
File: App\Enums\AmdMode
Table Column: none. No model casts to this enum and no column stores it in the current code.
| Case | Value | Description |
|---|---|---|
ENABLED | Enabled | Detect human or machine |
DETECT_MESSAGE_END | DetectMessageEnd | Wait for greeting to end |
ListStatus
Distribution list states.
File: App\Enums\ListStatus
Table Column: auto_dialer_lists.status
| Case | Value | Description |
|---|---|---|
DRAFT | draft | Creating/uploading |
PENDING | pending | Awaiting processing |
PROCESSING | processing | CSV being processed |
READY | ready | Available for use |
FAILED | failed | Upload/processing failed |
IN_USE | in_use | Assigned to campaign |
USED | used | Campaign completed |
ARCHIVED | archived | No longer used (final state) |
A list can be assigned to a campaign only when ready; destinations can be uploaded in draft, pending and failed; in_use and used lists are locked; ready, failed and used lists can be archived; ready and used lists can get a new version; ready, in_use, used and archived lists can be copied.
Core PBX Enums
ExtensionType
Types of PBX extensions.
File: App\Enums\ExtensionType
Table Column: extensions.type
| Case | Value | Description |
|---|---|---|
USER | user | Human user extension |
CONFERENCE | conference | Conference room endpoint |
RING_GROUP | ring_group | Ring group endpoint |
IVR | ivr | IVR menu endpoint |
AI_ASSISTANT | ai_assistant | AI assistant endpoint |
AI_LOAD_BALANCER | ai_load_balancer | Load balancer endpoint |
FORWARD | forward | Call forwarding |
CUSTOM_LOGIC | custom_logic | Custom routing logic |
QUEUE | queue | Call queue endpoint |
The extensions.type column also allows virtual, which has no enum case.
RoutingDestinationType
Where an answered auto-dialer call is sent.
File: App\Enums\RoutingDestinationType
Table Column: auto_dialer_campaigns.routing_destination_type
| Case | Value | Description |
|---|---|---|
AI_ASSISTANT | ai_assistant | Route to AI assistant |
AI_LOAD_BALANCER | ai_load_balancer | Route via load balancer |
RING_GROUP | ring_group | Route to a ring group |
CALL_QUEUE | call_queue | Route to a call queue |
HANGUP | hangup | Disconnect call |
RingGroupStrategy
Call distribution strategies.
File: App\Enums\RingGroupStrategy
Table Column: ring_groups.strategy
| Case | Value | Description |
|---|---|---|
SIMULTANEOUS | simultaneous | Ring all members at once (label "Ring All (Simultaneous)") |
ROUND_ROBIN | round_robin | Distribute calls evenly across members |
SEQUENTIAL | sequential | Try members one after another (label "Sequential (Hunt Group)") |
RingGroupStatus
Ring group states.
File: App\Enums\RingGroupStatus
Table Column: ring_groups.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Operational |
INACTIVE | inactive | Disabled |
RingGroupFallbackAction
Actions when a ring group fails. The enum is also the cast for call_queues.fallback_action and ai_assistant_load_balancers.fallback_action. The call_queues.fallback_action column has no call_queue value: a queue cannot overflow to another queue.
File: App\Enums\RingGroupFallbackAction
Table Column: ring_groups.fallback_action
| Case | Value | Description |
|---|---|---|
EXTENSION | extension | Forward to extension |
RING_GROUP | ring_group | Forward to ring group |
IVR_MENU | ivr_menu | Forward to IVR menu |
AI_ASSISTANT | ai_assistant | Forward to AI assistant |
AI_LOAD_BALANCER | ai_load_balancer | Forward to AI load balancer |
CALL_QUEUE | call_queue | Forward to call queue |
HANGUP | hangup | End call |
UNAVAILABLE | unavailable | Say "Destination doesn't exist" and hang up. Set when the target (for example a deleted user's extension) is gone |
AI Integration Enums
AiAssistantStatus
AI assistant states.
File: App\Enums\AiAssistantStatus
Table Column: ai_assistants.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Ready to receive calls |
INACTIVE | inactive | Disabled |
AlbsStrategy
Load balancer distribution strategies.
File: App\Enums\AlbsStrategy
Table Column: ai_assistant_load_balancers.strategy
| Case | Value | Description |
|---|---|---|
ROUND_ROBIN | round_robin | Distribute calls evenly across the assistants in sequence |
PRIORITY | priority | Always route to the highest-priority (lowest number) assistant |
PERCENTAGE | percentage | Route by the configured weight percentages |
AlbsStatus
Load balancer states.
File: App\Enums\AlbsStatus
Table Column: ai_assistant_load_balancers.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Operational |
INACTIVE | inactive | Disabled |
User & Organization Enums
UserRole
Role-based access control.
File: App\Enums\UserRole
Table Column: users.role
| Case | Value | Description |
|---|---|---|
OWNER | owner | Full organization access |
PBX_ADMIN | pbx_admin | PBX configuration access |
SUPERVISOR | supervisor | Scoped read-only monitoring + live call coaching |
PBX_USER | pbx_user | Basic PBX usage |
REPORTER | reporter | View-only access |
UserStatus
User account states.
File: App\Enums\UserStatus
Table Columns: users.status; also cast on extensions.status and conference_rooms.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Can log in |
INACTIVE | inactive | Suspended |
PENDING | pending | Invitation pending activation |
OrganizationStatus
Organization states.
File: App\Enums\OrganizationStatus
Table Column: organizations.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Normal operation |
SUSPENDED | suspended | Access restricted |
DELETED | deleted | Marked deleted |
The tenant.scope middleware rejects API requests from users of a suspended organization ("Your organization has been suspended.") or a deleted one ("Organization is not active.") with 403. Organizations also use Laravel soft deletes (deleted_at).
Call & Logging Enums
CallStatus
Call session states.
File: App\Enums\CallStatus
Table Column: call_logs.status
| Case | Value | Description |
|---|---|---|
INITIATED | initiated | Call created |
RINGING | ringing | Destination ringing |
ANSWERED | answered | Call connected |
COMPLETED | completed | Call ended normally |
BUSY | busy | Busy signal |
NO_ANSWER | no_answer | No answer |
FAILED | failed | Call failed |
Business Hours Enums
BusinessHoursStatus
Schedule states.
File: App\Enums\BusinessHoursStatus
Table Column: business_hours_schedules.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | In use |
INACTIVE | inactive | Not in use |
BusinessHoursActionType
Actions for business hours routing.
File: App\Enums\BusinessHoursActionType
Table Columns: business_hours_schedules.open_hours_action_type, business_hours_schedules.closed_hours_action_type
| Case | Value | Description |
|---|---|---|
EXTENSION | extension | Route to extension |
RING_GROUP | ring_group | Route to ring group |
CONFERENCE_ROOM | conference_room | Route to conference room |
IVR_MENU | ivr_menu | Route to IVR menu |
AI_ASSISTANT | ai_assistant | Route to AI assistant |
AI_LOAD_BALANCER | ai_load_balancer | Route to AI load balancer |
CALL_QUEUE | call_queue | Route to call queue |
UNAVAILABLE | unavailable | Say "Destination doesn't exist" and hang up. Set when the target (for example a deleted user's extension) is gone |
BusinessHoursExceptionType
Schedule exception types.
File: App\Enums\BusinessHoursExceptionType
Table Column: business_hours_exceptions.type
| Case | Value | Description |
|---|---|---|
CLOSED | closed | Closed all day |
SPECIAL_HOURS | special_hours | Special operating hours |
DayOfWeek
Days for scheduling.
File: App\Enums\DayOfWeek
Table Column: business_hours_schedule_days.day_of_week
| Case | Value |
|---|---|
MONDAY | monday |
TUESDAY | tuesday |
WEDNESDAY | wednesday |
THURSDAY | thursday |
FRIDAY | friday |
SATURDAY | saturday |
SUNDAY | sunday |
Security Enums
InboundBlacklistMatchType
Pattern matching strategies.
File: App\Enums\InboundBlacklistMatchType
Table Column: inbound_blacklists.match_type
| Case | Value | Description |
|---|---|---|
EXACT | exact | Exact match |
PREFIX | prefix | Starts with pattern |
WILDCARD | wildcard | fnmatch pattern |
InboundBlacklistRejectionStrategy
How blocked calls are handled.
File: App\Enums\InboundBlacklistRejectionStrategy
Table Columns: inbound_blacklists.rejection_strategy, blocked_call_logs.rejection_strategy
| Case | Value | Description |
|---|---|---|
DROP | drop | Hang up immediately, without a message |
REJECT | reject | Play "Your call has been rejected", then hang up |
TORMENT | torment | Put the caller in a random conference room with hold music |
InboundBlacklistStatus
Blacklist entry states.
File: App\Enums\InboundBlacklistStatus
Table Column: inbound_blacklists.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Blocking calls |
INACTIVE | inactive | Not enforced |
WhitelistStatus
Whitelist entry states.
File: App\Enums\WhitelistStatus
Table Column: outbound_whitelists.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Rule active |
INACTIVE | inactive | Rule disabled |
IVR Enums
IvrMenuStatus
IVR menu states.
File: App\Enums\IvrMenuStatus
Table Column: ivr_menus.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Operational |
INACTIVE | inactive | Disabled |
IvrDestinationType
IVR option routing types.
File: App\Enums\IvrDestinationType
Table Column: ivr_menu_options.destination_type
| Case | Value | Description |
|---|---|---|
EXTENSION | extension | Route to extension |
RING_GROUP | ring_group | Route to ring group |
CONFERENCE_ROOM | conference_room | Route to conference room |
IVR_MENU | ivr_menu | Sub-menu |
BUSINESS_HOURS | business_hours | Business hours schedule |
AI_ASSISTANT | ai_assistant | Route to AI assistant |
AI_LOAD_BALANCER | ai_load_balancer | Route to AI load balancer |
CALL_QUEUE | call_queue | Route to call queue |
HANGUP | hangup | End call |
UNAVAILABLE | unavailable | Say "Destination doesn't exist" and hang up. Set when the target (for example a deleted user's extension) is gone |
ivr_menus.failover_destination_type is cast to the same enum. The columns do not allow every case: ivr_menu_options.destination_type has no hangup, and ivr_menus.failover_destination_type has no business_hours.
Call Queue Enums
CallQueueStatus
File: App\Enums\CallQueueStatus
Table Column: call_queues.status
| Case | Value | Description |
|---|---|---|
ACTIVE | active | Accepts calls |
INACTIVE | inactive | Disabled |
CallQueueStrategy
File: App\Enums\CallQueueStrategy
Table Column: call_queues.strategy
| Case | Value | Description |
|---|---|---|
RING_ALL | ring_all | Ring every available agent |
ROUND_ROBIN | round_robin | Rotate through the agents |
LEAST_TALK_TIME | least_talk_time | Agent with the least total talk time |
FEWEST_CALLS | fewest_calls | Agent who handled the fewest calls |
QueueCallDisposition
File: App\Enums\QueueCallDisposition
Table Column: queue_calls.disposition
| Case | Value | Description |
|---|---|---|
ANSWERED | answered | An agent took the call |
ABANDONED | abandoned | The caller hung up while waiting |
OVERFLOW | overflow | Max wait reached; sent to the fallback |
Agent states (AVAILABLE, BUSY, WRAP_UP, LOGGED_OUT) are not a PHP enum; they live in the ACD worker.
Platform Enums
PlatformHealthStatus
File: App\Enums\PlatformHealthStatus
Table Column: platform_health_checks.status (a varchar column; the model does not cast it)
| Case | Value | Description |
|---|---|---|
OK | ok | Healthy |
DEGRADED | degraded | Slow or over a threshold |
DOWN | down | Failing |
UNKNOWN | unknown | Optional component not running (Loki, Grafana). Never outranks a real failure |
OrganizationJoinRequestStatus
File: App\Enums\OrganizationJoinRequestStatus
Table Column: organization_join_requests.status
| Case | Value | Description |
|---|---|---|
PENDING | pending | Waiting for an Owner or PBX Admin |
APPROVED | approved | User joined the organization |
REJECTED | rejected | Request declined |
SocialIdentityProvider
File: App\Enums\SocialIdentityProvider
Table Columns: user_social_identities.provider, organization_join_requests.provider
| Case | Value | Description |
|---|---|---|
GOOGLE | ||
FACEBOOK | ||
MICROSOFT | microsoft | Microsoft |
GITHUB | github | GitHub |
X | x | X (Twitter) |
API Key Enums
ApiKeyPermissionLevel
File: App\Enums\ApiKeyPermissionLevel
Table Column: api_key_permissions.level
| Case | Value | Description |
|---|---|---|
READ | read | Read-only access to the resource |
WRITE | write | Read and write access |
GrantableResource
The resources an API key may be granted. The value is the resource slug, which matches the route-name prefix in routes/api.php.
File: App\Enums\GrantableResource
users, extensions, conference-rooms, ai-assistants, ai-assistant-providers, ring-groups, call-queues, queue-calls, ai-assistant-load-balancers, ivr-menus, business-hours, phone-numbers, outbound-whitelist, inbound-blacklist, call-detail-records, recordings, supervisors, auto-dialer-campaigns, distribution-lists, session-updates, call-notifications, dashboard, trunks.
EmbedIconPosition
File: App\Enums\EmbedIconPosition
Table Column: user_embed_tokens.icon_position
Where the embeddable dialer's launcher icon sits: bottom-right, bottom-left, top-right, top-left.
Column Enums Without a PHP Enum
These columns are MySQL enum columns, but the model does not cast them to a PHP enum:
| Column | Values |
|---|---|
did_numbers.routing_type | extension, ring_group, business_hours, conference_room, ai_assistant, ai_load_balancer, ivr_menu, call_queue, unavailable |
did_numbers.status, recordings.status, ai_assistant_load_balancer_members.status | active, inactive |
organizations.status | active, suspended, deleted (the values of OrganizationStatus) |
ai_assistants.protocol | sip, websocket, dummy |
auto_dialer_campaigns.destination_connect | connected, immediately |
auto_dialer_call_sessions.status | initiated, ringing, answered, completed, failed |
auto_dialer_call_sessions.amd_result | human, voicemail, unknown |
call_detail_records.recording_status | none, pending, available, failed |
call_logs.direction | inbound, outbound |
call_notifications_settings.auth_method | hmac_sha256, bearer_token, basic_auth, none (the API accepts only the last three) |
cloudonix_settings.call_recording_mode | disabled, inbound, outbound, internal, inbound_outbound, all |
cloudonix_settings.recording_format | wav, mp3 |
email_logs.status | queued, sent, delivered, bounced, failed |
recordings.type | upload, remote |
session_updates.direction | incoming, outgoing, internal, application |
Using Enums
use App\Enums\CampaignStatus;
// From value
$status = CampaignStatus::from('active');
// Safely
$status = CampaignStatus::tryFrom($value);
// All cases
$all = CampaignStatus::cases();
// Value and label
$value = $status->value;
$label = $status->label();
// Validation
Rule::enum(CampaignStatus::class)