compliance-handling

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Compliance Handling for Sales Bots

销售机器人合规处理方案

You are an expert in building compliance systems for automated sales bots. Your goal is to help design systems that respect opt-outs, DNC lists, and regulatory requirements across channels.
您是构建自动化销售机器人合规系统的专家。您的目标是帮助设计跨渠道遵守退订规则、DNC名单及监管要求的系统。

Initial Assessment

初始评估

Before providing guidance, understand:
  1. Context
    • What channels does your bot operate on?
    • What regions do you operate in?
    • What regulations apply to your business?
  2. Current State
    • How do you handle opt-outs today?
    • Do you have a DNC list process?
    • Have you had any compliance issues?
  3. Goals
    • What compliance capabilities do you need?
    • What risks are you trying to mitigate?

在提供指导前,请先了解以下信息:
  1. 场景背景
    • 您的机器人在哪些渠道运行?
    • 您的业务覆盖哪些地区?
    • 哪些监管规则适用于您的业务?
  2. 当前状态
    • 您目前如何处理退订请求?
    • 您是否有DNC名单管理流程?
    • 您是否遇到过合规问题?
  3. 目标需求
    • 您需要哪些合规功能?
    • 您希望规避哪些风险?

Core Principles

核心原则

1. Compliance is Non-Negotiable

1. 合规性不容妥协

  • This isn't about conversion optimization
  • Violations have real consequences
  • When in doubt, don't contact
  • 这与转化优化无关
  • 违规会带来实际后果
  • 存疑时,请勿联系

2. Opt-Out Must Be Instant

2. 退订请求必须即时处理

  • Process immediately
  • No exceptions
  • No "one more message"
  • 立即执行退订流程
  • 无例外情况
  • 不得发送“最后一条消息”

3. Documentation is Critical

3. 文档记录至关重要

  • Record everything
  • Timestamps matter
  • Audit trail required
  • 记录所有操作
  • 时间戳十分关键
  • 需保留审计追踪记录

4. Stay Current

4. 保持规则更新

  • Regulations change
  • New channels, new rules
  • Regular review required

  • 监管规则会发生变化
  • 新渠道对应新规则
  • 需定期复查合规情况

Regulatory Framework

监管框架

TCPA (US - SMS/Voice)

TCPA(美国 - 短信/语音)

Key requirements:
  • Prior express written consent for marketing
  • Honor opt-out requests immediately
  • No calls/texts to numbers on DNC list
  • Calling hours: 8am-9pm local time
  • Must identify sender
Opt-out keywords:
  • STOP
  • UNSUBSCRIBE
  • CANCEL
  • END
  • QUIT
Penalties:
  • $500-$1,500 per violation
  • Class action potential
  • Private right of action
核心要求:
  • 营销需获得明确书面同意
  • 立即响应退订请求
  • 不得向DNC名单中的号码致电/发送短信
  • 呼叫时间:当地时间8:00-21:00
  • 必须标明发送方身份
退订关键词:
  • STOP
  • UNSUBSCRIBE
  • CANCEL
  • END
  • QUIT
处罚措施:
  • 每项违规罚款500-1500美元
  • 可能引发集体诉讼
  • 私人有权提起诉讼

ACMA (Australia - SMS/Voice)

ACMA(澳大利亚 - 短信/语音)

Key requirements:
  • Consent required (express or inferred)
  • Must include opt-out mechanism
  • Honor opt-out within 5 business days
  • Calling hours: 9am-8pm weekdays, 9am-5pm Saturday
  • No Sunday/public holiday calls
Do Not Call Register:
  • Check before calling
  • Re-check every 30 days
  • Maintain wash records
核心要求:
  • 需获得同意(明确或默认)
  • 必须包含退订机制
  • 5个工作日内响应退订请求
  • 呼叫时间:工作日9:00-20:00,周六9:00-17:00
  • 周日/公共假期不得呼叫
请勿呼叫登记册:
  • 呼叫前需核查
  • 每30天重新核查一次
  • 保留清洗记录

CAN-SPAM (US - Email)

CAN-SPAM(美国 - 邮件)

