Skip to main content

AutoDialerCampaign Model

The AutoDialerCampaign model represents an outbound dialing campaign with configuration for routing, scheduling, rate limiting, AMD actions, and Caller ID pooling.

Table: auto_dialer_campaigns
Model: App\Models\AutoDialerCampaign
Resource: App\Http\Resources\AutoDialerCampaignResource

Database Schema

ColumnTypeNullableDefaultDescription
idbigint unsignedNoautoPrimary key
organization_idbigint unsignedNo-Foreign key to organizations
namevarchar(255)No-Campaign name
descriptiontextYesnullCampaign description
statusvarchar(20)NodraftCampaign status enum
auto_startbooleanNofalseAuto-start when ready
routing_destination_typevarchar(50)No-ai_assistant, ai_load_balancer, hangup
routing_destination_idbigint unsignedYesnullTarget destination ID
dial_timeoutintNo60Seconds to ring before timeout
destination_connectvarchar(20)Noconnectedconnected or immediately
caller_idvarchar(50)YesnullDefault Caller ID (legacy)
caller_id_strategyvarchar(20)Noround_robinDistribution strategy for pool
caller_id_pool_enabledbooleanNofalseWhether pool mode is enabled
max_dial_attemptsintNo1Max retries per destination
concurrent_active_callsintNo1Max concurrent calls (CAC, 1-50)
calls_per_secondintNo1Call initiation rate (CPS, 1-30)
days_activejsonYesnullLegacy schedule days
start_timeintYesnullLegacy start hour
end_timeintYesnullLegacy end hour
start_datedateYesnullCampaign start date
end_datedateYesnullCampaign end date
timezonevarchar(50)YesUTCSchedule timezone
schedulejsonYesnullFull weekly schedule
time_limitintYesnullMax call duration (seconds)
record_callsbooleanNofalseEnable recording
action_voicemailstringYesnullAMD action for voicemail
action_humanstringYesnullAMD action for human
action_unknownstringYesnullAMD action for unknown
total_destinationsintNo0Total destinations count
completed_callsintNo0Completed calls count
failed_callsintNo0Failed calls count
voicemail_callsintNo0Voicemail calls count
pending_callsintNo0Pending calls count
pause_reasonvarchar(50)YesnullReason for pause
resume_attimestampYesnullScheduled resume time
started_attimestampYesnullWhen campaign started
completed_attimestampYesnullWhen campaign completed
created_attimestampYesnullCreation timestamp
updated_attimestampYesnullLast update timestamp

Relationships

Belongs To

campaign.organization() → Organization

Has Many

campaign.lists() → AutoDialerList[]
campaign.destinations() → AutoDialerDestination[] (through list)
campaign.callSessions() → AutoDialerCallSession[]
campaign.callerIdStats() → AutoDialerCallerIdStat[]

Belongs To Many

campaign.callerIds() → DidNumber[]
- Pivot: auto_dialer_campaign_caller_ids
- With pivot: weight

Enums

CampaignStatus

CaseValue
DRAFTdraft
ACTIVEactive
PAUSEDpaused
COMPLETEDcompleted
ARCHIVEDarchived

RoutingDestinationType

CaseValue
AI_ASSISTANTai_assistant
AI_LOAD_BALANCERai_load_balancer
HANGUPhangup

CallerIdStrategy

CaseValue
ROUND_ROBINround_robin
RANDOMrandom
LEAST_RECENTLY_USEDleast_recently_used

DestinationConnect

ValueDescription
connectedConnect when call answered
immediatelyConnect immediately

Caller ID Pooling

Enable Pool Mode

$campaign->update([
'caller_id_pool_enabled' => true,
'caller_id_strategy' => 'round_robin', // or 'random', 'least_recently_used'
]);

Assign Caller IDs

$syncData = [
$didId1 => ['weight' => 1],
$didId2 => ['weight' => 1],
];
$campaign->callerIds()->sync($syncData);

Methods

Scopes

AutoDialerCampaign::forOrganization($orgId)
AutoDialerCampaign::active()
AutoDialerCampaign::paused()
AutoDialerCampaign::draft()
AutoDialerCampaign::runnable() // Active and within schedule

Business Logic

$campaign->isRunnable(): bool
$campaign->getProgressPercentage(): int
$campaign->getApiIntervalMilliseconds(): float
$campaign->hasValidCac(): bool
$campaign->hasValidCps(): bool
$campaign->hasList(): bool
$campaign->canStart(): bool
$campaign->canPause(): bool
$campaign->canAcceptList(): bool