Malaysia SMS Best Practices, Compliance, and Features
Malaysia SMS Market Overview
Locale name: | Malaysia |
---|---|
ISO code: | MY |
Region | Asia |
Mobile country code (MCC) | 502 |
Dialing Code | +60 |
Market Conditions: Malaysia has a mature mobile market with high SMS adoption rates alongside popular OTT messaging apps like WhatsApp and WeChat. The country's major mobile operators include Maxis, Celcom, and Digi, serving a predominantly Android-based user base (approximately 80% Android vs 20% iOS). SMS remains a crucial channel for business communications, particularly for authentication, notifications, and marketing messages.
Key SMS Features and Capabilities in Malaysia
Malaysia offers comprehensive SMS capabilities with support for two-way messaging, message concatenation, and strict regulatory compliance requirements for business messaging.
Two-way SMS Support
Yes, Malaysia fully supports two-way SMS communications. Businesses can engage in bidirectional messaging with customers, though they must comply with local regulations regarding consent and opt-out mechanisms.
Concatenated Messages (Segmented SMS)
Support: Yes, concatenation is supported by most operators, with a notable exception of Digi Malaysia which delivers split messages separately.
Message length rules: Standard 160 characters for single SMS using GSM-7 encoding, or 70 characters for Unicode (UCS-2).
Encoding considerations: GSM-7 is supported for basic Latin characters, while UCS-2 is required for local language support including Bahasa Malaysia characters.
MMS Support
MMS messages are automatically converted to SMS with an embedded URL link. Due to recent regulations effective September 1, 2024, URLs in messages are blocked unless specifically whitelisted, making MMS delivery challenging in the Malaysian market.
Recipient Phone Number Compatibility
Number Portability
Yes, number portability is available in Malaysia.
While it doesn't significantly impact delivery, carriers handle routing automatically through Malaysia's Mobile Number Portability (MNP) system.
Sending SMS to Landlines
No, sending SMS to landline numbers is not possible in Malaysia.
Attempts to send SMS to landline numbers will result in a failed delivery with a 400 response error (code 21614), and no charges will be incurred.
Compliance and Regulatory Guidelines for SMS in Malaysia
The Malaysian Communications and Multimedia Commission (MCMC) oversees SMS communications, enforcing strict regulations to protect consumers. All businesses must comply with the Personal Data Protection Act 2010 (PDPA) when handling customer data and communications.
Consent and Opt-In
Explicit consent is mandatory before sending any marketing or promotional messages. Best practices include:
- Maintaining clear records of when and how consent was obtained
- Using double opt-in processes for marketing lists
- Providing clear terms and conditions during signup
- Specifying the types of messages customers will receive
- Documenting consent timestamp and source
HELP/STOP and Other Commands
- All SMS campaigns must support standard opt-out keywords: STOP, BATAL, HENTI
- HELP/BANTUAN commands must provide information in both English and Bahasa Malaysia
- Responses to these commands should be immediate and free of charge
- Keywords must be case-insensitive and work in both languages
Do Not Call / Do Not Disturb Registries
Malaysia maintains a Do Not Call (DNC) registry under the PDPA. To ensure compliance:
- Check numbers against the DNC registry before sending marketing messages
- Maintain an internal suppression list of opted-out numbers
- Remove numbers from marketing lists within 24 hours of receiving an opt-out request
- Regularly update and clean marketing databases
Time Zone Sensitivity
- Marketing messages are prohibited between 8:00 PM and 8:00 AM Malaysian time
- Transactional and emergency messages can be sent 24/7
- Consider cultural sensitivities during Ramadan and other religious observances
Phone Numbers Options and SMS Sender Types for Malaysia
Alphanumeric Sender ID
Operator network capability: Not supported for direct use
Registration requirements: N/A - Alphanumeric sender IDs are not supported
Sender ID preservation: All sender IDs are overwritten with operator-approved numeric sender IDs
Long Codes
Domestic vs. International:
- Domestic: Supported with 200 messages/day limit
- International: Supported with no daily limits
Sender ID preservation:
- Domestic: Original sender ID preserved
- International: Overwritten with random operator-approved numeric ID
Provisioning time: Immediate to 24 hours
Use cases: P2P messaging for domestic, A2P messaging for international
Short Codes
Support: Available through operator-approved channels
Provisioning time: 4-6 weeks for approval
Use cases: High-volume marketing, 2FA, alerts
Restricted SMS Content, Industries, and Use Cases
Prohibited Content and Industries:
- Gambling and betting
- Adult content
- Political messages
- Religious content
- Controlled substances
- Cannabis products
- Alcohol-related content
- Firearms and weapons
- Money lending/loan services
Content Filtering
Known Carrier Filtering Rules:
- URLs and hyperlinks are blocked
- Phone numbers in message body are blocked
- Requests for personal information are filtered
- Messages without "RM 0.00" prefix are blocked
Tips to Avoid Blocking:
- Always include "RM 0.00" prefix
- Include brand name in message content
- Avoid URL shorteners
- Keep content clear and straightforward
- Use approved templates for sensitive industries
Best Practices for Sending SMS in Malaysia
Messaging Strategy
- Keep messages under 160 characters when possible
- Include clear call-to-actions
- Use personalization tokens thoughtfully
- Maintain consistent brand voice
Sending Frequency and Timing
- Limit marketing messages to 2-4 per month per recipient
- Respect time restrictions (8 AM - 8 PM)
- Consider Malaysian public holidays
- Space out messages to avoid overwhelming recipients
Localization
- Support both Bahasa Malaysia and English
- Use appropriate language based on user preference
- Consider cultural nuances in message content
- Provide customer support in both languages
Opt-Out Management
- Process opt-outs within 24 hours
- Maintain centralized opt-out database
- Confirm opt-out with one final message
- Never send marketing messages to opted-out numbers
Testing and Monitoring
- Test across all major Malaysian carriers
- Monitor delivery rates by carrier
- Track opt-out rates and patterns
- Analyze engagement metrics by message type
- Regular A/B testing of message content
SMS API integrations for Malaysia
Twilio
Twilio provides a robust SMS API with specific support for Malaysian regulations. Integration requires an Account SID and Auth Token from your Twilio console.
import { Twilio } from 'twilio';
// Initialize Twilio client with environment variables
const client = new Twilio(
process.env.TWILIO_ACCOUNT_SID,
process.env.TWILIO_AUTH_TOKEN
);
async function sendSMSToMalaysia() {
try {
// Note: RM 0.00 prefix and brand name are required for Malaysia
const message = await client.messages.create({
body: 'RM 0.00 CompanyName: Your verification code is 123456',
from: process.env.TWILIO_PHONE_NUMBER,
to: '+60123456789' // Malaysian number in E.164 format
});
console.log(`Message sent successfully: ${message.sid}`);
} catch (error) {
console.error('Error sending message:', error);
}
}
Sinch
Sinch offers direct carrier connections in Malaysia with support for local regulations and formatting requirements.
import { SinchClient } from '@sinch/sdk';
const sinch = new SinchClient({
servicePlanId: process.env.SINCH_SERVICE_PLAN_ID,
apiToken: process.env.SINCH_API_TOKEN
});
async function sendSMSViaSinch() {
try {
const response = await sinch.messages.send({
from: process.env.SINCH_SENDER_ID,
to: ['+60123456789'],
// Include required RM 0.00 prefix and brand name
body: 'RM 0.00 CompanyName: Welcome to our service!',
delivery_report: 'summary'
});
console.log('Message batch ID:', response.id);
} catch (error) {
console.error('Sinch API error:', error);
}
}
MessageBird
MessageBird provides enterprise-grade SMS capabilities with Malaysian carrier connections.
import { MessageBird } from 'messagebird';
const messagebird = MessageBird(process.env.MESSAGEBIRD_API_KEY);
interface SMSResponse {
id: string;
status: string;
recipients: {
totalCount: number;
totalSentCount: number;
};
}
async function sendSMSViaMessageBird(): Promise<SMSResponse> {
return new Promise((resolve, reject) => {
messagebird.messages.create({
originator: 'CompanyName',
recipients: ['+60123456789'],
body: 'RM 0.00 CompanyName: Your account has been activated',
}, (err, response) => {
if (err) {
reject(err);
return;
}
resolve(response);
});
});
}
Plivo
Plivo offers reliable SMS delivery to Malaysia with support for local compliance requirements.
import { Client } from 'plivo';
const client = new Client(
process.env.PLIVO_AUTH_ID,
process.env.PLIVO_AUTH_TOKEN
);
async function sendSMSViaPlivo() {
try {
const response = await client.messages.create({
src: process.env.PLIVO_SENDER_ID, // Will be overwritten with local shortcode
dst: '+60123456789',
text: 'RM 0.00 CompanyName: Thank you for your purchase!',
// Optional parameters for delivery tracking
url: 'https://your-callback-url.com/status',
method: 'POST'
});
console.log('Message UUID:', response.messageUuid);
} catch (error) {
console.error('Plivo API error:', error);
}
}
API Rate Limits and Throughput
- Domestic long codes: 200 messages per day per number
- Short codes: Up to 100 messages per second
- International routes: Varies by provider
Strategies for Large-Scale Sending:
- Implement queue systems (Redis/RabbitMQ)
- Use batch APIs when available
- Monitor throughput and adjust sending rates
- Implement exponential backoff for retries
Error Handling and Reporting
- Log all API responses and delivery receipts
- Monitor common error codes:
- 21614: Invalid landline number
- 30007: Blocked content detected
- 30008: Message outside allowed hours
- Implement webhook handlers for delivery status updates
- Set up automated alerts for unusual error rates
Recap and Additional Resources
Key Takeaways
-
Compliance Priorities:
- Include "RM 0.00" prefix
- Respect time restrictions (8 AM - 8 PM)
- No URLs or phone numbers in content
- Maintain proper opt-out mechanisms
-
Technical Requirements:
- Use E.164 number formatting
- Implement proper error handling
- Monitor delivery rates
- Support both English and Bahasa Malaysia
Next Steps
- Review MCMC guidelines for SMS messaging
- Consult legal counsel for compliance review
- Set up test accounts with preferred SMS providers
- Implement proper consent management systems