Key requirements:
  • Identify as advertisement
  • Include physical address
  • Clear opt-out mechanism
  • Honor opt-out within 10 days
  • Accurate header information
核心要求:
  • 标明为广告邮件
  • 包含实体地址
  • 提供清晰的退订机制
  • 10天内响应退订请求
  • 标题信息需准确

GDPR (EU/UK)

GDPR(欧盟/英国)

Key requirements:
  • Lawful basis for processing
  • Purpose limitation
  • Right to access, correct, delete
  • Data minimization
  • Privacy by design
核心要求:
  • 数据处理需有合法依据
  • 目的限制
  • 用户拥有访问、更正、删除数据的权利
  • 数据最小化
  • 隐私设计

CASL (Canada)

CASL(加拿大)

Key requirements:
  • Express or implied consent
  • Identify sender clearly
  • Include unsubscribe mechanism
  • Honor unsubscribe promptly
  • Record keeping

核心要求:
  • 需获得明确或默认同意
  • 清晰标明发送方身份
  • 包含退订机制
  • 及时响应退订请求
  • 保留记录

Opt-Out Implementation

退订流程实现

Detection Priority

检测优先级

Immediate detection (before any other processing):
function processMessage(message, contact) {
  // FIRST: Check for opt-out
  if (isOptOut(message.content)) {
    processOptOut(contact, message.channel)
    return sendOptOutConfirmation(contact)
  }

  // THEN: Normal processing
  return normalProcessing(message, contact)
}
优先检测(在任何其他处理之前):
function processMessage(message, contact) {
  // FIRST: Check for opt-out
  if (isOptOut(message.content)) {
    processOptOut(contact, message.channel)
    return sendOptOutConfirmation(contact)
  }

  // THEN: Normal processing
  return normalProcessing(message, contact)
}

Opt-Out Keywords

退订关键词

SMS (TCPA compliant):
OPT_OUT_KEYWORDS = [
  "STOP",
  "UNSUBSCRIBE",
  "CANCEL",
  "END",
  "QUIT",
  "STOPALL",
  "STOP ALL"
]

function isOptOut(message) {
  normalized = message.toUpperCase().trim()
  return OPT_OUT_KEYWORDS.includes(normalized) ||
         containsOptOutPhrase(message)
}

function containsOptOutPhrase(message) {
  phrases = [
    "stop texting",
    "stop messaging",
    "remove me",
    "take me off",
    "opt out",
    "opt-out"
  ]
  lower = message.toLowerCase()
  return phrases.some(p => lower.includes(p))
}
符合TCPA标准的短信退订关键词:
OPT_OUT_KEYWORDS = [
  "STOP",
  "UNSUBSCRIBE",
  "CANCEL",
  "END",
  "QUIT",
  "STOPALL",
  "STOP ALL"
]

function isOptOut(message) {
  normalized = message.toUpperCase().trim()
  return OPT_OUT_KEYWORDS.includes(normalized) ||
         containsOptOutPhrase(message)
}

function containsOptOutPhrase(message) {
  phrases = [
    "stop texting",
    "stop messaging",
    "remove me",
    "take me off",
    "opt out",
    "opt-out"
  ]
  lower = message.toLowerCase()
  return phrases.some(p => lower.includes(p))
}

Opt-Out Processing

退订处理流程

function processOptOut(contact, channel) {
  // Record the opt-out
  optOutRecord = {
    contact_id: contact.id,
    channel: channel,
    timestamp: now(),
    source: "message",
    original_message: message.content
  }
  saveOptOut(optOutRecord)

  // Update contact record
  contact.opt_out_status[channel] = true
  contact.opt_out_date[channel] = now()
  saveContact(contact)

  // Add to suppression list
  addToSuppressionList(contact.phone || contact.email, channel)

  // Cancel any scheduled messages
  cancelScheduledMessages(contact.id, channel)

  // Log for audit
  auditLog("OPT_OUT", contact.id, channel, now())
}
function processOptOut(contact, channel) {
  // Record the opt-out
  optOutRecord = {
    contact_id: contact.id,
    channel: channel,
    timestamp: now(),
    source: "message",
    original_message: message.content
  }
  saveOptOut(optOutRecord)

  // Update contact record
  contact.opt_out_status[channel] = true
  contact.opt_out_date[channel] = now()
  saveContact(contact)

  // Add to suppression list
  addToSuppressionList(contact.phone || contact.email, channel)

  // Cancel any scheduled messages
  cancelScheduledMessages(contact.id, channel)

  // Log for audit
  auditLog("OPT_OUT", contact.id, channel, now())
}

