1. Messaging Policy Violations
- Sending unsolicited messages (spam)
- Bulk messaging without proper opt-in
- Using automated messaging inappropriately
- Sending promotional content outside allowed windows
2. Template Policy Issues
- Templates with misleading content
- Promotional templates sent without user consent
- Templates that don't match actual business purpose
- Using templates for purposes other than intended
3. Quality Rating Problems
- High block rates from users
- High report rates
- Low engagement rates
- Users frequently marking messages as spam
4. Business Verification Issues
- Inconsistent business information
- Fake or misleading business details
- Using personal accounts for business purposes
- Multiple accounts for same business
How to Avoid Future Bans:
1. Follow Messaging Best Practices
// Example: Proper opt-in tracking
function checkOptInStatus($phone_number) {
// Always verify user has opted in before sending
$stmt = $mysqli->prepare("SELECT opt_in_status FROM users WHERE phone = ?");
$stmt->bind_param("s", $phone_number);
$stmt->execute();
$result = $stmt->get_result();
if ($row = $result->fetch_assoc()) {
return $row['opt_in_status'] === 'active';
}
return false;
}
// Only send if user has opted in
if (checkOptInStatus($recipient_phone)) {
// Send message
}
2. Implement Proper Rate Limiting
// Rate limiting to avoid spam detection
function canSendMessage($phone_number) {
$stmt = $mysqli->prepare("
SELECT COUNT(*) as msg_count
FROM sent_messages
WHERE recipient = ?
AND sent_at > DATE_SUB(NOW(), INTERVAL 24 HOUR)
");
$stmt->bind_param("s", $phone_number);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
// Limit to 10 messages per day per user
return $row['msg_count'] < 10;
}
3. Quality Score Management
// Track user interactions to maintain quality
function trackUserInteraction($phone_number, $interaction_type) {
$stmt = $mysqli->prepare("
INSERT INTO user_interactions (phone, interaction_type, created_at)
VALUES (?, ?, NOW())
");
$stmt->bind_param("ss", $phone_number, $interaction_type);
$stmt->execute();
}
// Track blocks and reports
function handleUserBlock($phone_number) {
trackUserInteraction($phone_number, 'blocked');
// Automatically add to do-not-contact list
$stmt = $mysqli->prepare("
INSERT INTO blacklist (phone, reason, created_at)
VALUES (?, 'user_blocked', NOW())
");
$stmt->bind_param("s", $phone_number);
$stmt->execute();
}
4. Template Compliance
- Use templates only for their intended purpose
- Ensure templates are accurate and not misleading
- Don't use promotional templates for transactional messages
- Keep templates relevant to your actual business
5. Business Profile Setup Best Practices
For New Profiles:
-
Use Legitimate Business Information
-
Real business name and address
-
Consistent information across all platforms
-
Valid business registration documents
-
Gradual Scaling
-
Start with low message volumes
-
Gradually increase over weeks/months
-
Monitor quality ratings closely
-
Separate Business Operations
-
One business per WhatsApp Business account
-
Don't create multiple accounts for same business
-
Use different legitimate businesses if you need multiple accounts
6. Monitoring and Compliance
// Monitor quality metrics
function getQualityMetrics($business_phone) {
return [
'sent_count' => getSentMessageCount($business_phone),
'delivered_count' => getDeliveredCount($business_phone),
'read_count' => getReadCount($business_phone),
'blocked_count' => getBlockedCount($business_phone),
'reported_count' => getReportedCount($business_phone)
];
}
// Calculate quality score
function calculateQualityScore($metrics) {
if ($metrics['sent_count'] == 0) return 0;
$delivery_rate = $metrics['delivered_count'] / $metrics['sent_count'];
$block_rate = $metrics['blocked_count'] / $metrics['sent_count'];
$report_rate = $metrics['reported_count'] / $metrics['sent_count'];
// Quality score calculation
$quality_score = ($delivery_rate * 100) - ($block_rate * 200) - ($report_rate * 300);
return max(0, min(100, $quality_score));
}
7. Opt-in Management
// Proper opt-in handling
function handleOptIn($phone_number, $source) {
$stmt = $mysqli->prepare("
INSERT INTO opt_ins (phone, source, opt_in_date, status)
VALUES (?, ?, NOW(), 'active')
ON DUPLICATE KEY UPDATE
status = 'active', opt_in_date = NOW()
");
$stmt->bind_param("ss", $phone_number, $source);
$stmt->execute();
}
// Handle opt-outs immediately
function handleOptOut($phone_number) {
$stmt = $mysqli->prepare("
UPDATE opt_ins SET status = 'opted_out', opt_out_date = NOW()
WHERE phone = ?
");
$stmt->bind_param("s", $phone_number);
$stmt->execute();
// Add to blacklist
$stmt = $mysqli->prepare("
INSERT INTO blacklist (phone, reason, created_at)
VALUES (?, 'user_opt_out', NOW())
");
$stmt->bind_param("s", $phone_number);
$stmt->execute();
}
Immediate Actions to Take:
- Stop All Automated Messaging until you implement proper compliance
- Review Your Current Practices against WhatsApp's policies
- Implement Opt-in Tracking for all contacts
- Add Rate Limiting to your messaging system
- Create Proper Business Documentation for new accounts
- Use Different Business Entities for new accounts (not just new email addresses)
For New Business Profiles:
- Wait 30-60 days before creating new profiles
- Use completely different business information
- Start with very low message volumes (< 100 messages/day)
- Focus on high-engagement, opted-in users
- Monitor quality metrics daily
The key is to operate legitimately as a real business with proper user consent, rather than trying to work around the system. WhatsApp's AI can detect patterns across accounts, so simply using new email addresses won't help if you continue the same practices.