Voice Agent Outbound Consent and Opt-Out Testing Runbook

Sumanyu Sharma
Sumanyu Sharma
Founder & CEO
, Voice AI QA Pioneer

Hamming has 10M+ mins protected across voice-agent QA workflows.

September 25, 2026•Updated September 25, 2026•12 min read
Voice Agent Outbound Consent and Opt-Out Testing Runbook

Voice agent consent testing is easy to under-test. A clean opening disclosure can pass while the campaign used the wrong consent record, ignored a spoken opt-out, or queued the same number again five minutes later.

That is the consent green-check illusion: the transcript looks compliant, but the system state is wrong.

Quick filter: An inbound FAQ agent that never records calls or initiates outreach probably does not need this runbook. Use it when an outbound AI voice agent depends on consent, identity disclosures, opt-out handling, or suppression rules that must survive real conversation paths.

Voice agent consent testing proves that an outbound AI voice program selected an eligible contact, used the right policy and disclosure, honored refusal or revocation, changed downstream campaign state, and preserved reviewable evidence.

TL;DR: Treat outbound consent as a versioned test contract, not a line in the prompt.

  1. Separate outreach consent, call-recording consent, and data-processing consent.
  2. Bind each campaign to a policy version and an approved consent source.
  3. Run eight synthetic calls, including missing, expired, mismatched, revoked, interrupted, and repeated-opt-out paths.
  4. Read back the suppression state outside the transcript.
  5. Save one evidence packet that joins the consent record, call, policy, opt-out event, and reviewer decision.

Last Updated: September 2026

Scope: This engineering runbook applies to outbound AI-generated or artificial-voice calls in the United States. It does not determine which law, exemption, jurisdiction, consent standard, or script applies to your campaign. Legal or compliance owners must define that policy before QA turns it into test cases.

The FCC's February 2024 declaratory ruling confirms that current AI-generated voices fall within the Telephone Consumer Protection Act's artificial or prerecorded voice restrictions. The FCC's robocall guidance also distinguishes consent and opt-out expectations by call type. Those distinctions are inputs to this runbook, not conclusions the test runner should invent.

Related Guides:

The test suite should prove a chain, not a sentence. A caller heard the right disclosure is one assertion. The campaign also needs evidence that the number was eligible before dialing, the agent reacted correctly during the call, and later call attempts respected the resulting state.

LayerQuestion to proveEvidenceFailure action
SelectionWas this contact eligible for this campaign at dial time?Consent record ID, purpose, channel, status, captured timeBlock the call before dialing.
PolicyDid the call use the policy approved for this campaign and jurisdiction?Policy ID and versionQuarantine the campaign version.
ConversationDid the agent state required identity or disclosure content at the required time?Transcript span and audio pointerFail the call-level assertion.
RevocationDid the agent recognize an opt-out expressed in ordinary language?Classified utterance, rule result, event timestampStop the campaign interaction and create the opt-out event.
SuppressionDid downstream state prevent later outreach?Suppression-list readback and second-attempt resultStop the campaign and page the owner.
AuditCan a reviewer reconstruct the decision without joining five dashboards?Canonical evidence packetMark the run incomplete.

Disclosure checks alone miss failures on either side of the conversation: a stale consent lookup before the call, or a suppression write that never reaches the dialer after it.

Do not use one boolean called consentGiven. It hides purpose, channel, scope, and lifecycle.

Consent domainWhat it governsExample test questionKeep separate because
Outreach consentWhether the organization may initiate this category of callDoes this record authorize this number, channel, campaign purpose, and time window?Outreach eligibility may differ by campaign type or exemption.
Recording consentWhether audio or transcript capture may begin or continueDoes recording start only after the configured notice or affirmative action?Recording rules are not the same as permission to place the call.
Data-processing consent or other legal basisHow call data may be analyzed, retained, exported, or deletedDoes the data pipeline apply the configured purpose and retention class?Storage and analytics can outlive the conversation.

Consent domain rule: permission to place a call, permission to record it, and authority to process its data are different decisions. Test and version them separately, even when one customer interaction supplies more than one decision.

If a campaign needs all three, the evidence packet should contain three independently versioned decisions. If counsel says one domain is not consent-based, store the approved basis or exemption code instead of forcing a fake true value.

That separation also improves retention testing. Revoking one campaign permission should not silently delete records under a legal hold, and a retention exception should not re-enable outreach.

Build the Policy-to-Test Contract

Compliance or legal owners define the rule. QA makes the rule executable. Engineering connects it to the dialer, agent, and system of record.

Define the state readbacks that prove what happened before and after the call alongside the spoken-disclosure assertions.

Contract fieldExample valueTest use
policyIdoutbound_servicing_us_v4Stable identity for results and review.
effectiveFrom2026-08-01T00:00:00ZReject calls evaluated against an inactive policy.
campaignPurposeaccount_servicingMatch the consent scope to the actual campaign.
requiredConsentSourcecustomer_preference_centerVerify provenance, not only status.
requiredOpeningIdentityApproved entity name and callback numberRun exact or constrained semantic checks.
optOutPhrasesApproved intent set, not a fixed phrase listTest natural revocation language and interruptions.
onOptOutEnd outreach, write suppression, cancel queued attemptsVerify every side effect.
evidenceRequiredConsent ID, call ID, policy version, transcript span, suppression readbackFail closed when audit proof is missing.

