Queue lifecycle
A queue moves through these states:| State | Description |
|---|---|
| idle | Queue is created but not started |
| active | Calls are being placed. Auto-advance moves to the next contact after each call. |
| paused | Current call continues, but no new calls are placed until you resume |
| completed | All contacts in the queue have been attempted |
| stopped | Queue was manually ended before all contacts were reached |
| error | Something went wrong (network failure, Twilio error) |
idle → active → paused ↔ active → completed or active/paused → stopped.
Starting a queue
From the home screen:- Select a list from the Select a list dropdown (these are opportunity record lists)
- Configure your calling mode (single or parallel), assist mode, and caller ID
- Click Open fullscreen workspace
Queue operations
| Operation | Shortcut | What it does |
|---|---|---|
| Start | — | Begins the queue from the first contact |
| Pause | Space | Stops auto-advance. Current call continues. |
| Resume | Space | Continues from where you paused |
| Skip | S | Opens a skip reason modal, then advances to the next contact |
| End | E | Stops the queue and shows the session summary |
| Restart | — | Resets 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)
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:| Setting | Default | Description |
|---|---|---|
| Auto-advance | true | Automatically dial the next contact after the current call ends |
| Auto-advance delay | 400ms | Wait time before dialing the next contact |
| Skip no-answer | false | Automatically skip contacts who don’t answer |
| Max attempts | 3 | Maximum times to attempt a contact before marking as exhausted |
| Call timeout | 30s | How long to let the phone ring before giving up |
| Auto-skip voicemail | true | Skip contacts that go to voicemail |
| Voicemail skip delay | 1000ms | Wait time before skipping a voicemail |
| Parallel dialing | false | Enable parallel dialing for this queue |
| Parallel max lines | 3 | How many contacts to dial simultaneously |
| Parallel cooldown | 2000ms | Wait time between parallel batches when no one answers |
Auto-advance and retry logic
When a call ends and auto-advance is enabled:- If auto-skip voicemail is on and the outcome was voicemail → skip immediately
- If the contact has remaining attempts and the outcome was retriable (no-answer, busy, voicemail) → schedule a retry with exponential backoff
- Otherwise → advance to the next contact after the configured delay
Call outcomes
After each call, log a disposition:| Outcome | Description |
|---|---|
connected | Had a conversation with the contact |
no-answer | Phone rang, no one picked up |
voicemail | Reached voicemail |
busy | Line was busy |
wrong-number | Number doesn’t belong to the contact |
callback-requested | Contact asked to be called back later |
not-interested | Contact declined |
qualified | Contact is a qualified lead |
dnc | Contact 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:| Factor | Weight | How it works |
|---|---|---|
| Attempt decay | 100 - (attempts × 25) | Contacts with fewer attempts score higher |
| Time since last attempt | Up to 120 points | Longer gaps since last call score higher |
| Lead score | lead_score × 10 | Higher-value leads are prioritized |
| Call hour proximity | Up to 24 points | Contacts closer to their preferred call hour score higher |
| Campaign priority | campaign_priority × 15 | Higher-priority campaigns go first |
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):
| Rule | Description |
|---|---|
| Minimum retry spacing | Enforces a cooldown between attempts to the same contact |
| Max attempts per day | Caps how many times a contact can be called in a single day |
| Max attempts per week | Caps weekly attempts per contact |
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
callsandqueue_itemstables - 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. ThedncFilteredCount 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:| Metric | Description |
|---|---|
| Answer rate | Percentage of calls that connected |
| Average call duration | Mean duration of connected calls |
| Calls per hour | Throughput rate |
| Outcome breakdown | Bar chart showing count per outcome (connected, no-answer, voicemail, busy, etc.) |
Queue categories
Queues can be organized by category for filtering:| Category | Use case |
|---|---|
leads | New inbound leads |
customers | Existing customer outreach |
prospects | Cold outbound |
followup | Scheduled callbacks |
campaigns | Marketing campaign lists |
custom | Anything else |
Next steps
- Parallel Dialing — dial multiple contacts simultaneously
- Run a Queue Campaign — end-to-end walkthrough