Running campaigns at scale means balancing outreach efficiency with contact respect. The DND & Callback features ensure your campaigns automatically honor opt-out preferences and intelligently handle follow-up requests — without any manual intervention.Do Not Disturb (DND) prevents your campaigns from reaching contacts who have opted out, while Callback Scheduling automatically re-engages contacts who request a follow-up at a specific time during a conversation.
Both DND and Callback are driven by post-call analysis. After every call, the AI assistant analyzes the conversation and can automatically set DND preferences or schedule callbacks based on what the contact said during the call.
DND is a per-contact preference system that prevents campaigns from reaching contacts who have opted out. It is checked automatically at multiple stages of campaign execution — before calls, before pre-call messages, and before post-call messages.
Every contact has notification preferences with three independent communication channels:
Call
Controls whether the contact can receive phone calls from your campaigns.
SMS
Controls whether the contact can receive text messages, including pre-call and post-call notifications.
Email
Controls whether the contact can receive email notifications.
A channel is reachable when it is enabled and there are no active DND entries for the source trying to reach the contact. By default, all channels are enabled and contacts have no DND entries — meaning they are reachable on all channels.A channel is blocked when either:
The channel is disabled — this blocks all communication on that channel from every source, OR
There is an active DND entry (enabled and not expired) matching the source (campaign or assistant) trying to reach the contact
Each channel (call, SMS, email) has an enabled/disabled toggle. Disabling a channel is the broadest level of opt-out — it blocks all communication on that channel from every source, regardless of individual DND entries.
For more granular control, DND entries block specific sources from reaching a contact on a specific channel — while leaving other sources unaffected. A DND entry must be explicitly created and enabled to take effect.DND Source Types include:
Campaign: Block a specific campaign from reaching the contact.
Assistant: Block all campaigns using a particular AI assistant.
Workflow: Block communications triggered by a specific workflow.
Team: Block all communications from an entire team.
Strategic Use: Source-specific DND is ideal when a contact opts out of one type of outreach (e.g., marketing calls) but should still receive others (e.g., appointment reminders).
DND entries can optionally include an expiry time. Once the expiry passes, the entry is no longer active and the contact becomes reachable again from that source — no manual action needed. If no expiry is set, the DND entry stays active until it is explicitly disabled or removed.
Multi-Channel Independence
DND is evaluated independently per channel. A contact might have DND active for calls from a specific campaign but still receive SMS messages from that same campaign — unless SMS DND is also set.
DND can be set automatically based on what a contact says during a call. After every call, the AI assistant performs post-call analysis and can detect DND intent — for example, if the contact says “stop calling me” or “remove me from your list.”When a DND disposition is detected, the system automatically creates two DND entries for the contact on the call channel:
1
Assistant-Level DND
A DND entry is created for the AI assistant that handled the call. This blocks the contact from being called by any campaign using the same assistant.
2
Campaign-Level DND
A DND entry is created for the specific campaign. This blocks the contact from being called again by that campaign, even if the assistant changes.
If the contact specifies a time-based opt-out (e.g., “don’t call me this week”), the DND entries are created with an appropriate expiry time. Otherwise, they are created as permanent.
DND validation occurs at three points during campaign execution:
1
Before Placing Calls
When a campaign call is being validated, the system checks whether the contact has an active DND entry on the call channel for the current campaign or assistant. If DND is active, the call is marked as failed and never placed.
2
Before Sending Pre-Call Messages
For multi-modal campaigns with pre-call SMS enabled, the system checks the SMS channel for active DND before sending the message. If DND is active, the pre-call message is silently skipped.
3
Before Sending Post-Call Messages
After a call ends, multi-modal campaigns can send outcome-based SMS messages (e.g., a follow-up message if the call was answered, or a different message if it went to voicemail). The system checks the SMS channel for active DND before sending these messages as well. If DND is active, the post-call message is skipped.
DND filtering happens automatically — there is no way to override or bypass it for individual calls. If a contact has DND active, the only way to reach them is to remove or update their DND preference.
Contacts blocked by DND appear in your campaign reports with a failed status. This gives you full visibility into how many contacts were filtered and why.
The callback system automatically schedules follow-up calls when a contact requests to be called back. After every call, the AI assistant performs post-call analysis and detects callback intent — for example, “call me back tomorrow at 10 AM” or “I’m busy, try again later.”
After the call ends, the AI assistant analyzes the conversation and extracts callback details: whether a callback was requested, the reason, and the preferred time window(s).
2
DND Check
Before scheduling, the system checks whether the contact has active DND on the call channel for the campaign or assistant. If DND is active, the callback is not scheduled.
3
Original Campaign Check
The system first tries to schedule the callback within the original campaign — but only if the campaign is still active (processing or pending) and the requested callback time falls within the campaign’s schedule.
4
Internal Callback Campaign (Fallback)
If the original campaign is no longer active or the callback time falls outside its schedule, the system falls back to an Internal Callback Campaign. This is a dedicated campaign that runs on a 7-day rolling window, ensuring callbacks can be fulfilled even after the original campaign has ended.
5
Call is Queued with Override Schedule
The callback call is added to the campaign with an override schedule — a specific time window matching the contact’s request. The campaign scheduler places the call only within that window.
6
Callback Executes Automatically
When the scheduled time arrives, the system places the callback. Dynamic variables and context from the original call are carried forward so the AI assistant has full context.
When a callback can’t be fulfilled by the original campaign, the system uses an Internal Callback Campaign — a dedicated, system-managed campaign that ensures no callback request is lost.
Automatic Creation
An Internal Callback Campaign is automatically created the first time a callback overflows from a specific source campaign. It is named Internal Callback of {source_campaign_id} and requires no manual setup.
7-Day Rolling Window
Each Internal Callback Campaign runs on a 7-day schedule window. When a new callback arrives and the existing window doesn’t cover the requested time, the system appends a new 7-day window while preserving any still-valid windows for pending callbacks.
Smart Reactivation
If the Internal Callback Campaign has already completed or been aborted, the system automatically reactivates it when a new callback arrives. This ensures the campaign is always ready to handle follow-ups.
Inherits Source Campaign Settings
The Internal Callback Campaign inherits settings from the original campaign, including assistant phone numbers, timezone, retry policies, and review requirements. If the original campaign is unavailable, sensible defaults are used.
Controlled Concurrency
Internal Callback Campaigns run with a maximum of 2 parallel calls by default, ensuring callbacks are handled without overwhelming the system.
The Internal Callback Campaign is fully automatic — it is created, launched, reactivated, and extended without any manual intervention. You may see these campaigns in your campaign list with names starting with “Internal Callback of.”
When the AI assistant detects a callback request, it extracts specific time windows from the conversation. However, not every contact specifies an exact time:
Specific Time Requested
If the contact says “call me at 3 PM tomorrow,” the system creates a callback window starting at the requested time with a default duration of 60 minutes. The callback will be placed within this window.
No Specific Time
If the contact simply says “call me back later” without specifying a time, the AI assistant determines an appropriate window based on the conversation context.
Dynamic variables from the original call are automatically carried forward to the callback. This means the AI assistant can pick up where the previous conversation left off — referencing the contact’s name, appointment details, or any data collected during the first call.
DND and Callback interact at multiple points in the campaign flow:
1
During Post-Call Analysis
If the AI detects both a DND request and a callback request in the same call, the DND entries are created first. The callback scheduling then checks DND — and if the newly created DND blocks the callback, it is not scheduled.
2
Before Callback Execution
When a callback campaign call is about to be placed, it goes through the same validation pipeline as any other campaign call — including DND checks. If the contact has opted out via DND since the callback was scheduled, the callback is blocked.
DND preferences always take precedence over pending callbacks. If a contact requests a callback during a call but also opts out (or opts out later before the callback executes), the callback will be blocked.
Keep DND Lists Current: Regularly sync your organization’s DND preferences with your CRM or contact management system. Stale DND data can lead to compliance issues or missed outreach opportunities.
Monitor DND Rates
If your DND exclusion rate is unusually high, review your contact sourcing. A high DND rate may indicate stale or improperly sourced contact lists that need cleaning.
Leverage Context Carry-Forward
Callbacks where the AI assistant has full context from the previous call deliver a significantly better contact experience. Ensure your campaigns use dynamic variables so the callback conversation can pick up where the original left off.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Interactly API","colors":{"primary":"#1E6EFF","light":"#1E6EFF","dark":"#1E6EFF"},"logo":{"light":"https://mintcdn.com/interactly-qa/rQv06DcAu00ifyO5/logo/logo_light.svg?fit=max\u0026auto=format\u0026n=rQv06DcAu00ifyO5\u0026q=85\u0026s=eb6e3c5ae13dedc06c7f4af81bffb90d","dark":"https://mintcdn.com/interactly-qa/rQv06DcAu00ifyO5/logo/logo_dark.svg?fit=max\u0026auto=format\u0026n=rQv06DcAu00ifyO5\u0026q=85\u0026s=7df0871e3b8149b8337d8f907a078ed7"},"favicon":"https://mintcdn.com/interactly-qa/20698e0YpWVbNAWm/logo/favicon.png?fit=max\u0026auto=format\u0026n=20698e0YpWVbNAWm\u0026q=85\u0026s=d20934ecbb58c578651e1c26eb7e922a","api":{"playground":{"display":"interactive","proxy":false}},"appearance":{"default":"light"},"navbar":{"links":[{"href":"https://interactly.ai","label":"Website"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard-qa.interactly.ai"}},"footer":{"socials":{}},"seo":{"indexing":"all"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"interactly-qa","hasAudioNarration":false,"actualSubdomain":"interactly-qa","customDomains":["docs-qa.interactly.ai"],"gitSource":{"type":"github","owner":"interactly","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a548c02370bcde85027ad75","collectionId":"0357f8f2-f8b1-4504-a8e2-46e87b2a8016","schemaVersion":"v3"},"entitlements":{},"buildId":"6a548c02370bcde85027ad75:success","clientVersion":"0.0.3939","searchFilterCounts":[{"language":"default","tag":"API Reference","count":256},{"language":"default","tag":"Workflows","count":140},{"language":"default","tag":"Integrations","count":61},{"language":"default","tag":"Campaigns","count":42},{"language":"default","tag":"APIs","count":38},{"language":"default","tag":"Documentation","count":33},{"language":"default","tag":"Tools","count":15},{"language":"default","tag":"Prompts","count":13},{"language":"default","tag":"Simulations","count":13},{"language":"default","tag":"Integrations Resource Records V2","count":12}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"campaigns/dnd-and-callback","slug":"/campaigns/dnd-and-callback","pageMetadata":{"title":"DND \u0026 Callback","subtitle":"Manage contact preferences and automate follow-up scheduling","slug":"campaigns/dnd-and-callback","description":"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.","href":"/campaigns/dnd-and-callback"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,hr:`hr`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,Heading,Info,Step,Steps,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`1`,id:`overview`,children:`Overview`}),`\n`,_jsxs(_components.p,{children:[`Running campaigns at scale means balancing outreach efficiency with contact respect. The `,_jsx(_components.strong,{children:`DND \u0026 Callback`}),` features ensure your campaigns automatically honor opt-out preferences and intelligently handle follow-up requests — without any manual intervention.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Do Not Disturb (DND)`}),` prevents your campaigns from reaching contacts who have opted out, while `,_jsx(_components.strong,{children:`Callback Scheduling`}),` automatically re-engages contacts who request a follow-up at a specific time during a conversation.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Both DND and Callback are driven by `,_jsx(_components.strong,{children:`post-call analysis`}),`. After every call, the AI assistant analyzes the conversation and can automatically set DND preferences or schedule callbacks based on what the contact said during the call.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`key-benefits`,children:`Key Benefits`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Regulatory Compliance`,icon:`shield-check`,children:_jsx(_components.p,{children:`Automatically filter out opted-out contacts to stay compliant with telecom regulations and avoid spam flags.`})}),_jsx(Card,{title:`Contact Respect`,icon:`hand`,children:_jsx(_components.p,{children:`Honor opt-out preferences across calls, SMS, and email — at the channel level and even per individual campaign or assistant.`})}),_jsx(Card,{title:`Intelligent Follow-Ups`,icon:`phone-arrow-down-left`,children:_jsx(_components.p,{children:`When a contact says “call me back tomorrow at 10 AM,” the system captures the request and schedules it automatically.`})}),_jsx(Card,{title:`Operational Efficiency`,icon:`bolt`,children:_jsx(_components.p,{children:`Eliminate manual DND filtering and callback tracking — the system handles both seamlessly within the standard campaign flow.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`do-not-disturb-dnd`,children:`Do Not Disturb (DND)`}),`\n`,_jsx(_components.p,{children:`DND is a per-contact preference system that prevents campaigns from reaching contacts who have opted out. It is checked automatically at multiple stages of campaign execution — before calls, before pre-call messages, and before post-call messages.`}),`\n`,_jsx(Heading,{level:`3`,id:`how-dnd-works`,children:`How DND Works`}),`\n`,_jsxs(_components.p,{children:[`Every contact has `,_jsx(_components.strong,{children:`notification preferences`}),` with three independent communication channels:`]}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`Call`,icon:`phone`,children:_jsx(_components.p,{children:`Controls whether the contact can receive phone calls from your campaigns.`})}),_jsx(Card,{title:`SMS`,icon:`message`,children:_jsx(_components.p,{children:`Controls whether the contact can receive text messages, including pre-call and post-call notifications.`})}),_jsx(Card,{title:`Email`,icon:`envelope`,children:_jsx(_components.p,{children:`Controls whether the contact can receive email notifications.`})})]}),`\n`,_jsxs(_components.p,{children:[`A channel is `,_jsx(_components.strong,{children:`reachable`}),` when it is enabled and there are no active DND entries for the source trying to reach the contact. By default, all channels are enabled and contacts have no DND entries — meaning they are reachable on all channels.`]}),`\n`,_jsxs(_components.p,{children:[`A channel is `,_jsx(_components.strong,{children:`blocked`}),` when either:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The channel is `,_jsx(_components.strong,{children:`disabled`}),` — this blocks all communication on that channel from every source, OR`]}),`\n`,_jsxs(_components.li,{children:[`There is an `,_jsx(_components.strong,{children:`active DND entry`}),` (enabled and not expired) matching the source (campaign or assistant) trying to reach the contact`]}),`\n`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`3`,id:`channel-level-toggle`,children:`Channel-Level Toggle`}),`\n`,_jsx(_components.p,{children:`Each channel (call, SMS, email) has an enabled/disabled toggle. Disabling a channel is the broadest level of opt-out — it blocks all communication on that channel from every source, regardless of individual DND entries.`}),`\n`,_jsx(Heading,{level:`3`,id:`source-specific-dnd-entries`,children:`Source-Specific DND Entries`}),`\n`,_jsx(_components.p,{children:`For more granular control, DND entries block specific sources from reaching a contact on a specific channel — while leaving other sources unaffected. A DND entry must be explicitly created and enabled to take effect.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`DND Source Types include:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Campaign:`}),` Block a specific campaign from reaching the contact.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Assistant:`}),` Block all campaigns using a particular AI assistant.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Workflow:`}),` Block communications triggered by a specific workflow.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Team:`}),` Block all communications from an entire team.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Strategic Use:`}),` Source-specific DND is ideal when a contact opts out of one type of outreach (e.g., marketing calls) but should still receive others (e.g., appointment reminders).`]}),`\n`,_jsx(Heading,{level:`3`,id:`dnd-expiry`,children:`DND Expiry`}),`\n`,_jsx(_components.p,{children:`DND entries can optionally include an expiry time. Once the expiry passes, the entry is no longer active and the contact becomes reachable again from that source — no manual action needed. If no expiry is set, the DND entry stays active until it is explicitly disabled or removed.`}),`\n`,_jsx(AccordionGroup,{children:_jsx(Accordion,{title:`Multi-Channel Independence`,icon:`layer-group`,id:`multi-channel-independence`,children:_jsx(_components.p,{children:`DND is evaluated independently per channel. A contact might have DND active for calls from a specific campaign but still receive SMS messages from that same campaign — unless SMS DND is also set.`})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`3`,id:`automatic-dnd-from-post-call-analysis`,children:`Automatic DND from Post-Call Analysis`}),`\n`,_jsx(_components.p,{children:`DND can be set automatically based on what a contact says during a call. After every call, the AI assistant performs post-call analysis and can detect DND intent — for example, if the contact says “stop calling me” or “remove me from your list.”`}),`\n`,_jsxs(_components.p,{children:[`When a DND disposition is detected, the system automatically creates `,_jsx(_components.strong,{children:`two DND entries`}),` for the contact on the call channel:`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Assistant-Level DND`,children:_jsx(_components.p,{children:`A DND entry is created for the AI assistant that handled the call. This blocks the contact from being called by any campaign using the same assistant.`})}),_jsx(Step,{title:`Campaign-Level DND`,children:_jsx(_components.p,{children:`A DND entry is created for the specific campaign. This blocks the contact from being called again by that campaign, even if the assistant changes.`})})]}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`If the contact specifies a time-based opt-out (e.g., “don’t call me this week”), the DND entries are created with an appropriate expiry time. Otherwise, they are created as permanent.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`3`,id:`when-dnd-is-checked`,children:`When DND is Checked`}),`\n`,_jsx(_components.p,{children:`DND validation occurs at three points during campaign execution:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Before Placing Calls`,children:_jsxs(_components.p,{children:[`When a campaign call is being validated, the system checks whether the contact has an active DND entry on the `,_jsx(_components.strong,{children:`call`}),` channel for the current campaign or assistant. If DND is active, the call is marked as `,_jsx(_components.strong,{children:`failed`}),` and never placed.`]})}),_jsx(Step,{title:`Before Sending Pre-Call Messages`,children:_jsxs(_components.p,{children:[`For multi-modal campaigns with pre-call SMS enabled, the system checks the `,_jsx(_components.strong,{children:`SMS`}),` channel for active DND before sending the message. If DND is active, the pre-call message is silently skipped.`]})}),_jsx(Step,{title:`Before Sending Post-Call Messages`,children:_jsxs(_components.p,{children:[`After a call ends, multi-modal campaigns can send outcome-based SMS messages (e.g., a follow-up message if the call was answered, or a different message if it went to voicemail). The system checks the `,_jsx(_components.strong,{children:`SMS`}),` channel for active DND before sending these messages as well. If DND is active, the post-call message is skipped.`]})})]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`DND filtering happens automatically — there is no way to override or bypass it for individual calls. If a contact has DND active, the only way to reach them is to remove or update their DND preference.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`3`,id:`dnd-in-campaign-reports`,children:`DND in Campaign Reports`}),`\n`,_jsxs(_components.p,{children:[`Contacts blocked by DND appear in your campaign reports with a `,_jsx(_components.strong,{children:`failed`}),` status. This gives you full visibility into how many contacts were filtered and why.`]}),`\n`,_jsx(Heading,{level:`3`,id:`contact-statistics`,children:`Contact Statistics`}),`\n`,_jsx(_components.p,{children:`Your contact dashboard provides a quick summary of DND across your organization:`}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`Total Contacts`,icon:`users`,children:_jsx(_components.p,{children:`The total number of contacts in your organization.`})}),_jsx(Card,{title:`DND Active`,icon:`phone-slash`,children:_jsx(_components.p,{children:`Contacts where any channel is disabled or has at least one active (enabled and not expired) DND entry.`})}),_jsx(Card,{title:`Reachable`,icon:`phone`,children:_jsx(_components.p,{children:`Contacts with all channels enabled and no active DND entries — the contacts your campaigns can currently reach.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`callback-scheduling`,children:`Callback Scheduling`}),`\n`,_jsx(_components.p,{children:`The callback system automatically schedules follow-up calls when a contact requests to be called back. After every call, the AI assistant performs post-call analysis and detects callback intent — for example, “call me back tomorrow at 10 AM” or “I’m busy, try again later.”`}),`\n`,_jsx(Heading,{level:`3`,id:`how-callbacks-work`,children:`How Callbacks Work`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Post-Call Analysis Detects Callback`,children:_jsx(_components.p,{children:`After the call ends, the AI assistant analyzes the conversation and extracts callback details: whether a callback was requested, the reason, and the preferred time window(s).`})}),_jsx(Step,{title:`DND Check`,children:_jsxs(_components.p,{children:[`Before scheduling, the system checks whether the contact has active DND on the call channel for the campaign or assistant. If DND is active, the callback is `,_jsx(_components.strong,{children:`not scheduled`}),`.`]})}),_jsx(Step,{title:`Original Campaign Check`,children:_jsxs(_components.p,{children:[`The system first tries to schedule the callback within the `,_jsx(_components.strong,{children:`original campaign`}),` — but only if the campaign is still active (processing or pending) and the requested callback time falls within the campaign’s schedule.`]})}),_jsx(Step,{title:`Internal Callback Campaign (Fallback)`,children:_jsxs(_components.p,{children:[`If the original campaign is no longer active or the callback time falls outside its schedule, the system falls back to an `,_jsx(_components.strong,{children:`Internal Callback Campaign`}),`. This is a dedicated campaign that runs on a `,_jsx(_components.strong,{children:`7-day rolling window`}),`, ensuring callbacks can be fulfilled even after the original campaign has ended.`]})}),_jsx(Step,{title:`Call is Queued with Override Schedule`,children:_jsxs(_components.p,{children:[`The callback call is added to the campaign with an `,_jsx(_components.strong,{children:`override schedule`}),` — a specific time window matching the contact’s request. The campaign scheduler places the call only within that window.`]})}),_jsx(Step,{title:`Callback Executes Automatically`,children:_jsx(_components.p,{children:`When the scheduled time arrives, the system places the callback. Dynamic variables and context from the original call are carried forward so the AI assistant has full context.`})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`3`,id:`internal-callback-campaign`,children:`Internal Callback Campaign`}),`\n`,_jsxs(_components.p,{children:[`When a callback can’t be fulfilled by the original campaign, the system uses an `,_jsx(_components.strong,{children:`Internal Callback Campaign`}),` — a dedicated, system-managed campaign that ensures no callback request is lost.`]}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Automatic Creation`,icon:`wand-magic-sparkles`,id:`automatic-creation`,children:_jsxs(_components.p,{children:[`An Internal Callback Campaign is automatically created the first time a callback overflows from a specific source campaign. It is named `,_jsx(_components.code,{children:`Internal Callback of {source_campaign_id}`}),` and requires no manual setup.`]})}),_jsx(Accordion,{title:`7-Day Rolling Window`,icon:`calendar-week`,id:`7-day-rolling-window`,children:_jsxs(_components.p,{children:[`Each Internal Callback Campaign runs on a `,_jsx(_components.strong,{children:`7-day schedule window`}),`. When a new callback arrives and the existing window doesn’t cover the requested time, the system appends a new 7-day window while preserving any still-valid windows for pending callbacks.`]})}),_jsx(Accordion,{title:`Smart Reactivation`,icon:`rotate`,id:`smart-reactivation`,children:_jsx(_components.p,{children:`If the Internal Callback Campaign has already completed or been aborted, the system automatically reactivates it when a new callback arrives. This ensures the campaign is always ready to handle follow-ups.`})}),_jsx(Accordion,{title:`Inherits Source Campaign Settings`,icon:`copy`,id:`inherits-source-campaign-settings`,children:_jsx(_components.p,{children:`The Internal Callback Campaign inherits settings from the original campaign, including assistant phone numbers, timezone, retry policies, and review requirements. If the original campaign is unavailable, sensible defaults are used.`})}),_jsx(Accordion,{title:`Controlled Concurrency`,icon:`sliders`,id:`controlled-concurrency`,children:_jsxs(_components.p,{children:[`Internal Callback Campaigns run with a maximum of `,_jsx(_components.strong,{children:`2 parallel calls`}),` by default, ensuring callbacks are handled without overwhelming the system.`]})})]}),`\n`,_jsx(Info,{children:_jsx(_components.p,{children:`The Internal Callback Campaign is fully automatic — it is created, launched, reactivated, and extended without any manual intervention. You may see these campaigns in your campaign list with names starting with “Internal Callback of.”`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`3`,id:`callback-window-defaults`,children:`Callback Window Defaults`}),`\n`,_jsx(_components.p,{children:`When the AI assistant detects a callback request, it extracts specific time windows from the conversation. However, not every contact specifies an exact time:`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Specific Time Requested`,icon:`clock`,id:`specific-time-requested`,children:_jsxs(_components.p,{children:[`If the contact says “call me at 3 PM tomorrow,” the system creates a callback window starting at the requested time with a `,_jsx(_components.strong,{children:`default duration of 60 minutes`}),`. The callback will be placed within this window.`]})}),_jsx(Accordion,{title:`No Specific Time`,icon:`question`,id:`no-specific-time`,children:_jsx(_components.p,{children:`If the contact simply says “call me back later” without specifying a time, the AI assistant determines an appropriate window based on the conversation context.`})})]}),`\n`,_jsx(Heading,{level:`3`,id:`context-carry-forward`,children:`Context Carry-Forward`}),`\n`,_jsx(_components.p,{children:`Dynamic variables from the original call are automatically carried forward to the callback. This means the AI assistant can pick up where the previous conversation left off — referencing the contact’s name, appointment details, or any data collected during the first call.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`how-dnd-\u0026-callback-work-together`,children:`How DND \u0026 Callback Work Together`}),`\n`,_jsx(_components.p,{children:`DND and Callback interact at multiple points in the campaign flow:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`During Post-Call Analysis`,children:_jsxs(_components.p,{children:[`If the AI detects both a DND request and a callback request in the same call, the DND entries are created first. The callback scheduling then checks DND — and if the newly created DND blocks the callback, it is `,_jsx(_components.strong,{children:`not scheduled`}),`.`]})}),_jsx(Step,{title:`Before Callback Execution`,children:_jsx(_components.p,{children:`When a callback campaign call is about to be placed, it goes through the same validation pipeline as any other campaign call — including DND checks. If the contact has opted out via DND since the callback was scheduled, the callback is blocked.`})})]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`DND preferences always take precedence over pending callbacks. If a contact requests a callback during a call but also opts out (or opts out later before the callback executes), the callback will be blocked.`})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Keep DND Lists Current:`}),` Regularly sync your organization’s DND preferences with your CRM or contact management system. Stale DND data can lead to compliance issues or missed outreach opportunities.`]})}),`\n`,_jsx(Card,{title:`Monitor DND Rates`,icon:`chart-line`,children:_jsx(_components.p,{children:`If your DND exclusion rate is unusually high, review your contact sourcing. A high DND rate may indicate stale or improperly sourced contact lists that need cleaning.`})}),`\n`,_jsx(Card,{title:`Leverage Context Carry-Forward`,icon:`message`,children:_jsx(_components.p,{children:`Callbacks where the AI assistant has full context from the previous call deliver a significantly better contact experience. Ensure your campaigns use dynamic variables so the callback conversation can pick up where the original left off.`})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"DND \u0026 Callback","subtitle":"Manage contact preferences and automate follow-up scheduling","slug":"campaigns/dnd-and-callback","description":"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.","href":"/campaigns/dnd-and-callback"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":1,"children":[]},{"title":"Key Benefits","slug":"key-benefits","depth":2,"children":[]},{"title":"Do Not Disturb (DND)","slug":"do-not-disturb-dnd","depth":2,"children":[{"title":"How DND Works","slug":"how-dnd-works","depth":3,"children":[]},{"title":"Channel-Level Toggle","slug":"channel-level-toggle","depth":3,"children":[]},{"title":"Source-Specific DND Entries","slug":"source-specific-dnd-entries","depth":3,"children":[]},{"title":"DND Expiry","slug":"dnd-expiry","depth":3,"children":[]},{"title":"Automatic DND from Post-Call Analysis","slug":"automatic-dnd-from-post-call-analysis","depth":3,"children":[]},{"title":"When DND is Checked","slug":"when-dnd-is-checked","depth":3,"children":[]},{"title":"DND in Campaign Reports","slug":"dnd-in-campaign-reports","depth":3,"children":[]},{"title":"Contact Statistics","slug":"contact-statistics","depth":3,"children":[]}]},{"title":"Callback Scheduling","slug":"callback-scheduling","depth":2,"children":[{"title":"How Callbacks Work","slug":"how-callbacks-work","depth":3,"children":[]},{"title":"Internal Callback Campaign","slug":"internal-callback-campaign","depth":3,"children":[]},{"title":"Callback Window Defaults","slug":"callback-window-defaults","depth":3,"children":[]},{"title":"Context Carry-Forward","slug":"context-carry-forward","depth":3,"children":[]}]},{"title":"How DND \u0026 Callback Work Together","slug":"how-dnd-\u0026-callback-work-together","depth":2,"children":[]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"interactly-qa","siteName":"Interactly API","title":"DND \u0026 Callback - Interactly API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-22T11:34:43.420Z","originalFileLocation":"campaigns/dnd-and-callback.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Interactly API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"DND \u0026amp; Callback - Interactly API\">\u003cmeta data-mint-head property=\"og:description\" content=\"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Interactly API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://interactly-qa.mintlify.app/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=DND+%26+Callback\u0026amp;description=A+comprehensive+guide+to+understanding+Do+Not+Disturb+%28DND%29+preferences+and+automated+callback+scheduling+for+your+campaigns.\u0026amp;theme=f91e2e5da38dddab758a5d35\u0026amp;signature=a04321552b3c69e9c449135200e3fa890f86a28a6710a79cae336a51d095d1db\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"DND \u0026amp; Callback - Interactly API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://interactly-qa.mintlify.app/_mintlify/api/og/v2?division=Campaigns\u0026amp;title=DND+%26+Callback\u0026amp;description=A+comprehensive+guide+to+understanding+Do+Not+Disturb+%28DND%29+preferences+and+automated+callback+scheduling+for+your+campaigns.\u0026amp;theme=f91e2e5da38dddab758a5d35\u0026amp;signature=a04321552b3c69e9c449135200e3fa890f86a28a6710a79cae336a51d095d1db\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/interactly-qa/ztkxC4YjXG9OzWnh/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Interactly API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1E6EFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/campaigns/dnd-and-callback.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs-qa.interactly.ai/#organization\",\"name\":\"Interactly API\",\"url\":\"https://docs-qa.interactly.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/interactly-qa/rQv06DcAu00ifyO5/logo/logo_light.svg?fit=max\u0026auto=format\u0026n=rQv06DcAu00ifyO5\u0026q=85\u0026s=eb6e3c5ae13dedc06c7f4af81bffb90d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs-qa.interactly.ai#website\",\"name\":\"Interactly API\",\"url\":\"https://docs-qa.interactly.ai\",\"publisher\":{\"@id\":\"https://docs-qa.interactly.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback#webpage\",\"url\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback\",\"name\":\"DND \u0026 Callback\",\"description\":\"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.\",\"dateModified\":\"2026-04-22T11:34:43.420Z\",\"isPartOf\":{\"@id\":\"https://docs-qa.interactly.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Campaigns\",\"item\":\"https://docs-qa.interactly.ai/campaigns/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DND \u0026 Callback\",\"item\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback#article\",\"headline\":\"DND \u0026 Callback\",\"name\":\"DND \u0026 Callback\",\"description\":\"A comprehensive guide to understanding Do Not Disturb (DND) preferences and automated callback scheduling for your campaigns.\",\"url\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback\",\"mainEntityOfPage\":{\"@id\":\"https://docs-qa.interactly.ai/campaigns/dnd-and-callback#webpage\"},\"dateModified\":\"2026-04-22T11:34:43.420Z\",\"publisher\":{\"@id\":\"https://docs-qa.interactly.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs-qa.interactly.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Interactly API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Interactly API","nav":{"global":null,"tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/welcome","groups":[]}]},{"tab":"Documentation","groups":[{"group":"General","pages":[{"title":"Welcome","href":"/general/introduction"},{"title":"Support","href":"/general/support"}]},{"group":"Quickstart","pages":[{"title":"Dashboard","href":"/quickstart/dashboard"},{"title":null,"href":"/quickstart/client-SDK"}]},{"group":"Calls","pages":[{"title":"Live Call Control","href":"/calls/call-features"}]},{"group":"Campaigns","pages":[{"title":"Campaigns","href":"/campaigns/introduction"},{"title":"Single-Modal Campaign","href":"/campaigns/single-modal-campaign"},{"title":"Multi-Modal Campaign","href":"/campaigns/multi-modal-campaign"},{"title":"Retry Policy of Campaigns","description":"A comprehensive guide to understanding, configuring, and optimizing automated retry strategies for your campaigns.","href":"/campaigns/retry-policy-of-campaigns"},{"title":"DND \u0026 Callback","href":"/campaigns/dnd-and-callback"}]},{"group":"Workflows","pages":[{"title":"Workflows","description":"Learn about Interactly's workflow system — how to build, version, simulate, and execute agentic workflows powered by LLMs, tools, and configurable node graphs","href":"/workflows/introduction"},{"title":"Building a Workflow","href":"/workflows/building-a-workflow"},{"title":"Node Types","href":"/workflows/node-types"},{"title":"Workflow Versioning","href":"/workflows/workflow-versioning"},{"title":"Workflow Simulation","href":"/workflows/workflow-simulation"},{"title":"Tools \u0026 Integrations","href":"/workflows/tools-and-integrations"},{"title":"Scheduled \u0026 Triggered Workflows","href":"/workflows/scheduled-and-triggered-workflows"},{"title":"Workflow Webhooks","href":"/workflows/workflow-webhooks"}]},{"group":"Assistant Tools","pages":[{"title":"Assistant Tools","href":"/assistant-tools/introduction"},{"title":"Testing Tools","href":"/assistant-tools/testing-tools"}]},{"group":"Webhooks","pages":[{"title":"Webhook Events Overview","href":"/webhooks/events/introduction"},{"title":"Status Update Event","href":"/webhooks/events/status-update"},{"title":"Conversation Update Event","href":"/webhooks/events/conversation-update"},{"title":"End of Call Report Event","href":"/webhooks/events/end-of-call-report"},{"title":"Hang Event","href":"/webhooks/events/hang"},{"title":"Error Event","href":"/webhooks/events/error"},{"title":"Local Testing with ngrok","href":"/webhooks/events/testing/ngrok-setup"},{"title":"Live Events Dashboard","href":"/webhooks/events/testing/live-events-dashboard"}]},{"group":"Vendors","pages":[{"title":"Transcribers","href":"/vendors/transcribers"},{"title":"Voices","href":"/vendors/voices"},{"title":"Models","href":"/vendors/models"},{"title":"ElevenLabs TTS Configuration Guide","href":"/vendors/elevenlabs-TTS-recommended-configurations"}]},{"group":"Prompts","pages":[{"title":"Tags","href":"/prompts/tags"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/api-keys"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/release-notes"}]}]},"title":"DND \u0026 Callback - Interactly API","buildId":"dpl_5UDDZ9hnigTkoV7QtvQ39eUp84nu","deploymentId":"dpl_5UDDZ9hnigTkoV7QtvQ39eUp84nu","dynamics":[],"chunks":[]}