Keep this contract under version control or in a system with equivalent change history. The tests-as-code template is useful when engineering owns the suite; a governed policy registry may be better when compliance changes rules more often than application code.

Policy-to-test contract: every outbound rule needs a stable identity, effective period, owner, trigger, expected behavior, side effect, and evidence requirement. A prose policy becomes testable only when those fields are explicit.

Run the Eight-Call Minimum Launch Suite

Eight calls are not a legal completeness standard. They are the smallest useful engineering suite for proving the main state transitions before a campaign launches.

Test callStarting stateCaller behaviorExpected resultRequired readback
1Valid consent for exact purposeContinues normallyRequired identity or disclosure passes; call proceedsPolicy version and consent record joined to call.
2Valid consentRequests opt-out clearlyAgent acknowledges; outreach stopsSuppression entry exists and queued attempts are canceled.
3No consent recordN/A because call should not startDial is blockedBlock reason stored before telephony initiation.
4Expired or revoked recordN/A because call should not startDial is blockedLatest record wins; stale cache is not used.
5Consent for a different purpose or numberN/A because call should not startDial is blockedScope mismatch identifies the conflicting field.
6Valid consentInterrupts the opening disclosureAgent resumes or restarts according to policyAudio and transcript prove the complete required content.
7Valid consentUses indirect opt-out languageClassifier follows the approved ambiguity pathReview or suppression event matches policy.
8Previously opted outSystem attempts a second campaign callNo outbound call startsSuppression check blocks the attempt at the dialer boundary.

Call 8 is the one teams skip. It catches a real systems failure: the conversational agent handled the opt-out correctly, but a retry worker or second campaign ignored the write.

Run these calls with synthetic identities and non-routable or controlled phone numbers. The sandbox side-effect guide explains how to keep calendar, CRM, and other test writes away from production users.

Verify Opt-Out Side Effects Outside the Transcript

An agent saying "I will stop future calls" proves only that the model generated a sentence. The test must inspect the authoritative campaign state.

Use this sequence:

  1. Start the call with a unique synthetic contact and campaign ID.
  2. Express the opt-out in the target language and conversational style.
  3. Capture the recognized intent, rule version, and event timestamp.
  4. Read the suppression record from its authoritative store.
  5. Verify queued and scheduled attempts are canceled or made ineligible.
  6. Attempt a second call through the normal campaign path.
  7. Confirm that telephony initiation never occurs.

Opt-out verification rule: a test passes only when the authoritative suppression state changes and a later campaign attempt is blocked. Transcript acknowledgment alone is not a pass.

For multi-tenant systems, apply the same discipline to policy scope. The customer workflow rules template helps test whether a tenant-specific rule was overridden by a global default.

Preserve One Reviewable Evidence Packet

Store enough evidence to reconstruct the decision without copying raw sensitive data into every log.

{  "canonicalCallId": "call_test_2026_08_27_0042",  "campaignId": "campaign_servicing_08",  "syntheticContactId": "contact_test_0042",  "policy": {    "id": "outbound_servicing_us_v4",    "version": "4.2",    "effectiveAt": "2026-08-01T00:00:00Z"  },  "outreachDecision": {    "status": "eligible",    "consentRecordId": "consent_test_771",    "purpose": "account_servicing",    "evaluatedAt": "2026-08-27T15:42:11Z"  },  "conversationEvidence": {    "identityDisclosureTurnId": "turn_0001",    "optOutTurnId": "turn_0007",    "audioPointer": "recording://restricted/test-call-0042#t=31.2"  },  "suppressionReadback": {    "status": "suppressed",    "reason": "caller_revoked",    "observedAt": "2026-08-27T15:43:02Z"  },  "secondAttempt": {    "result": "blocked_before_dial",    "attemptedAt": "2026-08-27T15:48:02Z"  },  "reviewStatus": "passed"}

The call logging schema provides the broader event envelope. This consent packet adds policy and suppression evidence while keeping raw audio behind a restricted pointer.

SymptomLikely causeDiagnosticFix
Call starts with no eligible consentEligibility check runs after telephony initiationCompare dial timestamp with policy-decision timestampMove the gate before the provider call request.
Disclosure is skipped after an interruptionPrompt resumes at the next state without completion evidenceInspect turn order and disclosure completenessUse a controlled disclosure state that must complete before progression.
Agent acknowledges opt-out but calls continueConversation event and campaign suppression use different identifiersTrace contact, phone, campaign, and tenant keysIntroduce one canonical contact key and verify propagation.
Only exact words trigger opt-outFixed phrase matcher has low recallReplay paraphrases, interruptions, and multilingual variantsUse an approved intent classifier plus review path for ambiguity.
Suppression works in one campaign onlyScope defaults to campaign ID instead of the approved policy scopeQuery all active campaigns for the synthetic contactEncode suppression scope explicitly and test every consumer.
Audit packet lacks the active policyPolicy is read dynamically and not snapshottedCompare current registry value with call timestampStore policy ID and version on the call event.
Test passes, production failsTest writes bypass the same queue or dialer pathCompare execution tracesRun the second attempt through the production-equivalent campaign boundary.

