RingGroup Model
The RingGroup model represents a call distribution group that rings multiple extensions simultaneously or sequentially based on a configured strategy.
Overview
| Property | Value |
|---|---|
| Namespace | App\Models |
| Table | ring_groups |
| Primary Key | id |
| Global Scope | OrganizationScope |
Database Schema
| Column | Type | Nullable | Default | Description |
|---|---|---|---|---|
id | bigint unsigned | No | auto | Primary key |
organization_id | bigint unsigned | No | - | Foreign key to organizations |
name | varchar(255) | No | - | Ring group name |
description | text | Yes | null | Optional description |
strategy | varchar(50) | No | simultaneous | RingGroupStrategy enum |
timeout | int | No | 30 | Ring timeout in seconds |
ring_turns | int | No | 1 | Number of ring cycles |
fallback_action | varchar(50) | No | hangup | RingGroupFallbackAction enum |
fallback_extension_id | bigint unsigned | Yes | null | Fallback extension |
fallback_ring_group_id | bigint unsigned | Yes | null | Fallback ring group |
fallback_ivr_menu_id | bigint unsigned | Yes | null | Fallback IVR menu |
fallback_ai_assistant_id | bigint unsigned | Yes | null | Fallback AI assistant |
fallback_ai_load_balancer_id | bigint unsigned | Yes | null | Fallback AI load balancer |
status | varchar(50) | No | active | RingGroupStatus enum |
created_at | timestamp | No | - | Creation timestamp |
updated_at | timestamp | No | - | Last update timestamp |
Attributes
Fillable
protected $fillable = [
'organization_id',
'name',
'description',
'strategy',
'timeout',
'ring_turns',
'fallback_action',
'fallback_extension_id',
'fallback_ring_group_id',
'fallback_ivr_menu_id',
'fallback_ai_assistant_id',
'fallback_ai_load_balancer_id',
'status',
];
Casts
| Attribute | Cast | Description |
|---|---|---|
strategy | RingGroupStrategy::class | Ring strategy enum |
fallback_action | RingGroupFallbackAction::class | Fallback action enum |
status | RingGroupStatus::class | Status enum |
timeout | integer | Integer cast |
ring_turns | integer | Integer cast |
Constants
| Constant | Value | Description |
|---|---|---|
DEFAULT_RELATIONSHIP_FIELDS | ['members.extension.user:id,name', 'fallbackExtension:id,extension_number'] | Default eager load fields |
Ring Strategies
| Strategy | Description |
|---|---|
simultaneous | Ring all members at once |
round_robin | Ring members in sequence |
priority | Ring by priority order |
weighted | Ring by configured weights |
memory | Remember last answered and continue |
Relationships
Belongs To
organization()→ OrganizationfallbackExtension()→ ExtensionfallbackRingGroup()→ RingGroup (self)fallbackIvrMenu()→ IvrMenufallbackAiAssistant()→ ExtensionfallbackAiLoadBalancer()→ AiAssistantLoadBalancer
Has Many
members()→ RingGroupMember[] (ordered by priority)
Methods
isActive(): boolisInactive(): boolgetMembers(): Collection- Get active member extensionsgetActiveMemberCount(): int
Query Scopes
scopeForOrganization($query, $orgId)scopeWithStrategy($query, $strategy)scopeWithStatus($query, $status)scopeSearch($query, $search)scopeActive($query)