sms compliance
sms compliance
Republic of Congo SMS Guide: ARPCE Compliance & Messaging Requirements 2025
Send SMS to Republic of Congo (Congo-Brazzaville) with confidence. Complete guide covering ARPCE regulations, sender ID registration, MTN/Airtel networks, compliance requirements, and API integration for A2P messaging.
Republic of the Congo SMS Best Practices, Compliance, and Features
Send SMS messages to the Republic of the Congo (Congo-Brazzaville) with confidence. This comprehensive SMS guide covers ARPCE compliance requirements, telecommunications regulations, sender ID registration processes, mobile network operators (MTN Congo, Airtel Congo, Congo Telecom), and A2P messaging best practices for businesses targeting the Congolese market. Whether you're sending transactional SMS, marketing messages, or OTP authentication codes, understand the regulatory landscape and technical requirements for successful message delivery.
Republic of Congo SMS Market Overview & Mobile Network Landscape
| Locale name: | Republic Of The Congo |
|---|---|
| ISO code: | CG |
| Region | Middle East & Africa |
| Mobile country code (MCC) | 629 |
| Dialing Code | +242 |
Market Conditions: The Republic of the Congo has a growing mobile market with three major operators: MTN Congo (60% market share, approximately 2.4 million customers), Airtel Congo (40% market share), and the newly operational Congo Telecom mobile network (launched December 2024). SMS remains a crucial communication channel, particularly for business messaging and notifications. While OTT messaging apps are gaining popularity in urban areas, SMS maintains its importance due to its reliability and universal reach across both feature phones and smartphones. In February 2023, MTN and Airtel signed a national roaming agreement to improve coverage across the country.
SMS Features and Technical Capabilities in Republic of Congo
The Republic of the Congo supports basic SMS functionality with some limitations on advanced features, focusing primarily on one-way messaging capabilities.
Two-way SMS Support
Two-way SMS is not supported in the Republic of the Congo through standard A2P channels. Design your messaging strategies around one-way communication flows.
Concatenated Messages (Segmented SMS)
Support: Yes, concatenated messages are supported, though availability may vary by sender ID type.
Message length rules: Standard SMS length limits apply – 160 characters for GSM-7 encoding, 70 characters for UCS-2 encoding.
Encoding considerations: Both GSM-7 and UCS-2 encodings are supported, with UCS-2 recommended for messages containing special characters or non-Latin alphabets.
MMS Support
MMS messages are not directly supported in the Republic of the Congo. When you send MMS, the system automatically converts it to SMS with an embedded URL link where recipients can view the media content. This ensures message delivery while providing access to multimedia content through web links.
URL Delivery Example:
Your photo is ready! View it here: https://example.com/media/abc123
This approach works well for:
- Marketing images and promotional materials
- Transactional documents and receipts
- Event tickets and QR codes
User Experience Considerations:
- Recipients need data connectivity to view media
- Ensure landing pages are mobile-optimized
- Consider data costs for your audience
- Test URL accessibility across all major operators
Recipient Phone Number Compatibility
Number Portability
Number portability is not available in the Republic of the Congo. Mobile numbers remain tied to their original network operators, which simplifies message routing and delivery.
Sending SMS to Landlines
You cannot send SMS to landline numbers in the Republic of the Congo. Attempts to send messages to landline numbers will result in delivery failure, with APIs typically returning a 400 response with error code 21614. These messages will not appear in logs, and your account will not be charged.
SMS Compliance: ARPCE Regulatory Guidelines and Requirements
The Agence de Régulation des Postes et des Communications Électroniques (ARPCE), located in Brazzaville, regulates the Republic of the Congo's telecommunications sector. ARPCE's mission is to "make the Congo enter the Top 5 of African countries leaders in Posts and Electronic Communications." While specific SMS marketing regulations are still evolving, follow general telecommunications guidelines and international best practices for messaging.
Consent and Opt-In
Explicit Consent Requirements:
- Obtain clear, documented consent before sending marketing messages
- Maintain records of how and when you obtained consent
- Clearly communicate the type and frequency of messages recipients will receive
- Provide transparent information about the sending organization
HELP/STOP and Other Commands
Support standard opt-out keywords in all SMS campaigns:
- STOP, ARRET, ARRÊT (French)
- HELP, AIDE (French)
Opt-out Example Messages:
French: "Vous êtes maintenant désinscrit. Vous ne recevrez plus de messages. Répondez AIDE pour plus d'informations."
English: "You're now unsubscribed. You won't receive further messages. Reply HELP for more information."
Implementation Requirements:
- Process messages in both French and English
- Send confirmation messages when users opt out
- Process HELP/STOP commands immediately
Do Not Call / Do Not Disturb Registries
The Republic of the Congo does not maintain an official Do Not Call registry. Implement your own:
- Maintain your own suppression lists
- Honor opt-out requests within 24 hours
- Implement proper database management to track opted-out numbers
- Regularly clean contact lists to remove inactive or opted-out numbers
Time Zone Sensitivity
The Republic of the Congo observes UTC+1 time zone. Follow these best practices:
- Send messages between 8:00 AM and 8:00 PM local time
- Avoid messages during religious holidays and Sundays
- Limit urgent messages outside business hours to genuine emergencies
Sender ID Registration and Phone Number Requirements
Alphanumeric Sender ID Registration
Operator network capability: Supported with restrictions
Registration requirements: Pre-registration required, takes approximately 3 weeks
Sender ID preservation: Yes for registered IDs, but may be overwritten on certain networks
Long Codes
Domestic vs. International:
- Domestic long codes not supported
- International long codes supported with limitations
Sender ID preservation: No, international numbers may be overwritten
Provisioning time: N/A
Use cases: Not recommended for primary messaging strategy
Short Codes
Support: Not currently supported in the Republic of the Congo
Provisioning time: N/A
Use cases: N/A
Restricted Content and Prohibited SMS Use Cases
Restricted Industries and Content:
- Gambling and betting services
- Adult content or services
- Unauthorized financial services
- Political campaign messages without proper authorization
- Pharmaceutical promotions without proper licensing
Content Filtering
Known Carrier Filtering Rules:
- Messages containing certain keywords may be blocked
- URLs may be filtered or blocked on some networks
- High-frequency messaging patterns may trigger spam filters
Avoid These Common Patterns:
| Pattern Type | Examples | Risk Level |
|---|---|---|
| URL shorteners | bit.ly, tinyurl.com | High |
| All-caps words | FREE, WINNER, URGENT | High |
| Excessive punctuation | !!!, ???, ... | Medium |
| Suspicious keywords | "Click now", "Act fast" | Medium |
| Multiple URLs | 2+ links in one message | High |
Remediation Strategies When Messages Are Filtered:
-
Immediate Actions:
- Remove URL shorteners and use full domain names
- Reduce capitalization and punctuation
- Test with a small batch before full deployment
-
Long-term Solutions:
- Build sender reputation gradually
- Maintain consistent sending patterns
- Monitor delivery rates by carrier
- Work with your SMS provider for whitelisting
Best Practices to Avoid Filtering:
- Avoid URL shorteners
- Use clear, professional language
- Maintain consistent sending patterns
- Include clear sender identification
- Avoid excessive punctuation and all-caps text
SMS Best Practices for Republic of Congo Campaigns
SMS Messaging Strategy and Content Optimization
- Keep messages under 160 characters when possible to avoid SMS segmentation costs
- Include clear call-to-actions (CTAs) to drive engagement
- Maintain consistent branding across all SMS campaigns
- Use personalization thoughtfully to improve message relevance
- Consider E.164 phone number formatting for international SMS delivery
- Review 10DLC registration requirements if sending from US numbers
- Implement two-way messaging strategies where supported
Sending Frequency and Timing
Limit to 2 – 3 messages per week per recipient. Respect these key dates:
Major Congolese Holidays to Avoid:
- New Year's Day (January 1)
- Independence Day (August 15)
- Christmas (December 25)
- Easter Monday (variable)
- Ascension Day (variable)
Timing Best Practices:
- Schedule campaigns during business hours (9:00 AM – 5:00 PM)
- Space out bulk sends to avoid network congestion
- Avoid Sundays and religious holidays
- Test different sending times to optimize engagement
Localization
- Primary language: French
- Consider including both French and English for international businesses
- Use proper character encoding for special characters
- Respect local cultural sensitivities
Opt-Out Management
- Process opt-outs within 24 hours
- Send confirmation of opt-out receipt
- Maintain accurate opt-out databases
- Regular audit of opt-out lists
Testing and Monitoring
Essential Metrics to Track:
| Metric | Healthy Threshold | Action Required |
|---|---|---|
| Delivery Rate | > 95% | Investigate if below 90% |
| Opt-out Rate | < 2% per campaign | Review content if above 5% |
| Response Time | < 5 seconds | Check API performance |
| Carrier Filtering | < 1% | Review content patterns |
Testing Checklist:
- Test messages across all major carriers (MTN, Airtel)
- Monitor delivery rates by carrier
- Track engagement metrics
- Regular testing of opt-out functionality
- Monitor for carrier filtering patterns
Troubleshooting Common Delivery Issues:
-
Low Delivery Rates:
- Verify phone number format (+242 prefix)
- Check sender ID registration status
- Review message content for filtered keywords
-
High Opt-out Rates:
- Reduce sending frequency
- Improve message relevance
- Verify consent was properly obtained
-
Carrier-specific Failures:
- Test with different sender IDs
- Contact your SMS provider for carrier relationships
- Verify no network-specific restrictions
SMS API Integration: Twilio, Sinch, MessageBird & Plivo
Twilio SMS API Integration
Twilio provides a robust SMS API for sending A2P messages to the Republic of the Congo. Here's how to implement it:
import * as Twilio from 'twilio';
// Initialize Twilio client with your credentials
// Store credentials in environment variables, never in code
const client = new Twilio(
process.env.TWILIO_ACCOUNT_SID,
process.env.TWILIO_AUTH_TOKEN
);
// Function to send SMS to Republic of the Congo
async function sendSMSToCongo(
to: string,
message: string,
senderId: string
): Promise<void> {
try {
// Ensure proper formatting for Congo numbers (+242)
const formattedNumber = to.startsWith('+242') ? to : `+242${to}`;
const response = await client.messages.create({
body: message,
from: senderId, // Registered alphanumeric sender ID
to: formattedNumber,
// Optional parameters for delivery tracking
statusCallback: 'https://your-webhook-url.com/status'
});
console.log(`Message sent successfully! SID: ${response.sid}`);
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}Security Best Practices for API Credentials:
- Store API keys in environment variables or secure vaults (AWS Secrets Manager, Azure Key Vault)
- Never commit credentials to version control
- Rotate credentials regularly (every 90 days minimum)
- Use separate credentials for development, staging, and production
- Implement IP whitelisting where available
- Monitor API usage for anomalies
Sinch SMS API Integration
Sinch offers comprehensive SMS capabilities for the Republic of the Congo market:
import { SinchClient } from '@sinch/sdk';
// Initialize Sinch client
const sinchClient = new SinchClient({
servicePlanId: process.env.SINCH_SERVICE_PLAN_ID,
apiToken: process.env.SINCH_API_TOKEN
});
// Function to send SMS using Sinch
async function sendSMSWithSinch(
recipientNumber: string,
messageText: string
): Promise<void> {
try {
const response = await sinchClient.messages.send({
from: 'YOUR_SENDER_ID', // Registered sender ID
to: [recipientNumber],
body: messageText,
// Optional delivery report URL
deliveryReport: 'URL'
});
console.log('Message sent successfully:', response.id);
} catch (error) {
console.error('Failed to send message:', error);
throw error;
}
}MessageBird SMS API Integration
MessageBird provides a straightforward API for sending SMS to the Congo:
import messagebird from 'messagebird';
// Initialize MessageBird client
const messageBirdClient = messagebird(process.env.MESSAGEBIRD_API_KEY);
// Function to send SMS via MessageBird
function sendSMSViaMessageBird(
recipient: string,
message: string
): Promise<void> {
return new Promise((resolve, reject) => {
messageBirdClient.messages.create({
originator: 'YOUR_SENDER_ID',
recipients: [recipient],
body: message,
// Optional parameters
reference: 'your-reference',
reportUrl: 'your-webhook-url'
}, (err, response) => {
if (err) {
reject(err);
return;
}
resolve(response);
});
});
}Plivo SMS API Integration
Plivo's API implementation for Congo SMS messaging:
import plivo from 'plivo';
// Initialize Plivo client
const plivoClient = new plivo.Client(
process.env.PLIVO_AUTH_ID,
process.env.PLIVO_AUTH_TOKEN
);
// Function to send SMS using Plivo
async function sendSMSWithPlivo(
to: string,
message: string
): Promise<void> {
try {
const response = await plivoClient.messages.create({
src: 'YOUR_SENDER_ID', // Registered sender ID
dst: to,
text: message,
// Optional parameters
url: 'your-status-url',
method: 'POST'
});
console.log('Message sent successfully:', response);
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}API Rate Limits and Throughput
Default Rate Limits:
- Default rate limit: 30 messages per second
- Batch sending limit: 500 recipients per request
- Daily sending quotas may apply based on account type
Strategies for Handling Rate Limits:
- Exponential Backoff Algorithm:
async function sendWithRetry(sendFunction: () => Promise<void>, maxRetries: number = 3): Promise<void> {
for (let i = 0; i < maxRetries; i++) {
try {
await sendFunction();
return;
} catch (error) {
if (error.code === 'RATE_LIMIT_EXCEEDED' && i < maxRetries - 1) {
const delay = Math.pow(2, i) * 1000; // 1s, 2s, 4s
await new Promise(resolve => setTimeout(resolve, delay));
} else {
throw error;
}
}
}
}- Queue-based Processing:
import Queue from 'bull';
const smsQueue = new Queue('sms', process.env.REDIS_URL);
// Add messages to queue
smsQueue.add({ to: '+242123456789', message: 'Hello' }, {
attempts: 3,
backoff: { type: 'exponential', delay: 2000 }
});
// Process queue with rate limiting
smsQueue.process(30, async (job) => {
await sendSMS(job.data.to, job.data.message);
});Strategies for Large-Scale Sending:
- Implement queuing system for high-volume campaigns
- Use batch APIs when possible
- Schedule messages across multiple time windows
- Monitor delivery rates and adjust sending speed
Error Handling and Reporting
Common Error Scenarios and Solutions:
| Error Type | HTTP Code | Error Code | Solution |
|---|---|---|---|
| Invalid phone number | 400 | 21211 | Validate format (+242XXXXXXXXX) |
| Unregistered sender ID | 403 | 21606 | Complete sender ID registration |
| Network congestion | 429 | - | Implement retry with backoff |
| Content filtered | 400 | 21408 | Review message content |
| Insufficient balance | 402 | - | Add account funds |
Comprehensive Error Handling Example:
async function sendSMSWithErrorHandling(
to: string,
message: string,
senderId: string
): Promise<{ success: boolean; error?: string }> {
try {
const formattedNumber = to.startsWith('+242') ? to : `+242${to}`;
// Validate phone number format
if (!/^\+242\d{9}$/.test(formattedNumber)) {
throw new Error('Invalid phone number format for Republic of Congo');
}
const response = await client.messages.create({
body: message,
from: senderId,
to: formattedNumber,
statusCallback: 'https://your-webhook-url.com/status'
});
// Log success
await logDelivery({
messageId: response.sid,
to: formattedNumber,
status: 'sent',
timestamp: new Date()
});
return { success: true };
} catch (error) {
// Categorize and log error
const errorType = categorizeError(error);
await logError({
type: errorType,
message: error.message,
to: to,
timestamp: new Date()
});
// Determine if retry is appropriate
if (shouldRetry(error)) {
// Add to retry queue
await addToRetryQueue({ to, message, senderId });
}
return { success: false, error: error.message };
}
}
function categorizeError(error: any): string {
if (error.code === 21211) return 'invalid_number';
if (error.code === 21606) return 'sender_id_issue';
if (error.status === 429) return 'rate_limit';
if (error.code === 21408) return 'content_filtered';
return 'unknown';
}
function shouldRetry(error: any): boolean {
const retryableErrors = [429, 500, 502, 503, 504];
return retryableErrors.includes(error.status);
}Webhook Implementation for Delivery Receipts:
import express from 'express';
const app = express();
app.post('/status', express.urlencoded({ extended: false }), (req, res) => {
const {
MessageSid,
MessageStatus,
To,
ErrorCode
} = req.body;
// Update your database with delivery status
updateDeliveryStatus({
messageId: MessageSid,
status: MessageStatus,
recipient: To,
errorCode: ErrorCode,
timestamp: new Date()
});
// Alert on failures
if (MessageStatus === 'failed' || MessageStatus === 'undelivered') {
sendAlert({
type: 'delivery_failure',
messageId: MessageSid,
errorCode: ErrorCode
});
}
res.sendStatus(200);
});Logging Best Practices:
- Implement comprehensive error logging with structured data
- Track delivery receipts and status updates via webhooks
- Monitor carrier responses for patterns
- Set up automated alerts for high failure rates (> 10%)
- Include context: message ID, recipient, timestamp, error details
- Use log aggregation tools (ELK Stack, Splunk, Datadog)
Recap and Additional Resources
Key Takeaways
Compliance Checklist:
- Obtain explicit, documented consent before sending marketing messages
- Implement STOP/HELP keyword processing in French and English
- Honor opt-out requests within 24 hours
- Maintain clean, updated suppression lists
- Send only during business hours (8:00 AM – 8:00 PM, UTC+1)
Technical Implementation Checklist:
- Register alphanumeric sender ID (allow 3 weeks)
- Format phone numbers correctly (+242XXXXXXXXX)
- Implement comprehensive error handling and retry logic
- Set up delivery receipt webhooks
- Monitor delivery rates by carrier (target > 95%)
- Test across MTN and Airtel networks
Content Best Practices Checklist:
- Keep messages under 160 characters when possible
- Use French as primary language
- Avoid URL shorteners and suspicious patterns
- Include clear sender identification
- Limit frequency to 2 – 3 messages per week
- Test content for carrier filtering
Priority Framework:
- High Priority (Week 1): Sender ID registration, compliance setup, opt-out system
- Medium Priority (Week 2 – 3): API integration, error handling, monitoring
- Low Priority (Week 4+): Optimization, A/B testing, localization refinements
Next Steps
Implementation Timeline and Resources:
| Step | Timeline | Resources Required |
|---|---|---|
| Review ARPCE regulations | 1 – 2 days | Legal team, 2 hours |
| Register sender ID | 3 weeks | Business documents, $500 – $1,000 |
| Legal compliance review | 1 week | Legal counsel, 5 – 10 hours |
| API integration and testing | 1 – 2 weeks | Developer, 40 – 80 hours |
| Set up monitoring and alerts | 3 – 5 days | DevOps engineer, 16 – 32 hours |
| Launch test campaigns | 1 week | Marketing team, developer |
Action Items:
- Review ARPCE regulations at https://www.arpce.cg
- Consult legal counsel for compliance review
- Set up test campaigns with major carriers
- Implement proper monitoring and reporting
Additional Resources
Official Regulatory Resources:
- ARPCE Guidelines: https://www.arpce.cg/publications
- Telecommunications Law: https://www.sgg.cg/telecommunications
- Industry Best Practices: https://www.gsma.com/africa/guidelines
Developer Support:
- Twilio Documentation: https://www.twilio.com/docs/sms
- Sinch Developer Portal: https://developers.sinch.com/
- MessageBird API Docs: https://developers.messagebird.com/
- Plivo SMS Guides: https://www.plivo.com/docs/sms/
Community Forums:
- GSMA Africa Forum: https://www.gsma.com/africa/forum
- Twilio Community: https://community.twilio.com/
- Stack Overflow SMS Tag: https://stackoverflow.com/questions/tagged/sms
Troubleshooting Resources:
- SMS Delivery Issues: Contact your SMS provider's technical support
- Regulatory Questions: contact@arpce.cg
- Carrier-specific Issues: Reach out through your SMS provider's carrier relations team
Contact Information:
- ARPCE Support: contact@arpce.cg
- Technical Support: Available through your chosen SMS provider
- Legal Resources: Local telecommunications counsel recommended
Source Citations
Telecommunications Regulatory Authority:
- ARPCE (Agence de Régulation des Postes et des Communications Électroniques): https://www.arpce.cg/
- ARPCE Wikipedia: https://en.wikipedia.org/wiki/Agence_de_R%C3%A9gulation_des_Postes_et_des_Communication_Electroniques_Republique_du_Congo
- TechAfrica News - ARPCE Satellite Communications: https://techafricanews.com/2025/10/03/republic-of-congos-arpce-advances-technical-and-regulatory-expertise-in-satellite-communications/
Mobile Network Operators & Market Data:
- MTN and Airtel Market Share: https://www.datacenterdynamics.com/en/news/airtel-congo-and-mtn-strike-national-roaming-agreement/
- Congo Telecom Mobile Launch: https://techafricanews.com/2024/12/31/congo-telecom-launches-operational-mobile-network/
- MTN Airtel Roaming Agreement: https://developingtelecoms.com/telecom-business/operator-news/17800-congo-telecom-goes-mobile.html
- ARPCE Network Quality Audit: https://techafricanews.com/2025/05/27/arpce-urges-airtel-mtn-to-fix-failing-networks-after-nationwide-quality-audit/
Technical Standards:
- Republic of Congo Country Code +242: https://www.howtocallabroad.com/congo/
- Telephone Numbers in Republic of Congo: https://en.wikipedia.org/wiki/Telephone_numbers_in_the_Republic_of_the_Congo
- Mobile Country Codes (Africa): https://en.wikipedia.org/wiki/Mobile_network_codes_in_ITU_region_6xx_(Africa)
- GSM-7 Encoding Standard: https://www.twilio.com/docs/glossary/what-is-gsm-7-character-encoding
- UCS-2 Character Encoding: https://www.twilio.com/docs/glossary/what-is-ucs-2-character-encoding
- SMS Character Limits: https://www.twilio.com/docs/glossary/what-sms-character-limit
- Republic of Congo Time Zone (UTC+1): https://www.zeitverschiebung.net/en/country/cg