Skip to main content
Queues let you work through a list of contacts systematically. The system tracks progress, records outcomes, handles retry logic, and can auto-advance to the next contact after each call.

Queue lifecycle

A queue moves through these states:
StateDescription
idleQueue is created but not started
activeCalls are being placed. Auto-advance moves to the next contact after each call.
pausedCurrent call continues, but no new calls are placed until you resume
completedAll contacts in the queue have been attempted
stoppedQueue was manually ended before all contacts were reached
errorSomething went wrong (network failure, Twilio error)
Transitions: idle → active → paused ↔ active → completed or active/paused → stopped.

Starting a queue

From the home screen:
  1. Select a list from the Select a list dropdown (these are opportunity record lists)
  2. Configure your calling mode (single or parallel), assist mode, and caller ID
  3. Click Open fullscreen workspace
The fullscreen workspace launches. The system dials the first contact and shows their information — name, company, phone number, timezone, last note, and attempt count.

Queue operations

OperationShortcutWhat it does
StartBegins the queue from the first contact
PauseSpaceStops auto-advance. Current call continues.
ResumeSpaceContinues from where you paused
SkipSOpens a skip reason modal, then advances to the next contact
EndEStops the queue and shows the session summary
RestartResets all contacts to pending and starts over

Skip reasons

When you skip a contact, a modal asks for the reason:
  • Not interested
  • Wrong number
  • Voicemail
  • Busy
  • Callback requested
  • DNC (Do Not Call)
  • Custom (free text)
The skip reason is saved to the queue item record for reporting.

Queue settings

Open the settings modal by clicking the gear icon in the queue panel header. These settings control queue behavior for the current session:
SettingDefaultDescription
Auto-advancetrueAutomatically dial the next contact after the current call ends
Auto-advance delay400msWait time before dialing the next contact
Skip no-answerfalseAutomatically skip contacts who don’t answer
Max attempts3Maximum times to attempt a contact before marking as exhausted
Call timeout30sHow long to let the phone ring before giving up
Auto-skip voicemailtrueSkip contacts that go to voicemail
Voicemail skip delay1000msWait time before skipping a voicemail
Parallel dialingfalseEnable parallel dialing for this queue
Parallel max lines3How many contacts to dial simultaneously
Parallel cooldown2000msWait time between parallel batches when no one answers

Auto-advance and retry logic

When a call ends and auto-advance is enabled:
  1. If auto-skip voicemail is on and the outcome was voicemail → skip immediately
  2. If the contact has remaining attempts and the outcome was retriable (no-answer, busy, voicemail) → schedule a retry with exponential backoff
  3. Otherwise → advance to the next contact after the configured delay
The auto-advance countdown appears in the queue panel. Click Cancel to stop it and stay on the current contact.

Call outcomes

After each call, log a disposition:
OutcomeDescription
connectedHad a conversation with the contact
no-answerPhone rang, no one picked up
voicemailReached voicemail
busyLine was busy
wrong-numberNumber doesn’t belong to the contact
callback-requestedContact asked to be called back later
not-interestedContact declined
qualifiedContact is a qualified lead
dncContact requested Do Not Call — they’ll be excluded from future queues

Priority scoring

The queue engine doesn’t just go in list order. It scores each pending contact and picks the highest-scoring one to call next:
FactorWeightHow it works
Attempt decay100 - (attempts × 25)Contacts with fewer attempts score higher
Time since last attemptUp to 120 pointsLonger gaps since last call score higher
Lead scorelead_score × 10Higher-value leads are prioritized
Call hour proximityUp to 24 pointsContacts closer to their preferred call hour score higher
Campaign prioritycampaign_priority × 15Higher-priority campaigns go first
The system also enforces timezone-aware calling hours and DNC windows. Contacts outside their callable window are skipped automatically using FOR UPDATE SKIP LOCKED to prevent concurrent agents from picking the same contact.

Cadence suppression

To prevent over-calling, the system tracks a per-contact attempt ledger (contact_attempt_ledger table):
RuleDescription
Minimum retry spacingEnforces a cooldown between attempts to the same contact
Max attempts per dayCaps how many times a contact can be called in a single day
Max attempts per weekCaps weekly attempts per contact
Contacts that violate any of these rules are suppressed — they’re skipped in the queue until the window reopens. The selectNextCallableItem function wraps the priority scoring with cadence checks.

Deterministic retry policy

For no-answer calls, the system uses a deterministic retry strategy:
  • Double-dial no-answer: if a contact doesn’t answer, the system can automatically retry once more before moving on
  • Retry metadata is tracked on both the calls and queue_items tables
  • The evaluateRetryPolicy() function determines whether to retry based on the outcome and attempt count

DNC filtering

Contacts on the Do Not Call list are automatically filtered out of the queue. The dncFilteredCount field on the queue shows how many contacts were excluded. If a contact requests DNC during a call, log the dnc outcome and they’ll be excluded from all future queues.

Queue progress

While a queue is running, the queue panel shows:
  • Progress bar with percent complete
  • Completed / Total count
  • Current contact — name, company, phone, timezone, last note, attempt badge
  • Next contact — preview of who’s coming up
  • Auto-advance countdown — seconds until the next call, with a cancel button

Queue analytics

The queue analytics section (visible during and after a queue session) shows:
MetricDescription
Answer ratePercentage of calls that connected
Average call durationMean duration of connected calls
Calls per hourThroughput rate
Outcome breakdownBar chart showing count per outcome (connected, no-answer, voicemail, busy, etc.)
When the queue completes, a session summary appears with total calls, answer rate, total time, and an Export CSV button to download the full results.

Queue categories

Queues can be organized by category for filtering:
CategoryUse case
leadsNew inbound leads
customersExisting customer outreach
prospectsCold outbound
followupScheduled callbacks
campaignsMarketing campaign lists
customAnything else

Next steps