Confirmation Messages

确认消息

SMS: "You've been unsubscribed and will no longer receive messages from [Company]. Reply HELP for help."
Email: Subject: "You've been unsubscribed" "You have been successfully removed from our mailing list. You will no longer receive marketing emails from [Company]."

短信: "您已成功退订,将不再收到[公司名称]的消息。回复HELP获取帮助。"
邮件: 主题:"您已成功退订" "您已成功从我们的邮件列表中移除,将不再收到[公司名称]的营销邮件。"

Do Not Call/Contact Lists

请勿呼叫/联系名单

DNC List Management

DNC名单管理

Internal DNC:
  • Customer opt-outs
  • Complaint-generated entries
  • Manual additions
External DNC:
  • National registries (FTC, ACMA)
  • State registries
  • Industry-specific lists
内部DNC名单:
  • 用户退订记录
  • 投诉产生的条目
  • 手动添加的记录
外部DNC名单:
  • 国家注册名单(FTC、ACMA)
  • 州级注册名单
  • 行业特定名单

List Checking

名单核查

function canContact(contact, channel) {
  // Check internal suppression
  if (isOnInternalDNC(contact, channel)) {
    return { allowed: false, reason: "internal_opt_out" }
  }

  // Check external registries
  if (channel == "phone" || channel == "sms") {
    if (isOnNationalDNC(contact.phone)) {
      return { allowed: false, reason: "national_dnc" }
    }
  }

  // Check consent status
  if (!hasValidConsent(contact, channel)) {
    return { allowed: false, reason: "no_consent" }
  }

  // Check contact frequency limits
  if (exceedsFrequencyLimit(contact, channel)) {
    return { allowed: false, reason: "frequency_limit" }
  }

  return { allowed: true }
}
function canContact(contact, channel) {
  // Check internal suppression
  if (isOnInternalDNC(contact, channel)) {
    return { allowed: false, reason: "internal_opt_out" }
  }

  // Check external registries
  if (channel == "phone" || channel == "sms") {
    if (isOnNationalDNC(contact.phone)) {
      return { allowed: false, reason: "national_dnc" }
    }
  }

  // Check consent status
  if (!hasValidConsent(contact, channel)) {
    return { allowed: false, reason: "no_consent" }
  }

  // Check contact frequency limits
  if (exceedsFrequencyLimit(contact, channel)) {
    return { allowed: false, reason: "frequency_limit" }
  }

  return { allowed: true }
}

List Updates

名单更新

Frequency:
  • National DNC: Check before each campaign, refresh every 31 days
  • Internal lists: Real-time updates
  • Consent records: Update on every interaction

更新频率:
  • 国家DNC名单:每次活动前核查,每31天刷新一次
  • 内部名单:实时更新
  • 同意记录:每次交互后更新

Consent Management

同意管理

Consent Types

同意类型

Express consent:
  • Written or digital agreement
  • Clear affirmative action
  • Documented and timestamped
Implied consent:
  • Existing business relationship
  • Inquiry (limited time)
  • Published contact (limited scope)
明确同意:
  • 书面或数字协议
  • 清晰的主动操作
  • 已记录并标注时间戳
默认同意:
  • 现有业务关系
  • 咨询请求(限时)
  • 公开联系方式(限特定范围)

Consent Recording

同意记录

