Campaign Rules
Understand campaign rules - the IF/THEN logic that decides what happens to every lead after a call — and see each condition and action in action through one example campaign.
Video Tutorial
What a Campaign Rule Is
A rule is a simple IF → THEN instruction that the CommPeak Dialer applies to a lead:
- IF its conditions are true (for example, the last call ended in No Answer and this has happened 3 times today),
- THEN its actions run (for example, wait 90 minutes before calling again and lower the lead's weight).
Rules are defined per campaign. When a campaign has more than one condition, they are combined with AND / OR logic, so you can be as broad or as precise as you like. Rules are organized into groups (for example, New Leads, Not Interested, Weight Update) purely to keep them tidy — a group can be switched on or off as a whole.
NOTEAbout 95 percent of all rules concern statuses — what happened on the call. The rest handle the call flow: number of calls per day, total calls per lead, weight, and integrations.
IMPORTANTThis guide explains how campaign rules work so you can read and understand your own. In practice, the support team configures rules for you according to your preferences. To change them, contact our support or your account manager.
When Rules Run — the Two Engines
Every rule runs on one of two engines. This is the single most important thing to understand about rules, because it decides when a consequence happens.
| Engine | When it runs | Typical use |
|---|---|---|
| Real-time (event-based) | The instant a lead changes - right after a call ends or an agent submits feedback | React to a call result: change status, freeze, re-weight, blacklist |
| Scheduled (cron) | On a fixed schedule (for example, every night at 01:00) and applied in bulk to many leads at once | Housekeeping across the whole base: daily weight decrease, re-checking time-based conditions |
A rule is scheduled when it has a cron schedule (shown as text like "on 1-th minute on 1-th hour every day"); otherwise it is real-time.
The Lead Lifecycle
The chart below shows how a lead flows through the Dialer and where rules fire. Note the very first step; it is a rule too.
flowchart TD
A["Lead imported (no status yet)"] -->|"New Lead rule fires FIRST"| B["Status = New Lead"]
B --> C["Enters the dial pool, ordered by weight"]
C --> D["Dialer calls the lead"]
D --> E{"Call result / new status"}
E --> F["Real-time rules fire"]
F --> G["Consequences run: change status, add or remove weight, freeze, assign, blacklist"]
G -->|"Freeze (call_after set)"| H["Lead waits until the freeze time passes"]
H --> C
G -->|"Blacklist or final status"| I["Lead is no longer dialed"]
S["Scheduled (cron) rules run on their schedule"] --> K["Mass update, e.g. daily weight -10, re-check time-based rules"]
K --> C
IMPORTANTThe "New Lead" rule must run first. A freshly imported lead has no status yet. A dedicated rule — condition New campaign lead → action change status to "New Lead" - stamps that starting status. It is ordered ahead of every other rule. If it did not run first, the lead would have no status for the other (status-based) rules to match, and it would never be dialed correctly. When you review a campaign, you will always see this rule at the very top.
Meet the Example Campaign: Horizon
To make every rule concrete, this guide follows one example campaign throughout.
Horizon is an online course provider. People who ask about a course become leads, and agents call them to help them enroll. We will follow five of them:
| Lead | Story |
|---|---|
| Maria | A brand-new, engaged lead - answers, books a call-back, and finally enrolls (pays her Deposit). |
| David | Hard to reach - keeps ringing out, going to voicemail, or being busy. |
| Sofia | Flagged as online/hot in the CRM - she just filled in the form and should be called immediately. |
| Ahmed | Asks a specific advisor to call him back at an agreed time (a Personal Meeting). |
| Tom | Wrong number - the person who answers is not the lead. |
Every rule below is illustrated with one of these five.
Anatomy of a Rule
To view a campaign's rules, go to Leads & Campaigns > Campaigns, find the campaign, click Frequent in the Actions column, and select Rules. Click + Expand All to open every group.
Each rule has four parts: a name, an active / not-active indicator, its conditions, and its actions.

Components of a campaign rule
- Rule conditions activate the rule. With more than one, AND / OR logic combines them.
- Rule actions define what happens when the conditions are true — anything from a weight change to a status change.
Lead Weight and the New / Online / Regular Bands
Every campaign lead carries a weight (a number). Weight does two jobs:
- It sets dial priority - when a group dials by highest weight, heavier leads are called first.
- It groups leads into bands that many rules test against:
| Band | Weight | Meaning |
|---|---|---|
| Online / hot | more than 10000 | Just came in or flagged online in the CRM — call now |
| New | 1200–9999 | Fresh leads, roughly the last 2–3 days |
| Regular | less than 1199 | Older leads that have been worked already |
Weight is not fixed. Scheduled rules lower it over time so leads naturally age from Online → New → Regular, and real-time rules nudge it after each call (a good outcome can raise it, a dead-end lowers it). You will see exactly this in the How Leads Age example.
Worked Examples
These five examples use the real rules from a standard Horizon-style campaign. Read them in order — together they show almost every Light condition and action.
1. David — the New Lead Nobody Answers
David is a fresh lead (New band). He does not pick up. Three rules in the New Leads – NA & VM group handle this, escalating the wait each time:

| Rule | Condition | Action |
|---|---|---|
| NA & VM #1 | New status is No Answer or Voicemail and weight 1200–9999 and this happened less than 1 time in the last 12 h | Reset freeze, then freeze 5–15 min |
| NA & VM #2 | …same, but it happened exactly 2 times in 12 h | Freeze 30–45 min |
| NA & VM #3 | …same, but more than 3 times in 12 h | Freeze 90–120 min |
So David is retried quickly at first, then the Dialer backs off as it becomes clear he is not answering right now — without ever giving up. (A parallel New Leads – BUSY group does the same for Busy results.)
2. Sofia — the Hot Lead
Sofia just submitted the form and is flagged online, so her weight is above 10000. The Online Leads group treats her far more aggressively:

Rule example for online leads
| Rule | Condition | Action |
|---|---|---|
| Online #1 | New status is Busy / Failed To Connect / No Answer / Voicemail and weight > 10000 and fewer than 2 such results in 12 h | Reset freeze, freeze only 2–4 min |
| Online #2 | …same, but more than 3 such results in 12 h | Freeze 30 min |
Because her weight is high, Sofia also sits at the top of the dial queue — she is called before David.
3. Maria — from Call-back to Enrollment
Maria answers. Two moments in her journey are driven by rules.
She books a call-back: the agent sets the General Meeting status. The Scheduled Meeting group reacts:
- General Meeting → turn permanent assignment off, ratio-lock off, freeze 3 days (so she is called back around the agreed time, by any available agent).
She enrolls: the agent sets Deposit. The General Statuses group closes her out:
- Deposit / Do Not Call → reset freeze, freeze 365 days, and add her phone to the blacklist so she is never auto-dialed again.
NOTEIf Maria had asked for Ahmed's advisor specifically at a set time, the agent would use Personal Meeting instead — that turns permanent assignment on (only that advisor calls her) and freezes her for 14 days.
4. A Lead Who Keeps Declining
When a lead says no, the Not Interested group escalates the freeze so you stop wasting calls but keep the door open:
| Rule | Condition | Action |
|---|---|---|
| Not Interested #1 | New status Not Interested, first time | Freeze 30 days |
| Not Interested #2 | Not Interested, more than twice | Freeze 90 days |
| Not Interested #3 | Not Interested, 3 times in a row | Freeze 365 days + blacklist |
Dead-end statuses are handled once and for all elsewhere: Invalid Phone, Language Barrier, Underage, Wrong Person (Tom's case) all freeze 365 days, and Failed To Connect nine times in a row is automatically changed to Invalid Phone.
5. How Leads Age (the Scheduled Engine)
This is the scheduled engine at work. In the Weight Update group:
| Rule | When | Condition | Action |
|---|---|---|---|
| Daily Weight Decrease | Every day at 01:00 (cron) | Weight is more than 1 | Decrease weight by 10 |
| Weight Decrease by 10 | Real-time | New status Busy / No Answer / Voicemail / … | Decrease weight by 10 |
| Weight Decrease by 50 | Real-time | New status Deposit / Not Interested / Invalid Phone / … | Decrease weight by 50 |
| Max Weight | Real-time | Weight is 1401–9999 (or a new lead at 0) | Set weight to 1400 |
Day by day, David's weight falls until he crosses from New into Regular - at which point the Regular Leads rule takes over (a longer 110–130 minute wait between calls). No one moves him by hand; the rules age him automatically.
Condition Reference — Light
These are the conditions used in a standard campaign. Each is the IF side of a rule.
| Condition | What it checks | Horizon example |
|---|---|---|
| New campaign lead | The lead was just imported and has no status yet | Stamps the first New Lead status (must run first) |
| Status has changed | The lead's status changed to anything | Trigger an integration update whenever the status moves |
| New status is / is not | The new status is (or is not) one of a chosen set | No Answer or Voicemail → apply the retry rule |
| Current status (time-based only) | The lead's status right now — used only by scheduled rules | A nightly rule re-checks leads currently Invalid Phone |
| Weight is more / less / equal than | Compares the lead's weight to a number | weight > 10000 marks Sofia as hot |
| Status occurred N times (in a window) | How many times a status happened, optionally within the last X hours/days | No Answer more than 3 times in 12 h → longer freeze |
| Status N consecutive times | The same status happened N times in a row | Not Interested 3 times running → 365-day freeze |
| Lead had N calls | Total calls to the lead, optionally within a window | More than 6 calls in 12 h → pause for the day |
| Call duration (seconds) | How long the last call lasted | A very short "No Answer" is treated as a bad number |
| Lead field equals / not equals | Any field on the lead (name, normalized phone, email, …) | first name is filled in → the lead looks complete |
| Lead error state | A system error flag on the lead (including duplicates and Do-Not-Call) | Error state 2 → mark the lead a Duplicate |
| Assigned to agent (on / off) | Whether the lead is permanently assigned to an agent | Clean up assignment when the lead closes |
| HLR status (advanced) | The result of an HLR carrier lookup on the number | Route confirmed-invalid numbers out of dialing |
| Datapoint count (advanced) | How many times a custom report data point was recorded | Count "HLR – valid" results to avoid re-checking |
Action Reference — Light
These are the actions used in a standard campaign. Each is the THEN side of a rule.
| Action | What it does | Horizon example |
|---|---|---|
| Reset freeze | Clears any existing wait so the next action's freeze starts clean | Always paired before a new freeze |
| Freeze lead for X | Stops calling the lead for a set time (minutes / hours / days) | Back off 90–120 min after repeated No Answers |
| Change status | Sets the lead's status | Failed To Connect ×9 → Invalid Phone |
| Set / increase / decrease weight | Adjusts dial priority and band | Nightly −10; a dead-end status −50 |
| Add to blacklist | Blocks the number from auto-dialing (temporary-approved, permanent, or remove) | On Deposit / Do Not Call |
| Permanent assignment on / off | Locks the lead to one agent, or releases it | Personal Meeting → lock to that advisor |
| Ratio-1 lock on / off | Forces the lead to be dialed one-to-one (an agent is reserved) | System – Answer (Dropped) → guarantee an agent next time |
| Update remote adapter status (advanced) | Pushes the new status (with a comment) back to the connected CRM | Keep the CRM in sync after each call |
| Send to HLR lookup (advanced) | Sends the number for a carrier validity check; the lead pauses until it returns | Validate before spending more calls |
| Reset HLR state (advanced) | Clears the HLR result so the lead is callable again | Nightly reset after counting the result |
| Increase datapoint (advanced) | Adds to a custom report counter | Track "HLR – valid / not valid" totals |
Advanced Conditions and Actions
Beyond the everyday set above, the Dialer supports many more building blocks for specialized workflows and integrations. Most campaigns never need these; they are listed here for completeness. If one fits your use case, contact support to configure it.
Advanced Conditions
| Condition | What it checks |
|---|---|
| Status changed to a different status | The status changed and the new one differs from the old |
| Previous status is / is not | Matches on the status the lead had before the change |
| Lead belongs to lead file | The lead came from a specific uploaded lead file |
| Country is / is not | The lead's country |
| Country in country-object list | The country belongs to a named country group |
| Dynamic caller-ID availability | Whether dynamic caller IDs exist / are all frozen / are available |
| Status (in a set) occurred N times | A status from a chosen set happened N times |
| Status (in a set) N consecutive times | A status from a chosen set happened N times in a row |
| Datapoint count for the assigned user | A report data point summed for the lead's agent |
| Last AMD / voicemail status | The answering-machine-detection result of the last call |
| Comment exists | An agent left a comment on the lead |
| Last call type (in last N minutes) | The type of the most recent call |
| Call was bridged | The lead's call connected to an agent |
| Has a duplicate on campaign | The lead is duplicated on another campaign |
| Reached max calls per destination | The number hit the tenant's automated-calls-per-number limit |
| Reached max shift calls per destination | The number hit the 16-hour-shift calls-per-number limit |
| Last predictive call from group | The last predictive call came from a specific agent group |
| Assigned agent is PPQ-enabled | The lead's agent uses the personal predictive queue |
| Call data not sent before | This call's data was never pushed to the CRM adapter |
| Outbound IVR event | An outbound IVR ended in reject / timeout / bridge |
| Outbound IVR detected DTMF | The lead pressed a specific key in an outbound IVR |
| Phone network type | The number is Fixed / Mobile / Unknown |
Advanced Actions
| Action | What it does |
|---|---|
| Mark lead as new | Resets the lead to New (clears status, assignment, weight, freeze) |
| Assign lead to agent | Assigns the lead to a specific agent |
| Ratio-1 expires after N | The one-to-one lock lifts after a set time |
| Permanent assignment expires after N | The agent lock lifts after a set time |
| Exclude caller ID | Stops using a caller ID (for a time / forever / reset all) |
| Keep existing caller ID | Locks the lead's current caller ID (for a time / forever / reset) |
| Allow calling outside allowed hours | Lets this lead be dialed outside the campaign's calling hours |
| Add comment | Adds a comment to the campaign lead |
| Add adapter comment | Adds a comment to the connected CRM record |
| Change lead field | Overwrites a lead field's value |
| Copy lead to campaign | Copies the lead into another campaign |
| Move lead to campaign | Moves the lead into another campaign |
| Move lead to campaign (keep state) | Moves the lead but preserves its current status/weight |
| Delete campaign lead | Removes the lead from this campaign |
| Message the assigned agent | Sends an in-app message to the lead's agent |
| Delete lead | Deletes the underlying lead (not recommended) |
| Send remote HTTP request | Calls an external URL (server- or client-side) |
| Update remote adapter comment only | Comments on the CRM record without changing status |
| Update remote adapter fields | Writes lead data back to the CRM |
| Update remote adapter data with ID | Writes CRM data using the adapter record ID |
| Send call data | Sends a call-detail record to the CRM adapter |
| Send mail (adapter template) | Sends an email via a mail-adapter template |
| Send SMS (adapter template) | Sends an SMS via a template (the older SMS action is deprecated) |
| Send SMS with same caller ID | Sends an SMS from the lead's caller ID |
| Send WhatsApp Business message | Sends a WhatsApp Business template message |
| Send WhatsApp Business (same caller ID) | Sends a WhatsApp Business message from the lead's number |
| Toggle AMD for the lead | Turns answering-machine detection on/off for this lead |
| Set outbound IVR | Turns the outbound IVR on/off for this lead |
| Override outbound IVR recording | Uses a specific IVR recording for this lead |
| Override trunk | Forces a specific trunk for this lead's calls |
| Send remote adapter EEA request | Sends an EEA request to the CRM adapter |
Status → Behavior Cheat Sheet
What a standard campaign does for each common status, at a glance:
| Status | What it means | What the rules do |
|---|---|---|
| Busy | The lead is on another call | Short freeze; retry with a widening gap |
| No Answer | No pickup in ~20–30 s | Same escalating retry as Busy |
| Voicemail | Voicemail was reached | Same escalating retry |
| Failed To Connect | Could not reach the number (out of coverage) | Short freeze; after repeats, longer; ×9 in a row → Invalid Phone |
| System – Answer (Dropped) | The lead answered but no agent was free | Reserve an agent (ratio-1) and retry in ~5 min |
| Not Interested | The lead declined | Freeze 30 → 90 → 365 days as it repeats |
| Invalid Phone / Language Barrier / Underage / Wrong Person | The lead cannot be worked | Stop dialing (365-day freeze) |
| Deposit / Do Not Call | Converted, or asked never to be called | Stop dialing and blacklist the number |
| General Meeting | A call-back time was set by any agent | Free the lead, freeze until around that time (3 days) |
| Personal Meeting | A specific advisor will call at an agreed time | Lock to that advisor, freeze 14 days |
| Duplicate | The lead already exists | Marked Duplicate, dropped from dialing |
How to View Your Campaign's Rules
- Go to Leads & Campaigns > Campaigns. Stay on the Campaigns tab or open All Campaigns.
- Expand the group with the campaign, or click Expand All.
- At the end of the campaign's line, click Frequent in the Actions column.
- Select Rules.
- On the page that opens, rules are organized into groups. Click + Expand All to open them, or + to open one group.
Related Guides
Getting Help
Submit a support ticket or contact your account manager to review or change your campaign rules.
Updated about 1 hour ago