Serbia SMS Best Practices, Compliance, and Features
Serbia SMS Market Overview
Locale name: | Serbia |
---|---|
ISO code: | RS |
Region | Europe |
Mobile country code (MCC) | 220 |
Dialing Code | +381 |
Market Conditions: Serbia has a mature mobile market with high SMS adoption rates. The country's main mobile operators include Telekom Srbija (MTS), Telenor Serbia, and VIP Mobile. While OTT messaging apps like WhatsApp and Viber are popular, SMS remains crucial for business communications and authentication. Android devices dominate the market, though iOS usage continues to grow among urban populations.
Key SMS Features and Capabilities in Serbia
Serbia supports most standard SMS features including concatenated messages and alphanumeric sender IDs, though two-way SMS functionality is limited.
Two-way SMS Support
Two-way SMS is not supported in Serbia through major SMS providers. Businesses requiring interactive messaging capabilities should consider alternative communication channels.
Concatenated Messages (Segmented SMS)
Support: Yes, concatenation is supported, though availability may vary by sender ID type.
Message length rules: Standard SMS length of 160 characters for GSM-7 encoding, 70 characters for UCS-2 encoding.
Encoding considerations: Both GSM-7 and UCS-2 encodings are supported. Messages using Serbian characters require UCS-2 encoding, reducing the character limit to 70 per segment.
MMS Support
MMS messages are automatically converted to SMS with an embedded URL link. This conversion ensures delivery while maintaining rich media sharing capabilities through web-based content.
Recipient Phone Number Compatibility
Number Portability
Number portability is not available in Serbia. This means mobile numbers remain tied to their original carriers, simplifying message routing and delivery.
Sending SMS to Landlines
Sending SMS to landline numbers is not supported. Attempts to send messages to landline numbers will result in a 400 response error (code 21614), and no charges will be incurred.
Compliance and Regulatory Guidelines for SMS in Serbia
Serbia follows a combination of local telecommunications regulations and practices aligned with EU standards. The Regulatory Agency for Electronic Communications and Postal Services (RATEL) oversees telecommunications services, including SMS communications.
Consent and Opt-In
Explicit Consent Requirements:
- Written or electronic consent must be obtained before sending marketing messages
- Consent records must be maintained and easily accessible
- Purpose of communication must be clearly stated during opt-in
- Double opt-in recommended for marketing campaigns
HELP/STOP and Other Commands
- All marketing messages must include the phrase "Odjava STOPMFL na 1599, 0din" for opt-out instructions
- STOP commands must be processed within 24 hours
- Support for both Latin and Cyrillic scripts required for opt-out messages
- Keywords must be recognized in both Serbian and English
Do Not Call / Do Not Disturb Registries
Serbia does not maintain a centralized Do Not Call registry. However, businesses should:
- Maintain internal suppression lists
- Honor opt-out requests immediately
- Document all opt-out requests for compliance
- Regularly clean contact lists to remove unsubscribed numbers
Time Zone Sensitivity
Serbia observes Central European Time (CET/CEST). Best practices include:
- Sending messages between 9:00 AM and 8:00 PM local time
- Avoiding messages during national holidays
- Limiting urgent messages outside business hours
- Respecting weekend quiet hours (before 10:00 AM and after 6:00 PM)
Phone Numbers Options and SMS Sender Types for Serbia
Alphanumeric Sender ID
Operator network capability: Supported with optional pre-registration
Registration requirements: Pre-registration available, takes approximately 16 days
Sender ID preservation: Yes for registered IDs; unregistered may be overwritten with generic sender ID
Long Codes
Domestic vs. International: International long codes supported; domestic not available
Sender ID preservation: No, sender IDs are overwritten with generic alphanumeric ID
Provisioning time: Immediate for international long codes
Use cases: Transactional messages, alerts, and notifications
Short Codes
Support: Not supported in Serbia
Provisioning time: N/A
Use cases: N/A
Restricted SMS Content, Industries, and Use Cases
Restricted Industries:
- Gambling and betting services
- Adult content
- Cryptocurrency promotions
- Unauthorized financial services
- Political campaign messages without proper authorization
Content Filtering
Carrier Filtering Rules:
- Messages containing certain keywords may be blocked
- URLs should be from approved domains
- Excessive punctuation may trigger spam filters
- High-volume sending patterns may be throttled
Best Practices to Avoid Filtering:
- Use registered sender IDs
- Maintain consistent sending patterns
- Avoid URL shorteners
- Include clear opt-out instructions
Best Practices for Sending SMS in Serbia
Messaging Strategy
- Keep messages under 160 characters when possible
- Include clear call-to-action
- Use personalization tokens thoughtfully
- Maintain consistent brand voice
Sending Frequency and Timing
- Limit to 2-4 messages per month per recipient
- Respect Serbian national holidays
- Avoid sending during Orthodox religious observances
- Space out bulk campaigns to prevent network congestion
Localization
- Default to Serbian language (Latin script)
- Consider dual-language messages for international brands
- Use local date/time formats (DD.MM.YYYY)
- Respect cultural sensitivities in content
Opt-Out Management
- Process opt-outs within 24 hours
- Maintain centralized opt-out database
- Include opt-out instructions in every marketing message
- Confirm opt-out with one final message
Testing and Monitoring
- Test across all major Serbian carriers (MTS, Telenor, VIP)
- Monitor delivery rates by carrier
- Track opt-out rates and patterns
- Regular testing of opt-out functionality
SMS API integrations for Serbia
Twilio
Twilio provides a robust SMS API with comprehensive support for Serbian message delivery. Authentication uses account SID and auth token credentials.
import { Twilio } from 'twilio';
// Initialize Twilio client with credentials
const client = new Twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);
// Function to send SMS to Serbia
async function sendSMSToSerbia(
to: string,
message: string,
senderId: string
): Promise<void> {
try {
// Ensure phone number is in E.164 format for Serbia (+381...)
const formattedNumber = to.startsWith('+381') ? to : `+381${to}`;
const response = await client.messages.create({
body: message,
from: senderId, // Registered alphanumeric sender ID
to: formattedNumber,
// Optional: Set status callback URL
statusCallback: 'https://your-domain.com/sms/status'
});
console.log(`Message sent successfully! SID: ${response.sid}`);
} catch (error) {
console.error('Error sending message:', error);
throw error;
}
}
Sinch
Sinch offers a straightforward REST API for SMS delivery in Serbia, requiring API token authentication.
import axios from 'axios';
class SinchSMSService {
private readonly baseUrl: string;
private readonly apiToken: string;
constructor(serviceId: string, apiToken: string) {
this.baseUrl = `https://sms.api.sinch.com/xms/v1/${serviceId}`;
this.apiToken = apiToken;
}
async sendSMS(to: string, message: string): Promise<void> {
try {
const response = await axios.post(
`${this.baseUrl}/batches`,
{
from: 'YourBrand', // Registered sender ID
to: [to],
body: message,
encoding: 'AUTO' // Automatically handles Serbian characters
},
{
headers: {
'Authorization': `Bearer ${this.apiToken}`,
'Content-Type': 'application/json'
}
}
);
console.log('Message sent:', response.data.id);
} catch (error) {
console.error('Sinch SMS error:', error);
throw error;
}
}
}
MessageBird
MessageBird provides a feature-rich API with strong support for Serbian message delivery.
import messagebird from 'messagebird';
class MessageBirdService {
private client: any;
constructor(apiKey: string) {
this.client = messagebird(apiKey);
}
sendSMS(to: string, message: string): Promise<void> {
return new Promise((resolve, reject) => {
this.client.messages.create({
originator: 'YourBrand',
recipients: [to],
body: message,
type: 'sms', // Explicitly set message type
encoding: 'auto' // Handles Serbian character sets
}, (err: any, response: any) => {
if (err) {
console.error('MessageBird error:', err);
reject(err);
} else {
console.log('Message sent:', response.id);
resolve();
}
});
});
}
}
API Rate Limits and Throughput
- Default rate limits vary by provider (typically 30-100 messages per second)
- Implement exponential backoff for retry logic
- Use batch APIs for high-volume sending
- Consider queue implementation for large campaigns:
import Queue from 'bull';
// Initialize SMS queue
const smsQueue = new Queue('sms-queue', {
redis: {
host: 'localhost',
port: 6379
}
});
// Add SMS jobs to queue
async function queueSMSMessages(messages: Array<{to: string, body: string}>) {
for (const message of messages) {
await smsQueue.add(message, {
attempts: 3,
backoff: {
type: 'exponential',
delay: 2000
}
});
}
}
// Process queue
smsQueue.process(async (job) => {
const { to, body } = job.data;
await sendSMSToSerbia(to, body, 'YourBrand');
});
Error Handling and Reporting
interface SMSError {
code: string;
message: string;
timestamp: Date;
recipient: string;
}
class SMSErrorHandler {
private errors: SMSError[] = [];
logError(error: SMSError): void {
this.errors.push(error);
// Log to monitoring system
console.error(`SMS Error [${error.code}]: ${error.message}`);
// Handle specific error types
switch(error.code) {
case 'invalid_number':
// Clean up invalid numbers from database
break;
case 'rate_limit':
// Implement backoff strategy
break;
case 'delivery_failed':
// Retry with fallback provider
break;
}
}
}
Recap and Additional Resources
Key Takeaways
-
Compliance Priorities
- Obtain explicit consent
- Include opt-out instructions
- Respect sending hours (9 AM - 8 PM CET)
-
Technical Considerations
- Use registered sender IDs
- Implement proper error handling
- Monitor delivery rates
-
Next Steps
- Review RATEL regulations
- Set up monitoring systems
- Test with small volumes initially
Additional Resources
Contact Information:
- RATEL Support: +381 11 3242 673
- Email: ratel@ratel.rs