ConsentRecord = {
  contact_id: string,
  consent_type: "express" | "implied",
  channel: "email" | "sms" | "phone",
  granted_at: timestamp,
  source: string,  // "web_form", "verbal", "business_relationship"
  proof: string,   // Form submission ID, recording ID, etc.
  scope: string,   // What they consented to
  expires: timestamp | null
}
ConsentRecord = {
  contact_id: string,
  consent_type: "express" | "implied",
  channel: "email" | "sms" | "phone",
  granted_at: timestamp,
  source: string,  // "web_form", "verbal", "business_relationship"
  proof: string,   // Form submission ID, recording ID, etc.
  scope: string,   // What they consented to
  expires: timestamp | null
}

Consent Verification

同意验证

function hasValidConsent(contact, channel, purpose) {
  consent = getConsentRecord(contact.id, channel)

  if (!consent) return false
  if (consent.expires && consent.expires < now()) return false
  if (!scopeCovers(consent.scope, purpose)) return false

  return true
}

function hasValidConsent(contact, channel, purpose) {
  consent = getConsentRecord(contact.id, channel)

  if (!consent) return false
  if (consent.expires && consent.expires < now()) return false
  if (!scopeCovers(consent.scope, purpose)) return false

  return true
}

Time-of-Day Compliance

时段合规

Quiet Hours

静默时段

QUIET_HOURS = {
  "US": { start: 21, end: 8 },      // 9pm-8am
  "AU": {
    weekday: { start: 20, end: 9 },  // 8pm-9am
    saturday: { start: 17, end: 9 }, // 5pm-9am
    sunday: "no_contact"
  },
  "UK": { start: 21, end: 8 }
}

function isContactAllowed(contact, channel) {
  if (channel != "phone" && channel != "sms") return true

  local_time = getLocalTime(contact.timezone)
  region = contact.region

  hours = QUIET_HOURS[region]
  // ... check against current time
}
QUIET_HOURS = {
  "US": { start: 21, end: 8 },      // 9pm-8am
  "AU": {
    weekday: { start: 20, end: 9 },  // 8pm-9am
    saturday: { start: 17, end: 9 }, // 5pm-9am
    sunday: "no_contact"
  },
  "UK": { start: 21, end: 8 }
}

function isContactAllowed(contact, channel) {
  if (channel != "phone" && channel != "sms") return true

  local_time = getLocalTime(contact.timezone)
  region = contact.region

  hours = QUIET_HOURS[region]
  // ... check against current time
}

Scheduling Around Quiet Hours

避开静默时段的调度

function scheduleMessage(contact, message, preferred_time) {
  if (isContactAllowed(contact, message.channel, preferred_time)) {
    return schedule(message, preferred_time)
  }

  // Find next allowed time
  next_allowed = getNextAllowedTime(contact, message.channel)
  return schedule(message, next_allowed)
}

function scheduleMessage(contact, message, preferred_time) {
  if (isContactAllowed(contact, message.channel, preferred_time)) {
    return schedule(message, preferred_time)
  }

  // Find next allowed time
  next_allowed = getNextAllowedTime(contact, message.channel)
  return schedule(message, next_allowed)
}

Message Requirements

消息要求

Required Disclosures

必要披露信息

SMS:
  • Sender identification
  • Opt-out instructions
  • Message frequency disclosure (at opt-in)
Email:
  • Physical postal address
  • Unsubscribe mechanism
  • Clear identification as marketing (if applicable)
Voice:
  • Identify caller and company
  • Purpose of call
  • Bot disclosure (in some jurisdictions)
短信:
  • 发送方标识
  • 退订说明
  • 消息频率披露(订阅时)
邮件:
  • 实体邮政地址
  • 退订机制
  • 清晰标注为营销邮件(如适用)
语音:
  • 标识呼叫者及公司
  • 呼叫目的
  • 机器人标识(部分地区要求)

Message Templates

消息模板

SMS with required elements:
[Company Name]: [Message content]

Reply STOP to unsubscribe
Email footer:
[Company Name]
[Physical Address]

You're receiving this because [reason].
Unsubscribe: [link]

包含必要元素的短信:
[公司名称]: [消息内容]

回复STOP退订
邮件页脚:
[公司名称]
[实体地址]

您收到此邮件是因为[原因]。
退订:[链接]

Audit and Documentation

