Understanding the 24-Hour Rule: WhatsApp Business API's Most Critical Rule
In WhatsApp Business API, the "Session" or "24-Hour Window" concept is the platform's most fundamental and most misunderstood rule. Using WhatsApp API without fully understanding this rule can lead to both financial losses and deteriorated user experience.
What is the 24-Hour Rule?
When a user messages your business (or clicks a button, scans a QR code), a 24-hour countdown begins. During this time, your business can send text, images, audio, video, documents, and location to the user without using templates, freely.
This is called the "Customer Service Window" or "Session Message".
Session Message Characteristics:
β Advantages:
- No template approval needed
- You can send any content you want
- Dynamic and flexible responses
- Low cost (generally free or very low cost)
- Ideal for bot flows
β Restrictions:
- Only valid within 24 hours
- User must message first (you cannot initiate)
- Once time expires, you can no longer send free messages
Example Scenario:
14:00: John sends "Hello" to your business 14:00 - 14:01 (next 24 hours): You can chat freely 14:01 (next day): 24 hours expired, now template message required
What Happens When 24 Hours Expire?
Once the time expires, you can no longer freely write "What's up?", "Can I help you?" or any other message to the user. To restart the conversation, you must send a pre-approved Template Message.
Template Message Characteristics:
- Paid: Country and category-based pricing (generally $0.01 - $0.20)
- Pre-approved: Must be reviewed and approved by Meta
- Categorized: In Marketing, Service, or OTP category
- Can contain variables: For personalization like {{1}}, {{2}}
Cost Comparison:
| Message Type | Cost (Example) | Freedom | Approval Required |
|---|---|---|---|
| Session Message (within 24h) | Free - $0.005 | Completely free | No |
| Template Message - Service | $0.01 - $0.05 | Template only | Yes |
| Template Message - Marketing | $0.05 - $0.20 | Template only | Yes |
Cost Optimization: You can reduce costs by encouraging users to respond within 24 hours.
Session Initiation and Renewal
When Does a Session Start?
- User sends a message: Most common method
- User clicks a button: Quick Reply or Call-to-Action buttons
- User scans QR code: Click-to-WhatsApp ads
- User uses web widget: WhatsApp button on your website
When Does a Session NOT Renew?
β Misconception: "If user messages again within 24 hours, does the time extend?"
Answer: NO! Each new user message starts a new 24-hour window. The old window closes, a new window opens.
Example:
- Monday 10:00: User messages β Window until Tuesday 10:00
- Monday 15:00: User messages again β Window until Tuesday 15:00 (NEW window)
- Tuesday 09:00: You can still message freely (Window open until 15:00)
24-Hour Strategies: Reduce Cost
Strategy 1: Fast Response Culture
If users respond within 24 hours, no template message needed.
Tactics:
- In first message say "You'll get better service if you respond quickly"
- After 23 hours send "Last chance, please respond" message (as session message)
- Ask questions that encourage user to write back
Strategy 2: Smart Timing
Send template messages during users' active hours, so they can respond immediately and start a session.
Ideal Times:
- Morning 09:00-11:00: People starting work
- Lunch 12:00-13:00: Lunch break
- Evening 18:00-21:00: After work
Bad Times:
- Night 23:00-08:00: Sleep hours, low response probability
- Weekend mornings: Late waking
Strategy 3: Maximum Value Within Session
Provide all important information and services within 24 hours.
Things to Do:
- Answer user questions immediately
- Proactively provide additional information
- Ask "Is there anything else you'd like to ask?"
- Send valuable content (catalog, video, guide)
24-Hour Rule in Automation
Considerations in Bot Designs:
Scenario 1: User doesn't respond within 24 hours
User: "Hello" (Monday 10:00)
Bot: "Welcome! How can I help you?" (Monday 10:01)
[User doesn't respond]
Bot (23 hours later): "Do you still need help? We can assist you better if you respond." (Tuesday 09:00)
[User still doesn't respond]
[24 hours expired - Window closed]
Bot: [Must send template message] "Hello {{name}}, you contacted us before. We'd like to help you!" (Tuesday 11:00)
Scenario 2: User responds at 23rd hour
User 1st Message: Monday 10:00
[23 hours pass]
User 2nd Message: Tuesday 09:00
Bot: [NEW 24-hour window started, free until Wednesday 09:00]
Automation Logic (Pseudo-code):
if (last_user_message + 24_hours) > now:
# Session active, send free message
send_free_message(user, message)
else:
# Session ended, template required
send_template_message(user, template_id, parameters)
Special Cases and Exceptions
1. First Contact
Question: "How do we message someone we've never talked to?"
Answer: Only with template message. If the user has never messaged you before, there's no session window.
Flow:
Business β [Template Message] β User
User β [Response] β Business
[24-hour window started]
Business β [Free messages] β User
2. User Blocked You
Situation: If user blocked you, you cannot send either session messages or template messages.
Symptoms:
- Messages in "failed" status
- Error code: 1009 (user blocked)
Solution: Mark user as "blocked" in your database and stop sending messages.
3. Number Change
If user changes their number, the old session becomes invalid.
Cost Optimization: Real Examples
Bad Approach (High Cost):
Scenario: E-commerce store sends "Deal of the day" template message to all customers daily.
- Customer count: 10,000
- Daily template messages: 10,000
- Monthly template messages: 300,000
- Cost (example $0.05/message): $15,000/month
Problem: Most users don't respond, money wasted.
Good Approach (Low Cost):
Scenario: Same store sends messages only to interested users.
- First message (Template): "Would you like to see today's deal?" + [Yes] [No] buttons
- Those who say "Yes": Session starts, freely send catalog and product info
- Those who say "No": Remove from list, don't send again
- Non-responders: Try again after 3 days (different template)
- First template message: 10,000 people Γ $0.05 = $500
- Response rate: 20% = 2,000 people
- Session messages: 2,000 Γ 5 messages Γ $0.001 = $10
- Total cost: $510 (30x cheaper!)
Advanced Tactics
Tactic 1: "Session Rescue" Message
At the 23rd hour, encourage user to respond by sending valuable information.
Example:
[After 23 hours]
"Write 'YES' to receive your exclusive discount code! β°
(If you respond to this message within 1 hour, we can send the code instantly)"
Tactic 2: "Reengagement" Loop
If user doesn't respond for 24 hours:
- Day 1: First template message (product/service focused)
- Day 3: Second template message (different approach, value focused)
- Day 7: Third template message ("Can we help you?")
- Day 30: Last template message ("Still interested?")
- If no response: Remove from list
Tactic 3: Cross-sell Within Session
Within 24 hours, offer additional products that might interest the user.
Example:
User: "What's the price of iPhone 15?"
Bot: "iPhone 15 Pro 256GB: $999
In stock, you can order now!
By the way, have you checked out our iPhone cases? 30% off! π±"
Common Mistakes
Mistake 1: "Sending free message after 24 hours"
β Wrong: Sending "How are you?" message after 24 hours
Result: Message won't send, you'll get error
Solution: Use template message
Mistake 2: "Using template within session"
β Wrong: Sending template message even within 24 hours
Result: Unnecessary cost
Solution: Use free messages within session, save money
Mistake 3: "Not tracking session time"
β Wrong: Messaging user without knowing how many hours since last message
Result: Sometimes failed messages, sometimes unnecessary template usage
Solution: Keep last_user_message_time field in your database and check before each message
Technical Implementation Example
Database Structure:
CREATE TABLE conversations (
user_id INT,
last_user_message_time TIMESTAMP,
session_active BOOLEAN,
last_bot_message_time TIMESTAMP
);
Message Sending Function:
function sendMessage(userId, message) {
const conversation = db.getConversation(userId);
const now = new Date();
const diff = now - conversation.last_user_message_time;
const twentyFourHours = 24 * 60 * 60 * 1000; // milliseconds
if (diff < twentyFourHours) {
// Session active, send free message
sendFreeMessage(userId, message);
console.log("Session message sent (free)");
} else {
// Session ended, template required
sendTemplateMessage(userId, "reengagement_template", [message]);
console.log("Template message sent (paid)");
}
}
Summary: 24-Hour Rule Cheat Sheet
| Situation | Action | Cost | Approval Required |
|---|---|---|---|
| User messaged within 24h | Free message | Low/Free | No |
| 24h passed, restart | Template message | High | Yes |
| First time messaging | Template message | High | Yes |
| User blocked | Don't send! | - | - |
| At 23rd hour | Send "rescue" message | Low/Free | No |
Conclusion
The 24-hour rule, though initially confusing, provides both cost savings and better user experience when properly understood and applied.
Golden Rules:
- Encourage users to respond quickly
- Always track session time
- Send "rescue" message at 23rd hour
- Don't use unnecessary template messages
- Provide maximum value within session
Reminder: WhatsApp API pricing varies by country. Check current prices for your region in Meta Business Manager.