osmTalk Docs
Campaigns

DNC List & Compliance

Do-Not-Call list, opt-out detection, and TCPA / TRAI guidance.

Outbound voice campaigns are heavily regulated. osmTalk gives you the primitives to stay compliant; the legal responsibility for who you call still sits with you and your legal team.

DNC list

Every organization has its own Do-Not-Call list. Numbers on the list are skipped automatically the moment the campaign dialer tries to call them — the lead gets status: "dnc_blocked" without using an attempt.

Add to DNC

Via the TypeScript SDK (recommended):

import { Osmtalk } from "@osmapi/osmtalk-sdk";

const client = new Osmtalk({ apiKey: process.env.OSMTALK_API_KEY! });

// Single entry
await client.dnc.add("+919876543210", {
  reason: "Customer requested via email",
  source: "manual",
});

// Bulk — useful when importing a regulator's DNC registry
await client.dnc.bulkAdd([
  { phoneNumber: "+919876543210", reason: "Customer opt-out", source: "opt_out" },
  { phoneNumber: "+919876543211", reason: "Regulator list", source: "registry" },
]);

// Inspect what's on the list
const entries = await client.dnc.list();

// Remove someone (e.g. customer re-consented)
await client.dnc.remove("dnc_xxx");

Or via raw HTTP:

curl -X POST https://api.osmtalk.com/api/campaigns/dnc \
  -H "Authorization: Bearer $OSMTALK_API_KEY" \
  -d '{
    "phoneNumber": "+919876543210",
    "reason": "Customer requested via email",
    "source": "manual"
  }'

Sources track where the entry came from:

sourceMeaning
manualAdded via dashboard or API
opt_outAuto-added when the bot detected opt-out language (see below)
importedLoaded from a third-party registry
apiPosted by an external system

Bulk import

For Indian customers, the National Do Not Call (NDNC) registry is the legal source of truth. Export it and bulk-import:

curl -X POST https://api.osmtalk.com/api/campaigns/dnc/bulk \
  -H "Authorization: Bearer $OSMTALK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "entries": [
      { "phoneNumber": "+919876543210", "source": "imported", "reason": "NCCP TRAI" },
      { "phoneNumber": "+919876543211", "source": "imported", "reason": "NCCP TRAI" }
    ]
  }'

Up to 50,000 entries per request. Duplicates are silently ignored.

List and remove

curl https://api.osmtalk.com/api/campaigns/dnc
curl -X DELETE https://api.osmtalk.com/api/campaigns/dnc/{id}

Opt-out keyword detection

When you mention "stop", "remove me", "unsubscribe", "don't call me", etc., regulations require you to immediately add the caller to your DNC.

osmTalk does this via the post-call analyzer. Enable enableSuccessEvaluation on the agent and include opt-out detection in your successCriteria or summaryPrompt:

{
  "postCallAnalysis": {
    "enabled": true,
    "schema": [
      {
        "name": "requested_optout",
        "type": "boolean",
        "description": "Did the caller ask to be removed from the list, stop receiving calls, or say 'do not call'?"
      }
    ]
  }
}

Then in your webhook handler, when analysis.requested_optout === true, POST to /api/campaigns/dnc to add their number.

A future native integration will auto-DNC on detection — track in the changelog.

US/CA/EU law requires the agent to disclose the call is being recorded. Enable a one-line preamble at the start of every call:

curl -X PUT https://api.osmtalk.com/api/settings/compliance \
  -d '{
    "enableConsentDisclosure": true,
    "consentDisclosureText": "Hi, this call may be recorded for quality and compliance."
  }'

The bot speaks this line before its welcome message on every call when enabled.

India — TRAI

  • Calls must be made between 9 AM and 9 PM IST to non-DND numbers
  • Calls to NDNC-registered numbers are prohibited
  • Maintain consent records — keep your webhook handler logging caller-grants for at least 3 years

USA — TCPA

  • Pre-recorded / artificial-voice calls require prior express written consent (PEWC) for marketing
  • B2B is exempt for many use cases but transparency rule still applies
  • Maintain DNC for 5 years
  • Dial only 8 AM – 9 PM local recipient time

EU — GDPR + ePrivacy

  • Consent required before automated calls
  • Recipient must be able to opt out within the call ("press X to be removed")
  • Recordings are personal data — define a retention policy and offer deletion

Built-in protections osmTalk gives you

FeatureWhat it does
DNC listHard-blocks calls to listed numbers
Dialing windowEnforces per-timezone call hours
Consent disclosureAuto-played preamble on every call
Recording retentionConfigurable (default 90 days)
Audit trailEvery dial + outcome stored against the call ID
Webhook signingHMAC-signed events for tamper-evident logs
PII-scrubbing recording fields(planned for Phase X — currently store unscrubbed)

What you're responsible for

  • Lawful basis for calling each number (opt-in records, contract, legitimate interest)
  • DNC scrubbing before upload to campaigns — osmTalk re-checks at dial time but the primary scrub should be your CRM's
  • Localization — providing the right timezone per recipient when they span jurisdictions
  • Disclosures — keeping consentDisclosureText accurate for the jurisdictions you operate in
  • Cooperation with regulators — being able to produce the call recording, transcript, and consent record on demand