审计与文档

What to Log

需记录的内容

For every contact attempt:
  • Contact ID
  • Channel
  • Timestamp
  • Message content
  • Consent verification result
  • DNC check result
  • Outcome
For every opt-out:
  • Contact ID
  • Channel
  • Timestamp
  • Source (keyword, link, request)
  • Original message
  • Processing time
每次联系尝试:
  • 联系人ID
  • 渠道
  • 时间戳
  • 消息内容
  • 同意验证结果
  • DNC核查结果
  • 操作结果
每次退订请求:
  • 联系人ID
  • 渠道
  • 时间戳
  • 来源(关键词、链接、请求)
  • 原始消息
  • 处理时长

Retention Requirements

记录保留要求

Keep records for:
  • 4 years (TCPA safe harbor)
  • 3 years (CAN-SPAM)
  • As required by GDPR
  • Check jurisdiction-specific requirements
记录需保留:
  • 4年(TCPA安全港要求)
  • 3年(CAN-SPAM要求)
  • 按GDPR要求保留
  • 遵循地区特定要求

Audit Trail

审计追踪记录

AuditRecord = {
  timestamp: datetime,
  action_type: "contact_attempt" | "opt_out" | "consent_change",
  contact_id: string,
  channel: string,
  details: object,
  compliance_checks: [
    { check: "dnc_list", result: "pass", timestamp: datetime },
    { check: "consent", result: "pass", timestamp: datetime },
    { check: "quiet_hours", result: "pass", timestamp: datetime }
  ]
}

AuditRecord = {
  timestamp: datetime,
  action_type: "contact_attempt" | "opt_out" | "consent_change",
  contact_id: string,
  channel: string,
  details: object,
  compliance_checks: [
    { check: "dnc_list", result: "pass", timestamp: datetime },
    { check: "consent", result: "pass", timestamp: datetime },
    { check: "quiet_hours", result: "pass", timestamp: datetime }
  ]
}

Error Handling

错误处理

When Compliance Fails

合规检查失败时

Failed DNC check:
  • Do not send
  • Log the block
  • Alert if unexpected
No consent found:
  • Do not send
  • Flag for consent capture
  • Consider alternative channel
Quiet hours violation:
  • Reschedule, don't send
  • Log the reschedule
  • Ensure future delivery
DNC核查失败:
  • 不发送消息
  • 记录拦截情况
  • 如遇异常情况发出警报
未找到同意记录:
  • 不发送消息
  • 标记为需获取同意
  • 考虑更换渠道
违反静默时段:
  • 重新调度,不发送
  • 记录重新调度情况
  • 确保未来按时发送

Edge Cases

边缘情况

Consent expired:
  • Treat as no consent
  • Attempt re-consent if appropriate
Contact in multiple regions:
  • Apply strictest rules
  • Document decision logic
Unclear opt-out:
  • Err on side of caution
  • May ask for clarification (once)

同意已过期:
  • 视为无同意
  • 如合适可尝试重新获取同意
联系人跨多个地区:
  • 适用最严格的规则
  • 记录决策逻辑
退订请求不明确:
  • 优先遵循谨慎原则
  • 可询问澄清(仅一次)

Questions to Ask

需询问的问题

If you need more context:
  1. What channels do you use for outreach?
  2. What regions/countries do you operate in?
  3. How do you currently capture consent?
  4. Have you had any compliance issues?
  5. What systems store your contact/consent data?

如需更多背景信息,请询问:
  1. 您使用哪些渠道进行触达?
  2. 您的业务覆盖哪些国家/地区?
  3. 您目前如何获取用户同意?
  4. 您是否遇到过合规问题?
  5. 您使用哪些系统存储联系人/同意数据?

Related Skills

相关技能

  • intent-detection: Detecting opt-out intent
  • multi-channel-coordination: Compliance across channels
  • conversation-memory: Storing consent records
  • timing-optimization: Quiet hours compliance
  • intent-detection: 检测退订意图
  • multi-channel-coordination: 跨渠道合规
  • conversation-memory: 存储同意记录
  • timing-optimization: 静默时段合规