compliance-handling
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCompliance 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:
-
Context
- What channels does your bot operate on?
- What regions do you operate in?
- What regulations apply to your business?
-
Current State
- How do you handle opt-outs today?
- Do you have a DNC list process?
- Have you had any compliance issues?
-
Goals
- What compliance capabilities do you need?
- What risks are you trying to mitigate?
在提供指导前,请先了解以下信息:
-
场景背景
- 您的机器人在哪些渠道运行?
- 您的业务覆盖哪些地区?
- 哪些监管规则适用于您的业务?
-
当前状态
- 您目前如何处理退订请求?
- 您是否有DNC名单管理流程?
- 您是否遇到过合规问题?
-
目标需求
- 您需要哪些合规功能?
- 您希望规避哪些风险?
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 unsubscribeEmail 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:
- What channels do you use for outreach?
- What regions/countries do you operate in?
- How do you currently capture consent?
- Have you had any compliance issues?
- What systems store your contact/consent data?
如需更多背景信息,请询问:
- 您使用哪些渠道进行触达?
- 您的业务覆盖哪些国家/地区?
- 您目前如何获取用户同意?
- 您是否遇到过合规问题?
- 您使用哪些系统存储联系人/同意数据?
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: 静默时段合规