tools
tools
Seychelles SMS Guide: Compliance, Regulations & Best Practices 2025
Complete guide to sending SMS in Seychelles. Learn about SCRA regulations, mobile operators (Airtel, Cable & Wireless), API integrations, compliance requirements, and messaging best practices.
Seychelles SMS Guide: Compliance, Regulations & Best Practices 2025
Seychelles SMS Market Overview
| Locale name: | Seychelles |
|---|---|
| ISO code: | SC |
| Region | Middle East & Africa |
| Mobile country code (MCC) | 633 |
| Mobile network codes (MNC) | 01 (Cable & Wireless), 10 (Airtel) |
| Dialing Code | +248 |
Source: ITU Operational Bulletin T-SP-OB.1294-2024 (MCC-MNC assignments); Wikipedia Mobile Network Codes in ITU region 6xx.
Market Conditions: Seychelles operates a duopoly mobile telecommunications market with two major operators: Airtel Seychelles (market leader with approximately 55-57% market share) and Cable & Wireless Seychelles (approximately 40-45% market share). While OTT messaging apps gain popularity, SMS remains reliable for business-to-consumer communications and critical notifications due to its universal reach. The Seychelles Communications Regulatory Authority (SCRA), established under the Communications Act 2023, conducts regular performance assessments of both operators' voice and data services across Mahé, Praslin, and La Digue.
Source: SCRA network performance assessments (September-October 2024); market share data from telecommunications industry reports (2024).
Key SMS Features and Capabilities in Seychelles
Seychelles supports basic SMS functionality with limitations on advanced features like two-way messaging and concatenation.
Two-way SMS Support
Two-way SMS is not supported in Seychelles according to current platform capabilities. Businesses can send outbound messages but cannot receive replies through the same channel.
Workarounds for two-way communication needs:
- Use alternative channels: Email, web forms, or mobile apps for customer responses
- Include a callback phone number in SMS messages for urgent responses
- Leverage OTT messaging platforms (WhatsApp Business API, Telegram) that support two-way communication
- Implement QR codes linking to response forms or chatbots
- Consider international long codes or virtual numbers that may support inbound messaging (test with specific carriers first)
Concatenated Messages (Segmented SMS)
Support: Concatenated messaging is not supported in Seychelles. Message length rules: Standard SMS length limits apply – messages exceeding these limits may be truncated or fail to deliver. Encoding considerations: Keep messages within single SMS length limits to ensure reliable delivery.
SMS Character Limits by Encoding:
| Encoding Type | Single Message Limit | When Used |
|---|---|---|
| GSM-7 | 160 characters | Standard Latin characters, numbers, basic punctuation |
| UCS-2 (Unicode) | 70 characters | Emojis, special characters, non-Latin scripts |
Note: Since concatenation is not supported in Seychelles, split messages manually or shorten them if they exceed these limits. If concatenation were supported, segment limits would be 153 characters (GSM-7) and 67 characters (Unicode) per segment.
Character encoding best practices:
- Check messages for Unicode characters before sending – even one emoji reduces the limit from 160 to 70 characters
- Avoid curly quotes – use straight quotes instead
- Test messages with an SMS length calculator to verify encoding type
- Replace Unicode characters with GSM-7 equivalents where possible (e.g., use straight apostrophes instead of curly ones)
Source: Twilio Messaging Character Limits; AWS SMS Character Limitations.
MMS Support
MMS messages are not directly supported in Seychelles. Instead, MMS content automatically converts to SMS with an embedded URL link where recipients can view the multimedia content. This ensures you can still share rich media while maintaining compatibility with local network capabilities.
MMS-to-SMS conversion details:
- Your MMS platform (e.g., Twilio, Sinch) hosts the media on their servers and generates a short URL
- The URL typically expires after 30-90 days (varies by provider)
- Recipients with limited data plans may hesitate to click links
- Test the mobile experience – ensure the landing page is mobile-optimized
- Consider including context in the SMS text (e.g., "View your invoice here: [URL]" instead of just the URL)
Recipient Phone Number Compatibility
Number Portability
Number portability is not currently operationally available in Seychelles, meaning mobile numbers remain tied to their original carrier. However, the Broadcasting and Telecommunication (Mobile Number Portability) Regulations 2023 have been enacted, establishing the legal framework for future MNP implementation under SCRA oversight. Users changing providers currently need to change their numbers.
Timeline for MNP implementation: As of January 2025, SCRA has not announced a specific rollout date for mobile number portability. Based on similar implementations in comparable markets, expect 18-36 months from regulatory framework completion to operational launch. Monitor SCRA's website for official announcements.
Source: Broadcasting and Telecommunication (Mobile Number Portability) Regulations 2023; SCRA regulatory framework (2023-2024).
Sending SMS to Landlines
You cannot send SMS to landline numbers in Seychelles. Attempts to send messages to landline numbers will result in a 400 response with error code 21614. These messages will not appear in logs, and your account will not be charged for failed attempts.
Landline identification and filtering:
- Seychelles mobile numbers typically begin with specific prefixes (e.g., 2 5XXXXX format for 7-digit local numbers)
- Implement phone number validation using E.164 format (+248XXXXXXX)
- Use phone number lookup APIs (e.g., Twilio Lookup, Numverify) to verify number type before sending
- Maintain a database of known landline prefixes and filter them from SMS campaigns
- Monitor error code 21614 in delivery reports to identify and suppress landline numbers
Compliance and Regulatory Requirements for SMS in Seychelles
The Seychelles Communications Regulatory Authority (SCRA), established under the Communications Act 2023, oversees electronic communications services including SMS messaging. SCRA began operations in 2024 with Mr. Wilven Jean appointed as Chief Executive Officer (effective January 13, 2025) and Mr. Joyvani Chetty as Board Chairperson. While specific SMS regulations are evolving, adhere to general telecommunications guidelines and international best practices.
Source: SCRA official announcements; Communications Act 2023.
Data Protection and Privacy Requirements
Seychelles enacted the Data Protection Act 2023 (replacing the 2003 Act that was never brought into force), which governs the processing of personal data including phone numbers for SMS marketing. While the Act has not yet been brought into force, prepare for compliance as the regulatory framework takes shape.
Key requirements under the Data Protection Act 2023:
- Registration: Register as a data user (including businesses holding phone numbers for SMS) with the Data Protection Commissioner
- Lawful processing: Obtain and process personal data (phone numbers) fairly and lawfully
- Purpose limitation: Hold data only for specified and lawful purposes
- Data minimization: Collect only phone numbers adequate, relevant, and not excessive for your purpose
- Consent: Obtain clear consent before collecting phone numbers for SMS marketing
- Access rights: Provide individuals the right to access their data and request corrections or deletion
- Security: Implement appropriate security measures to protect phone number databases
- Transfer restrictions: The Data Protection Commissioner may prohibit transfers of personal data outside Seychelles if it contravenes data protection principles
During the interim period (before full enforcement): Data protection continues under general principles of privacy and confidentiality in the Civil Code of Seychelles and provisions in the Financial Institutions Act and Revenue Administration Act.
Penalties for non-compliance: While specific penalty structures under the Data Protection Act 2023 await implementation regulations, expect enforcement mechanisms to include fines, suspension of data processing activities, and potential criminal liability for serious violations. The Data Protection Commissioner will have authority to investigate complaints and impose sanctions once the Act is brought into force.
Source: Data Protection Act 2023; DLA Piper Data Protection Laws - Seychelles.
Bulk SMS Sender Registration
Currently, there are no formal registration requirements specifically for bulk SMS senders in Seychelles. However, you should:
- Register as a data user with the Data Protection Commissioner once the registration system becomes operational
- Maintain records of consent and opt-in mechanisms
- Be prepared to demonstrate compliance with data protection principles
- Consider voluntary registration with SCRA to establish legitimacy
- Monitor SCRA announcements for any forthcoming SMS-specific regulations
Note: As regulations evolve, SCRA may introduce specific registration or licensing requirements for bulk SMS service providers. Check SCRA's website for updates.
Consent and Opt-In
Explicit Consent Requirements:
- Obtain clear, documented opt-in consent before sending marketing messages
- Maintain detailed records of when and how you obtained consent
- Include clear terms of service and privacy policy references
- Specify the types of messages users will receive and approximate frequency
Sample consent language:
English: "By checking this box, I consent to receive SMS messages from [Company Name] about [specific purpose, e.g., 'promotional offers and product updates']. I understand I can opt out at any time by replying STOP. Message frequency: approximately [X] messages per month. Standard message and data rates may apply."
French: "En cochant cette case, je consens à recevoir des messages SMS de [Company Name] concernant [objectif spécifique]. Je comprends que je peux me désinscrire à tout moment en répondant STOP. Fréquence des messages : environ [X] messages par mois."
Seychellois Creole: "Letan mon tik sa boaz, mon aksepte resevwar mesaz SMS depi [Company Name] lor [objetif spesifik]. Mon konpran mon kapab dezabonnen ninport letan letan mon repond STOP. Konbyin fwa mesaz: anviron [X] mesaz par mwa."
HELP/STOP and Other Commands
- All SMS campaigns must support standard STOP and HELP commands
- Messages should be in Seychellois Creole, English, or French (the three official languages recognized by the constitution)
- Include opt-out instructions in the first message of any new campaign
- Process STOP requests immediately and send confirmation message
Example HELP/STOP responses in three languages:
English:
- HELP response: "You are subscribed to [Company Name] updates. Reply STOP to unsubscribe. For support, contact [phone/email]."
- STOP response: "You have been unsubscribed from [Company Name] messages. You will no longer receive SMS from us."
French:
- Réponse HELP: "Vous êtes abonné aux mises à jour de [Company Name]. Répondez STOP pour vous désabonner. Pour assistance, contactez [phone/email]."
- Réponse STOP: "Vous avez été désabonné des messages de [Company Name]. Vous ne recevrez plus de SMS de notre part."
Seychellois Creole:
- Repons HELP: "Ou abonnen avek [Company Name] update. Repond STOP pou dezabonnen. Pou swiv, kontakte [phone/email]."
- Repons STOP: "Ou finn dezabonnen depi [Company Name] mesaz. Ou pa pou resevwar SMS ankor."
Source: Constitution of Seychelles; official language status confirmed since 1978 for Seychellois Creole.
Do Not Call / Do Not Disturb Registries
While Seychelles does not maintain an official Do Not Call registry, you should:
- Maintain your own suppression lists
- Honor opt-out requests immediately
- Keep records of opted-out numbers
- Regularly clean contact lists to remove unsubscribed numbers
Time Zone Sensitivity
Seychelles follows SCT (Seychelles Time, UTC+4).
Recommended Sending Windows:
- Business messages: 8:00 AM – 8:00 PM SCT
- Urgent notifications: 24/7 permitted if essential (e.g., security alerts, emergency notifications, transactional confirmations, appointment reminders within 24 hours)
- Marketing messages: 10:00 AM – 6:00 PM SCT on business days
Phone Number Options and SMS Sender IDs for Seychelles
Alphanumeric Sender ID
Operator network capability: Supported Registration requirements: Dynamic usage allowed without pre-registration Sender ID preservation: May be overwritten on Airtel network with generic alphanumeric ID
Alphanumeric Sender ID formatting rules:
- Length: 3-11 characters maximum
- Allowed characters: A-Z (uppercase), a-z (lowercase), 0-9 (digits), and space character (ASCII 32)
- Restrictions: Cannot be purely numeric (use numeric sender ID instead)
- Case sensitivity: Mixed case is supported but display may vary by handset
- Generic IDs prohibited: Terms like "INFO", "SMS", "NOTICE" are typically blocked or replaced
What happens when Airtel overwrites sender IDs: Messages sent with alphanumeric sender IDs may be replaced with a generic identifier on the Airtel network. The exact generic ID varies but typically appears as a short alphanumeric code. Messages are still delivered, but you lose branding. This occurs on a best-effort basis and is beyond the control of SMS platforms.
Best practices for sender ID selection:
- Choose a recognizable brand name or abbreviation
- Keep it short (8 characters or less recommended) for better display on all devices
- Avoid special characters that may cause encoding issues
- Test sender IDs on both Airtel and Cable & Wireless networks before large campaigns
- Use the same sender ID consistently to build recipient recognition
- For critical transactional messages, include company name in the message body as backup
Source: Twilio Alphanumeric Sender ID documentation; BSG World Alphanumeric Sender ID; Vonage Seychelles SMS Features.
Long Codes
Domestic vs. International:
- Domestic long codes: Supported by operators but not currently available through major platforms
- International long codes: Limited support
Sender ID preservation: Variable depending on carrier Provisioning time: N/A for domestic, varies for international Use cases: Transactional messaging, alerts, notifications
International long codes for Seychelles: UK, US, and European long codes may work for outbound messaging to Seychelles, but delivery rates and sender ID preservation vary significantly by carrier. Test with specific numbers before deployment. Contact your SMS provider for carrier-specific routing options.
Short Codes
Support: Available through local carriers Provisioning time: Not currently supported through major platforms Use cases: High-volume messaging, marketing campaigns, 2FA
Acquiring short codes directly: Contact Airtel Seychelles or Cable & Wireless Seychelles directly to inquire about short code availability, pricing, and provisioning. Expect a multi-week to multi-month provisioning timeline and higher costs compared to alphanumeric sender IDs. Short codes are ideal for high-volume use cases (>100,000 messages/month) where consistent branding and reliability are critical.
Sender ID type comparison:
| Type | Cost | Provisioning Time | Branding Control | Best For |
|---|---|---|---|---|
| Alphanumeric | Low | Immediate | Moderate (may be overwritten) | Most use cases, quick deployment |
| Long Code | Medium | Days to weeks | High | Two-way messaging, dedicated number |
| Short Code | High | Weeks to months | Very high | High-volume campaigns, premium services |
Restricted SMS Content, Industries, and Use Cases
Restricted Industries and Content:
- Gambling and betting services
- Adult content or services
- Cryptocurrency promotions
- Unauthorized financial services
- Political messaging without proper authorization (requires approval from relevant government authority or electoral commission for campaign-related messaging)
- Pharmaceutical products and health claims (avoid making unverified medical claims or promoting prescription medications without proper authorization)
Example prohibited content:
- "Win big at [Casino Name]! Click here to claim your bonus"
- "Buy Bitcoin now – 10x returns guaranteed!"
- "Miracle cure for diabetes – order today"
- "Vote for [Candidate] – send your support now" (without electoral commission approval)
Content Filtering
Known Carrier Rules:
- URLs may trigger spam filters
- Multiple exclamation marks often flagged (3 or more in a single message)
- All-caps messages may be blocked or deprioritized
- Excessive use of symbols (!!!, $$$, etc.)
Best Practices to Avoid Filtering:
- Use clear, professional language
- Avoid excessive punctuation (limit to 1-2 exclamation marks maximum)
- Use mixed case instead of all caps (e.g., "Special Offer" instead of "SPECIAL OFFER")
- Include company name in sender ID
- Limit URL usage in messages (maximum 1 URL per message recommended)
- Avoid spam trigger words: "FREE", "WINNER", "CLICK NOW", "URGENT!!!"
Content filtering checklist:
- Message uses mixed case (not all caps)
- Punctuation limited to 1-2 exclamation marks
- Maximum 1 URL included
- No spam trigger words ("FREE", "WINNER", etc.)
- Company name in sender ID or message body
- Message length within limits (160 GSM-7 or 70 Unicode)
- No prohibited content (gambling, adult, crypto)
Best Practices for Sending SMS in Seychelles
Messaging Strategy
- Keep messages under 160 characters when possible (or 70 for Unicode)
- Include clear call-to-action
- Use personalization tokens thoughtfully (first name, account number)
- Maintain consistent sender ID across all campaigns
Effective vs. Ineffective Message Templates:
❌ Ineffective (marketing): "URGENT!!! AMAZING OFFER!!! Click here NOW to WIN BIG PRIZES and save HUGE on everything!!! Limited time only!!! Act fast!!!" Issues: All caps, excessive punctuation, spam trigger words, no clear sender or value proposition
✅ Effective (marketing): "Hi Sarah, enjoy 20% off your next purchase at BeauBelle. Use code SAVE20 at checkout. Valid until March 15. Reply STOP to opt out." Strengths: Personalized, specific offer, clear expiration, professional tone, opt-out included
❌ Ineffective (transactional): "Your order has been processed and will be shipped soon. Thank you for your business." Issues: Vague, no tracking info, no actionable next steps
✅ Effective (transactional): "Your order #12345 shipped! Track it here: [short URL]. Est. delivery: March 10. Questions? Call +248 4 123456." Strengths: Order number, tracking link, delivery estimate, support contact
Sending Frequency and Timing
- Limit marketing messages to 2-4 per month per recipient
- Respect local holidays and weekends
- Avoid sending during major cultural or religious events
- Space out messages to prevent recipient fatigue
Major Seychelles Public Holidays (2025):
- January 1-2: New Year's Day & Holiday
- April 18: Good Friday
- April 19: Easter Saturday
- April 21: Easter Monday
- May 1: Labour Day
- June 18: Constitution Day
- June 19: Corpus Christi
- June 29: Independence (National) Day
- August 15: Assumption Day
- November 1: All Saints Day
- December 8: The Feast of the Immaculate Conception
- December 25: Christmas Day
Cultural events to avoid (typically October): Kreol Festival (Festival Kreol) – a month-long celebration of Creole culture.
Note: When a public holiday falls on a Sunday, the following Monday becomes a public holiday. Plan SMS campaigns accordingly and avoid sending marketing messages on or immediately before major holidays.
Source: Seychelles Foreign Affairs Department - Public Holidays.
Engagement benchmarks by message frequency:
- 1-2 messages/month: Typical opt-out rate 0.5-1%
- 3-4 messages/month: Typical opt-out rate 1-2%
- 5+ messages/month: Typical opt-out rate 3-5% (indicates over-messaging)
Note: Acceptable opt-out rates vary by industry and relationship strength. Transactional messages typically have lower opt-out rates than marketing messages.
Localization
- Official languages: Seychellois Creole (spoken natively by ~95% of population), English, and French
- Seychellois Creole is highly effective for local engagement and cultural resonance
- English is widely used for formal business communications
- French is popular among Franco-Seychellois communities
- Use appropriate date formats (DD/MM/YYYY)
- Account for local cultural nuances
Language selection strategy:
- Seychellois Creole: Use for consumer-facing marketing, local community engagement, informal communications, and messages targeting the general population
- English: Use for formal business communications, B2B messaging, government-related notifications, and international audiences
- French: Use when targeting Franco-Seychellois communities, tourism sector, or when formality and elegance are desired
- Mixed approach: For broad campaigns, consider A/B testing messages in different languages to identify which resonates best with your specific audience
Sample messages in all three languages (promotional):
English: "Spring Sale at Island Store! Get 25% off all electronics. Visit us at Victoria or shop online. Offer ends April 30. Reply STOP to opt out."
French: "Soldes de printemps chez Island Store ! 25% de réduction sur tous les appareils électroniques. Visitez-nous à Victoria ou achetez en ligne. Offre valable jusqu'au 30 avril. Répondez STOP pour vous désabonner."
Seychellois Creole: "Spring Sale dan Island Store! Ganyen 25% reduksyon lor tou aparey elektronik. Vizit nou dan Victoria oubyen aset online. Lofr fini 30 Avril. Repond STOP pou dezabonnen."
Source: Constitution of Seychelles; language usage statistics from census and linguistic studies.
Opt-Out Management
- Process opt-outs within 24 hours
- Maintain centralized opt-out database
- Send opt-out confirmation message
- Regular audit of opt-out compliance
Opt-out database schema recommendations:
CREATE TABLE sms_opt_outs (
id SERIAL PRIMARY KEY,
phone_number VARCHAR(20) NOT NULL UNIQUE,
opt_out_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
opt_out_source VARCHAR(50) NOT NULL, -- 'STOP_REPLY', 'WEB_FORM', 'MANUAL'
campaign_id VARCHAR(100), -- Campaign from which they opted out
reason TEXT, -- Optional: User-provided reason
confirmed BOOLEAN DEFAULT FALSE, -- Confirmation message sent
INDEX idx_phone (phone_number),
INDEX idx_date (opt_out_date)
);Testing and Monitoring
- Test across major local carriers (Airtel and Cable & Wireless)
- Monitor delivery rates by carrier
- Track engagement metrics
- Regular A/B testing of message content
- Document and analyze failure patterns
Key Performance Indicators (KPIs):
- Delivery rate: Target 95%+ for transactional, 90%+ for marketing
- Bounce rate: Should be <5% (higher rates indicate data quality issues)
- Opt-out rate: Aim for <2% per campaign (higher rates indicate poor targeting or message relevance)
- Response rate (for messages with CTAs): Varies by industry, but 5-10% is typical for well-targeted campaigns
- Time-to-delivery: Should be <30 seconds for 95% of messages
Note: Acceptable thresholds vary by use case. Transactional messages should have higher delivery rates than marketing messages. If delivery rates drop below 85%, investigate carrier issues, sender ID problems, or content filtering.
Monitoring dashboard recommendations:
- Real-time metrics: Message volume, delivery rate, error rate by carrier
- Trend analysis: Daily/weekly/monthly delivery patterns, seasonal variations
- Alerting thresholds:
- Delivery rate drops below 85%
- Error rate exceeds 10%
- Opt-out rate exceeds 3% in single campaign
- API latency exceeds 5 seconds
- Tools to consider: Grafana + Prometheus, Datadog, CloudWatch, custom dashboards using SMS provider APIs
SMS API Integrations for Seychelles: Implementation Guide
Twilio
Twilio provides a robust SMS API for sending messages to Seychelles.
import * as Twilio from 'twilio';
// Initialize Twilio client with your credentials
const client = new Twilio(
process.env.TWILIO_ACCOUNT_SID,
process.env.TWILIO_AUTH_TOKEN
);
// Function to send SMS to Seychelles
async function sendSMSToSeychelles(
to: string,
message: string,
senderId: string
) {
try {
// Ensure phone number is in E.164 format for Seychelles (+248)
const formattedNumber = to.startsWith('+248') ? to : `+248${to}`;
const response = await client.messages.create({
body: message,
from: senderId, // Your approved sender ID
to: formattedNumber,
statusCallback: 'https://your-domain.com/sms/status', // Webhook for delivery status
});
console.log(`Message sent successfully! SID: ${response.sid}`);
return response;
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}Twilio pricing and delivery rates:
- Pricing: Approximately $0.11-0.13 per message to Seychelles (check current rates on Twilio's pricing page)
- Typical delivery success rate: 92-96% across both carriers
- Failed messages are not charged
Twilio rate limits:
- Default: 1 message per second per phone number (long code)
- Alphanumeric sender IDs: Varies by destination, typically 10-100 messages per second
- Contact Twilio to request higher throughput for high-volume use cases
Source: Twilio Rate Limits Documentation.
Sinch
Sinch offers comprehensive SMS capabilities for Seychelles through their REST API:
import axios from 'axios';
class SinchSMSService {
private readonly apiToken: string;
private readonly serviceId: string;
private readonly baseUrl = 'https://sms.api.sinch.com/xms/v1';
constructor(apiToken: string, serviceId: string) {
this.apiToken = apiToken;
this.serviceId = serviceId;
}
async sendSMS(to: string, message: string) {
try {
// Format phone number in E.164 format
const formattedNumber = to.startsWith('+248') ? to : `+248${to}`;
const response = await axios.post(
`${this.baseUrl}/${this.serviceId}/batches`,
{
from: "YourSenderID",
to: [formattedNumber],
body: message
},
{
headers: {
'Authorization': `Bearer ${this.apiToken}`,
'Content-Type': 'application/json'
}
}
);
return response.data;
} catch (error) {
console.error('Sinch SMS Error:', error);
throw error;
}
}
}Sinch rate limits:
- API rate limit: 800 requests per second across all apps
- Message throughput: Varies by account configuration, contact Sinch for specific limits
Source: Sinch Rate Limits Documentation.
MessageBird
MessageBird provides a straightforward API for SMS delivery to Seychelles:
import messagebird from 'messagebird';
class MessageBirdService {
private client: any;
constructor(apiKey: string) {
this.client = messagebird(apiKey);
}
sendSMS(to: string, message: string, senderId: string): Promise<any> {
return new Promise((resolve, reject) => {
this.client.messages.create({
originator: senderId,
recipients: [to],
body: message
}, (err: any, response: any) => {
if (err) {
reject(err);
} else {
resolve(response);
}
});
});
}
}MessageBird rate limits: Specific rate limits vary by account type and plan. Default limits are typically sufficient for most use cases. Contact MessageBird for enterprise-level throughput requirements.
Plivo
Plivo's API integration for Seychelles SMS messaging:
import plivo from 'plivo';
class PlivoSMSService {
private client: any;
constructor(authId: string, authToken: string) {
this.client = new plivo.Client(authId, authToken);
}
async sendSMS(to: string, message: string, senderId: string) {
try {
const response = await this.client.messages.create({
src: senderId,
dst: to,
text: message,
});
return response;
} catch (error) {
console.error('Plivo SMS Error:', error);
throw error;
}
}
}Plivo rate limits: Default limits are typically around 100 messages per second. Contact Plivo for higher throughput requirements.
Provider comparison and selection guide:
| Provider | Best For | Strengths | Pricing Range |
|---|---|---|---|
| Twilio | Reliability, documentation, ecosystem | Excellent docs, large developer community, robust features | $0.11-0.13/msg |
| Sinch | High-volume, global reach | Very high throughput, enterprise features | Contact for quote |
| MessageBird | European companies, multi-channel | Easy integration, good European support | $0.10-0.12/msg |
| Plivo | Cost-conscious, simple use cases | Competitive pricing, straightforward API | $0.09-0.11/msg |
Note: Pricing estimates are approximate and vary based on volume commitments and account type. Always check current provider rates.
API Rate Limits and Throughput
Provider-specific rate limits summary:
| Provider | Default Rate Limit | Notes |
|---|---|---|
| Twilio | 1 MPS (long code), 10-100 MPS (alphanumeric) | Can be increased upon request |
| Sinch | 800 requests/second (API), varies by account | Very high throughput available |
| MessageBird | Varies by plan | Contact for specific limits |
| Plivo | ~100 MPS | Enterprise plans available |
| Vonage | ~30 MPS | Can be increased for high-volume senders |
- Batch processing recommended for volumes over 1000/hour
- Implement exponential backoff for retry logic
- Queue messages during peak times
Throughput Management Strategies:
- Implement message queuing system (e.g., RabbitMQ, AWS SQS, Redis Queue)
- Use batch APIs for bulk sending when available
- Monitor delivery rates and adjust sending speed dynamically
- Implement circuit breakers for error handling (stop sending after consecutive failures)
- Distribute load across multiple sender IDs if needed
Example queuing implementation (RabbitMQ with exponential backoff):
import amqp from 'amqplib';
interface SMSMessage {
to: string;
body: string;
senderId: string;
retryCount?: number;
}
class SMSQueue {
private connection: amqp.Connection | null = null;
private channel: amqp.Channel | null = null;
async connect() {
this.connection = await amqp.connect(process.env.RABBITMQ_URL!);
this.channel = await this.connection.createChannel();
await this.channel.assertQueue('sms_queue', { durable: true });
}
async enqueue(message: SMSMessage) {
if (!this.channel) throw new Error('Channel not initialized');
this.channel.sendToQueue(
'sms_queue',
Buffer.from(JSON.stringify(message)),
{ persistent: true }
);
}
async processQueue(sendFunction: (msg: SMSMessage) => Promise<void>) {
if (!this.channel) throw new Error('Channel not initialized');
this.channel.consume('sms_queue', async (msg) => {
if (msg) {
const smsMessage: SMSMessage = JSON.parse(msg.content.toString());
try {
await sendFunction(smsMessage);
this.channel!.ack(msg);
} catch (error) {
// Exponential backoff: retry with increasing delay
const retryCount = (smsMessage.retryCount || 0) + 1;
const maxRetries = 3;
if (retryCount < maxRetries) {
const delay = Math.pow(2, retryCount) * 1000; // 2s, 4s, 8s
setTimeout(() => {
this.enqueue({ ...smsMessage, retryCount });
}, delay);
}
this.channel!.ack(msg); // Remove from queue regardless
}
}
});
}
}Source: Twilio Rate Limits; Sinch Rate Limits; provider documentation.
Error Handling and Reporting
Common Error Scenarios:
| Error Type | HTTP Status | Common Codes | Resolution |
|---|---|---|---|
| Invalid phone number | 400 | 21211, 21614 (landline) | Validate E.164 format, check for landlines |
| Network timeout | 408, 504 | - | Retry with exponential backoff |
| Rate limit exceeded | 429 | 20429 (Twilio) | Implement rate limiting, queue messages |
| Invalid sender ID | 400, 403 | 21212 | Use allowed sender ID format (3-11 chars) |
| Insufficient balance | 402, 403 | 20003 | Top up account balance |
| Carrier rejection | 400, 500 | Varies | Check content filters, contact provider |
Troubleshooting guide:
- Error 21614 (Landline): Filter landline numbers using phone lookup APIs before sending
- Error 21211 (Invalid Number): Validate phone numbers match Seychelles format (+248XXXXXXX)
- Error 20429 (Rate Limit): Implement message queuing and respect rate limits
- Error 21212 (Invalid Sender ID): Ensure sender ID is 3-11 characters, alphanumeric only
- High bounce rates: Check for content filtering issues, test message content
- Low delivery rates on specific carrier: Contact SMS provider for carrier-specific routing issues
Logging Best Practices:
interface SMSLog {
messageId: string;
timestamp: Date;
recipient: string;
status: string;
errorCode?: string;
retryCount?: number;
carrier?: string; // Airtel or Cable & Wireless
senderId: string;
messageLength: number;
encoding: 'GSM-7' | 'UCS-2';
}
class SMSLogger {
async logEvent(log: SMSLog): Promise<void> {
// Store in database for analysis
await db.smsLogs.insert(log);
// Send to logging service
console.log(JSON.stringify(log));
// Alert on critical errors
if (log.errorCode && ['21614', '20429', '20003'].includes(log.errorCode)) {
await this.sendAlert(log);
}
}
async sendAlert(log: SMSLog): Promise<void> {
// Implement alerting logic (e.g., PagerDuty, email, Slack)
}
async queryLogs(filters: Partial<SMSLog>): Promise<SMSLog[]> {
return await db.smsLogs.find(filters);
}
}Recap and Additional Resources
Key Takeaways
-
Compliance Priorities:
- Obtain explicit consent before sending marketing messages
- Honor opt-out requests immediately (within 24 hours)
- Respect sending hours (10 AM – 6 PM SCT for marketing)
- Maintain proper records of consent and opt-outs
- Prepare for Data Protection Act 2023 compliance (register as data user, implement security measures)
-
Technical Considerations:
- Use E.164 number formatting (+248XXXXXXX)
- Keep messages within single SMS limits: 160 characters (GSM-7) or 70 characters (Unicode)
- Implement proper error handling and retry logic
- Monitor delivery rates by carrier (target 90%+ for marketing, 95%+ for transactional)
- Test across both Airtel and Cable & Wireless networks
-
Best Practices:
- Keep messages concise and within character limits
- Use approved alphanumeric sender IDs (3-11 characters)
- Implement rate limiting according to provider guidelines
- Regular testing and monitoring of delivery metrics
- Respect Seychelles holidays and cultural events (especially Kreol Festival)
- Consider language preferences (Creole for local, English for business, French for specific audiences)
Next Steps
- Review the Communications Act 2023 for compliance requirements
- Set up test accounts with preferred SMS providers (Twilio, Sinch, MessageBird, or Plivo)
- Implement proper logging and monitoring with KPI tracking
- Develop error handling strategies including retry logic and circuit breakers
- Prepare for Data Protection Act 2023 compliance by documenting consent collection processes
- Test sender IDs on both Airtel and Cable & Wireless networks
Estimated implementation timeline: 2-4 weeks for basic setup, 4-8 weeks for production-ready system with full compliance, monitoring, and error handling.
Resource requirements:
- 1 developer (backend) for API integration and error handling
- 1 developer (frontend/data) for opt-in/opt-out UI and database management
- Compliance review (legal/compliance team) for consent and data protection
- Testing across both carriers (budget for test messages)
Implementation checklist:
Phase 1: Planning & Setup (Week 1)
- Choose SMS provider based on volume, budget, and feature needs
- Create test account and obtain API credentials
- Set up development environment with sample code
- Review compliance requirements (Data Protection Act, SCRA guidelines)
- Design database schema for contacts and opt-outs
Phase 2: Core Development (Weeks 2-3)
- Implement API integration with error handling
- Build phone number validation (E.164 format, landline filtering)
- Create opt-in/opt-out UI and database
- Implement message queuing system
- Set up logging and monitoring dashboard
- Build HELP/STOP command handling
Phase 3: Testing & Optimization (Weeks 3-4)
- Test sender IDs on both Airtel and Cable & Wireless
- Conduct message delivery tests (GSM-7 vs Unicode)
- Test error handling and retry logic
- Validate opt-out processing (24-hour SLA)
- Perform load testing with queuing system
Phase 4: Compliance & Launch (Weeks 4-6)
- Document consent collection processes
- Prepare for Data Protection Commissioner registration
- Create compliance audit procedures
- Train team on SCRA guidelines and best practices
- Conduct final security review
- Deploy to production with monitoring
Phase 5: Monitoring & Iteration (Weeks 6-8)
- Monitor KPIs daily (delivery rate, opt-out rate, errors)
- Set up alerting for critical issues
- Conduct A/B testing on message content
- Analyze carrier-specific delivery patterns
- Iterate on message templates based on engagement data
Frequently Asked Questions
Q: Can I send SMS to Seychelles without registering with SCRA? A: Currently, there are no formal registration requirements for bulk SMS senders. However, you must comply with general telecommunications guidelines and prepare for Data Protection Act 2023 compliance.
Q: What happens if I send a message longer than 160 characters? A: Since concatenation is not supported, messages exceeding 160 characters (GSM-7) or 70 characters (Unicode) may be truncated or fail to deliver. Split long messages manually or shorten them.
Q: Why is my sender ID being replaced on Airtel? A: Airtel may overwrite alphanumeric sender IDs with generic identifiers on a best-effort basis. This is beyond your control. Include your company name in the message body as backup for critical messages.
Q: How do I identify mobile vs. landline numbers in Seychelles? A: Use phone number lookup APIs (e.g., Twilio Lookup, Numverify) to verify number type before sending. Monitor error code 21614 to identify landline attempts.
Q: What's the best time to send marketing SMS in Seychelles? A: Send marketing messages between 10:00 AM – 6:00 PM SCT on business days. Avoid public holidays and the Kreol Festival in October.
Q: Which language should I use for SMS in Seychelles? A: Use Seychellois Creole for consumer marketing (highest local engagement), English for formal business communications, and French for Franco-Seychellois communities. Consider A/B testing to determine what works best for your audience.
Q: How quickly must I process opt-out requests? A: Process all opt-out requests within 24 hours and send a confirmation message. Maintain a centralized database of opted-out numbers.
Q: What delivery rate should I expect? A: Target 95%+ for transactional messages and 90%+ for marketing messages. If rates drop below 85%, investigate carrier issues, sender ID problems, or content filtering.
Additional Resources
- Seychelles Communications Regulatory Authority (SCRA)
- Communications Act 2023
- Data Protection Act 2023 (Full Text)
- SMS Technical Guidelines (ITU)
- Twilio SMS Documentation
- Seychelles Public Holidays List
SCRA Contact Information:
- Website: https://www.scra.sc/
- Physical Address: Bel Eau, Mahé, Seychelles
- For inquiries regarding SMS regulations, telecommunications compliance, or licensing: Contact SCRA through their official website or visit their office during business hours