Confirmed failures should enter the failed-call regression runbook. Preserve the safe fixture, policy version, expected side effect, and the bug's original evidence pointer.

When This Runbook Is Not Enough

Policy scope remains a legal decision. This runbook can prove that configured behavior occurred. It cannot decide whether the configured rule is legally sufficient for a call type or jurisdiction.

Speech recognition creates ambiguity. A caller may say "not now," "stop this," or "don't call me about upgrades" while background noise obscures the qualifier. High-risk ambiguity needs an approved fallback, often suppression or human review.

Distributed systems are eventually consistent. A suppression write may take time to reach every campaign worker. Have the policy owner set a maximum propagation delay within the applicable regulatory processing deadline, block queued work during that window, and test the race instead of assuming the write is instant.

Effective dates matter. The FCC's January 2026 order extended a limited waiver through January 31, 2027: the portion of section 64.1200(a)(10) that would apply a revocation for one type of informational message to unrelated future robocalls and robotexts from that caller. It did not suspend all consent-revocation requirements. The FCC subsequently circulated a September 2026 draft proposing changes; a circulated draft is not an effective rule. Keep campaign policy versions tied to the controlling rule and its effective date, confirmed by the policy owner, so proposed, delayed, and active requirements do not collapse into one evergreen test.

The incident response runbook should own confirmed production outreach after revocation. A single affected call may be a call-level bug; repeated calls after suppression can indicate a campaign-wide control failure.

  • Legal or compliance approved the policy ID, version, call types, jurisdictions, scripts, exceptions, and effective date.
  • Outreach, recording, and data-processing decisions are stored separately.
  • Eligibility is checked before the provider receives a dial request.
  • The opening identity or disclosure has exact, semantic, and ordering checks appropriate to the policy.
  • The eight-call suite passes with synthetic contacts and production-equivalent routing.
  • Opt-out tests include clear, indirect, interrupted, and repeated requests.
  • Suppression is read back from the authoritative store.
  • A second normal campaign attempt is blocked before dialing.
  • Queued retries and overlapping campaigns follow the approved suppression scope.
  • Evidence packets include policy version, consent source, call evidence, suppression readback, and reviewer state.
  • Raw audio and unredacted transcripts stay behind restricted pointers.
  • Every confirmed miss has an owner, remediation, and regression test.

Hamming can automate the call execution, assertions, evidence capture, and regression loop. Your policy owner still defines the obligation. That boundary is a feature: it keeps the test deterministic while the legal interpretation stays with the people authorized to make it.

Frequently Asked Questions

Voice agent consent testing should verify eligibility before dialing, the active policy version, required identity or disclosure behavior, opt-out recognition, downstream suppression, and audit evidence. Hamming's runbook uses six evidence layers because a correct transcript alone cannot prove that the campaign selected an eligible contact or blocked a later call.

Start with at least eight synthetic calls: approved, clear opt-out, missing consent, expired or revoked consent, scope mismatch, interrupted disclosure, indirect opt-out, and a blocked second attempt. Eight is a minimum engineering suite, not a legal completeness standard; add cases for every policy, language, campaign type, and exception your legal or compliance owner approves.

No. Hamming's runbook passes an opt-out test only when the authoritative suppression state changes, queued attempts follow the configured rule, and a second campaign attempt is blocked before dialing. The agent's spoken acknowledgment proves conversation behavior, not the downstream side effect.

No. Store outreach eligibility, call-recording permission, and data-processing authority as separate versioned decisions because they govern different actions and may have different sources or lifecycles. If a policy uses an exemption or another legal basis instead of consent, store that approved basis explicitly rather than forcing one generic boolean.

Interrupt the disclosure at multiple points, ask a question, and then verify that the agent resumes or restarts according to the approved policy before entering a restricted topic. Save the transcript span and audio pointer so a reviewer can confirm that all required content was delivered in the correct order.

The evidence packet should join the canonical call ID, campaign, synthetic contact, policy ID and version, consent or eligibility record, relevant transcript and audio pointers, opt-out event, suppression readback, second-attempt result, and reviewer status. Hamming's template keeps these 10 evidence categories together while leaving raw sensitive artifacts behind restricted pointers.

Hamming can test whether an agent and campaign followed the policy, scripts, side effects, and evidence rules configured by your authorized owners. Legal or compliance counsel must determine which laws, jurisdictions, exemptions, consent standards, and exact disclosures apply to each outbound program.

Sumanyu Sharma

Sumanyu Sharma

Founder & CEO

Previously Head of Data at Citizen, where he helped quadruple the user base. As Senior Staff Data Scientist at Tesla, grew AI-powered sales program to 100s of millions in revenue per year.

Researched AI-powered medical image search at the University of Waterloo, where he graduated with Engineering honors on dean's list.

“At Hamming, we're taking all of our learnings from Tesla and Citizen to build the future of trustworthy, safe and reliable voice AI agents.”