Compliance packs
The reusable rulebook your agent obeys automatically - enforced before a single number is dialed.
A compliance pack is a rulebook your agent follows on every call, without you having to think about it. You set the rules once - what hours it’s allowed to call, whose numbers it must never touch, how often it can chase the same person - and from then on the platform enforces them for you. The important part: it enforces them before a number is ever dialed, not as a report you read afterward when the damage is already done.
Think of it as a responsible dispatcher sitting between your campaign and the phone line. Every time your agent is about to call someone, the dispatcher checks that call against the rulebook. If the call breaks a rule - it’s 10pm, or the person is on the do-not-call list, or you already rang them twice today - the dispatcher quietly holds the call and writes down why. Nothing dodgy ever leaves the building.
Why this matters (in plain terms): in India, calling people outside permitted hours, ignoring the Do-Not-Disturb register, or hammering someone with repeat calls isn’t just rude - it can breach TRAI / DLT rules and land your business with penalties or a blocked number. A compliance pack turns “please remember all the telecom rules” into “the system won’t let you break them.” That protection is the whole point.
What a pack actually controls
A pack is a list of gates. Each gate is one rule the call has to pass. You switch gates on, set their numbers, and the pack is done. There are six gates in total, and we’ll go through every one below - what it does, why it protects you, and how to set it.
Two of them - the calling window and DND scrubbing - are marked Always on. You can’t turn them off in any pack, and if a pack somehow forgets them, the platform adds them back with strict defaults. This is a deliberate safety floor: there is no way to configure an agent that dials round the clock or that ignores the do-not-call list. You can always make a pack stricter; you can never make it unsafe.
The gates, one by one
Calling window - always on
What it does: restricts calls to a range of local hours. The agent will only dial between your start hour and end hour, in the timezone you pick.
Why it protects you: telecom regulators set hard limits on when businesses may cold-call people. TRAI’s telemarketing window is 9am–9pm; the stricter RBI window for lending and collections is 8am–7pm. Dial outside those hours and you’re in breach. This gate makes that structurally impossible.
How to set it:
- Start hour and End hour - the local hours between which calling is allowed (e.g. 9 to 21 means “9am up to but not including 9pm”).
- Timezone - the clock the hours are measured against. You can choose India (IST), Gulf, Singapore, Philippines, UK, US Eastern, US Pacific, or Australia Eastern. IST is the default.
The window has a legal ceiling you can’t push past. The editor won’t let you set a start earlier than 8am or an end later than 9pm, because those are the outer bounds of the rules (India TRAI 9–21, RBI 8–19, and US TCPA 8–21). You can go narrower than that - an 8–19 collections window is stricter and perfectly fine - but you can never widen it into the night.
- Tip: if you’re calling across regions, set the timezone to match where your customers are, not where your office is. A Mumbai team calling Dubai numbers should use the Gulf timezone so the window lands on the customer’s evening, not yours.
DND / Do-not-call scrubbing - always on
What it does: before dialing, it checks the number against three do-not-call lists and blocks the call if the number appears on any of them:
- The person’s own opt-out status on their contact record.
- Your workspace’s private do-not-call list - a phone-level block that sticks even if the same contact gets re-imported later under a different reference.
- The national DND / preference (NCPR) register.
Why it protects you: calling someone who has registered on the DND list, or who has already told you to stop, is one of the fastest ways to draw a complaint and a regulatory strike. When a caller says “take me off your list” mid-call, the agent records that opt-out, and this gate makes sure they’re never dialed again. Honoring opt-outs isn’t optional - it’s the law, and it’s basic decency.
How to set it: nothing to configure. It’s on in every pack, always, and it can’t be switched off.
Opt-outs are permanent and workspace-wide. Once a number is on your do-not-call list, every agent and every campaign in the workspace skips it - not just the one that got the complaint.
Frequency cap
What it does: limits how many times you can call the same person, and forces a gap between attempts.
Why it protects you: repeatedly ringing the same number is harassment in the eyes of a regulator (and the person on the other end). A frequency cap is your proof that you contact people a reasonable amount and back off between tries. It also just makes your outreach less annoying, which means better answer rates.
How to set it:
-
Max per day - how many times one person can be attempted in a single day (1 to 10; default 3). Once you hit the cap, that number is skipped for the rest of the day.
-
Cooldown (minutes) - the minimum wait between two attempts to the same person (0 to 1440 minutes, i.e. up to a full day; default 60). Even if you’re under the daily cap, the agent won’t call again until the cooldown has passed.
-
Tip: for anything sensitive (collections, overdue payments) go easy - a low daily cap and a long cooldown (the lending pack uses 3 per day with a 4-hour gap). For a warm callback someone actually asked for, a shorter cooldown is fine.
DLT registration
What it does: requires the campaign to be using a DLT-approved template before any call goes out. If the campaign has no approved template attached, the call is blocked.
Why it protects you: in India, commercial voice and SMS content has to be pre-registered on the DLT (Distributed Ledger Technology) platform. Using unregistered content gets your messages rejected and your sender identity flagged. Turning this gate on means an agent literally cannot run a campaign until its template is approved - so you never accidentally send unregistered content at scale.
How to set it: switch the gate on (no parameters). Then make sure the campaign points at an approved DLT template. Keep your templates current - if a template lapses or is rejected, the gate will hold the calls until it’s fixed.
Pre-call notification
What it does: requires that the person was notified in advance before a recovery agent contacts them, and blocks the call until that prior notice is on record.
Why it protects you: this is a lending / collections rule. Recovery-agent contact rules require the borrower be told beforehand that a recovery agent has been assigned. This gate refuses to place the call until that pre-notification is confirmed - so the required paper trail exists before anyone picks up the phone.
How to set it: switch it on (no parameters). Only relevant if you’re doing regulated recovery / collections work - most verticals don’t need it.
Occasion suppression
What it does: blocks calling on specific restricted dates - public holidays, festivals, or any day you’ve marked as off-limits.
Why it protects you: some regulations (and plenty of good-taste conventions) prohibit commercial calls on certain days. Rather than remembering to pause campaigns by hand every holiday, you add those dates to your suppression calendar once and this gate silently skips them.
How to set it: switch it on (no parameters). The dates themselves come from your Suppressed dates list, which you manage on the Compliance page - add the days you want to block and every pack with this gate on will respect them.
Two more protections that are always on
Some safeguards aren’t gates you toggle - they’re guarantees the platform builds into every regulated call automatically, no matter which pack you pick.
AI + recording disclosure
At the very start of the call, before anything else, the agent tells the caller they’re speaking with an automated / AI system - and, if the call is being recorded, that it’s being recorded. This isn’t left to the AI to remember; it’s written into the opening line in code, so it’s spoken every single time regardless of what the model would otherwise say.
It’s spoken in the agent’s own language (a Tamil agent discloses in Tamil, a Hindi agent in Hindi) - a disclosure the caller can’t understand doesn’t really disclose anything. And if the conversation switches language partway through, the caller hears the disclosure once more in the language they’re now being addressed in.
Why: Indian regulation requires callees be told they’re talking to an automated system, and consent laws require they know when they’re being recorded. Guaranteeing this in code - not in a prompt the model might drift from - is what keeps it airtight.
Consent capture
Key moments in a call are recorded as tamper-evident consent records: agreement to data processing, agreement to recording, and - crucially - an opt-out when someone asks you to stop calling. These are stored in an append-only, integrity-hashed chain, so nobody can quietly delete or reorder a record after the fact. If you ever have to prove when someone opted out or that they consented, the proof holds up.
Built-in packs vs. your own
You don’t have to build a pack from scratch. The platform ships with maintained, versioned built-in packs for the common cases:
- Generic safe (
generic-safe@1) - a light, sensible default for low-regulation work like support, scheduling, and delivery. Just a 9am–9pm window, DND scrubbing, and a gentle 3-per-day cap. This is also the fallback: if an agent’s pack is ever missing or unrecognized, the platform runs it under this safe pack rather than with no rules at all. - India telemarketing (
india-telemarketing@1) - for general Indian outbound (sales, lead-qualification, reminders). Adds the TRAI 9–9 window, DLT registration, and DND/NCPR scrubbing, without the lending-only extras. - India lending (
india-lending@1) - the strictest pack, for lending and collections. The stricter 8am–7pm window, DLT, recovery-agent pre-notification, occasion suppression, DND, and a cautious 3-per-day cap with a 4-hour cooldown.
Built-in packs are locked - you can’t edit them directly (that’s what keeps them reliably up to date). But you can clone any of them into a custom pack and adjust it: change the window, loosen or tighten the cap, add a gate. Author it once, and reuse it across as many agents as you like.
Start by cloning, not from a blank pack. Clone the built-in that’s closest to your situation and tweak the two or three things that differ. You inherit all the safe defaults instead of trying to remember them.
The guided editor
You build and edit custom packs from Compliance → Create pack (or the clone / edit buttons on any custom pack). The editor is deliberately simple:
- Name the pack something you’ll recognise later - “Collections – strict” beats “Pack 2”.
- Pick the gates - each gate is a row you tick to enable. The two Always on gates are shown but locked on.
- Set the parameters - when a gate has settings (hours, timezone, caps), they appear indented under it once it’s enabled. The editor enforces the legal limits as you type, so you can’t accidentally save an out-of-bounds window.
- Save. You must enable at least one gate. The pack is now available to assign.
Everything you set is validated again on the server, so a pack can never be saved with rules that fall outside what’s legally allowed.
Assigning a pack to an agent
Pick a pack in the Compliance pack step of the agent builder. From then on, every call that agent makes - from any campaign - is checked against that pack. The builder even suggests a pack based on the agent’s language and vertical, so you usually just confirm the sensible default.
- Inbound calls aren’t gated the same way - the caller dialed you, so the calling-window and frequency rules don’t apply. But opt-outs are still honored: if someone on your do-not-call list rings in, the platform still respects that they asked not to be contacted.
- Deleting a pack that’s in use doesn’t leave those agents unprotected. They fall back to the safe default pack automatically. The Compliance page shows you how many agents use each pack before you delete it.
How enforcement actually runs
When a campaign is about to place a call, the number is run through the assigned pack’s gates in order. The moment any gate says “no” - outside the window, on DND, over the cap, no approved DLT template - the call is not placed, and the reason is recorded. That reason shows up in your reports, so you can always see exactly why a number was skipped (“outside 9:00–21:00”, “daily cap reached”, “number on DND register”) rather than wondering why a call never happened.
Because the mandatory floor (calling window + DND) is injected even into packs that forget it, there is no configuration - accidental or otherwise - that results in an unprotected dial. Stricter is always allowed; unsafe never is.
The one-line summary: you describe your rules once, the platform enforces them on every call before it’s placed, and it keeps a clear record of anything it blocked. That’s what lets you scale calling without a compliance officer watching every dial.
For the wider picture of how this fits with data retention, grievances, and DLT, see Compliance overview.
Next: Test your agent → - try your agent on a simulated and a real call before it goes live.