Kyle Seyler
December 03, 2025

TL;DR: Twilio now supports typing indicators for WhatsApp. When your backend takes a few seconds to generate a response, you can show users that something's happening instead of leaving them staring at a silent chat.
This guide covers what's new, how to implement it, and when you should (and shouldn't) use it.
As of October 2025, Twilio's WhatsApp API includes a new endpoint for triggering typing indicators. When you call it, two things happen:
The indicator disappears when you send your actual response or after 25 seconds, whichever comes first.
This is currently in Public Beta, which means a few things: the API could change before GA, it's not covered by Twilio's SLA, and it's not HIPAA-eligible or PCI-compliant. Don't use it in healthcare or payment workflows.
Users hate silence. When someone sends a message to your support bot or order lookup system, every second of no response feels like something broke. Research consistently shows that perceived wait times drop significantly when users see visual feedback that something's happening.
Typing indicators solve this by mimicking human conversation patterns. Your AI chatbot might need 3-4 seconds to process a query, call an external API, and format a response. Without a typing indicator, that gap feels like an eternity. With one, it feels like talking to someone who's thinking.
This is especially valuable for:
AI chatbots and LLM-powered responses where inference time creates noticeable delays. GPT-style responses don't generate instantly, and users need to know you haven't dropped the connection.
Order status lookups that query external systems. Database calls, inventory checks, shipping API requests, all of these take time.
Customer support workflows where context retrieval or human handoff decisions happen server-side.
Multi-step automations where you're coordinating between services before responding.
The API is straightforward. You POST to Twilio's typing indicator endpoint with the message ID you're responding to:
Copied!
curl -X POST https://messaging.twilio.com/v2/Indicators/Typing.json \-u $TWILIO_ACCOUNT_SID:$TWILIO_AUTH_TOKEN \--data-urlencode "messageId=SMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \--data-urlencode "channel=whatsapp"
Two required parameters:
| Parameter | Description |
|---|---|
messageId | The SID of the message you're responding to. Must be a valid Twilio Message SID (starting with SM) or Media SID (starting with MM). |
channel | Must be whatsapp. |
Success returns:
Copied!
{"success": true}
That's it. No complex setup, no additional webhooks to configure.
Here's a practical pattern for a webhook that handles incoming WhatsApp messages and uses typing indicators for slower responses:
Copied!
const express = require('express');const axios = require('axios');const app = express();app.use(express.urlencoded({ extended: true }));const accountSid = process.env.TWILIO_ACCOUNT_SID;const authToken = process.env.TWILIO_AUTH_TOKEN;async function sendTypingIndicator(messageSid) {try {await axios.post('https://messaging.twilio.com/v2/Indicators/Typing.json',new URLSearchParams({messageId: messageSid,channel: 'whatsapp'}),{auth: {username: accountSid,password: authToken}});} catch (error) {console.error('Failed to send typing indicator:', error.message);}}app.post('/webhook/whatsapp', async (req, res) => {const incomingMessage = req.body.Body;const messageSid = req.body.MessageSid;const from = req.body.From;// Trigger typing indicator immediatelyawait sendTypingIndicator(messageSid);// Do your slow processing here (LLM call, database lookup, etc.)const response = await generateResponse(incomingMessage);// Send the actual replyawait sendWhatsAppMessage(from, response);res.status(200).send();});
Same pattern in Python using the requests library:
Copied!
import osimport requestsfrom flask import Flask, requestapp = Flask(__name__)account_sid = os.environ['TWILIO_ACCOUNT_SID']auth_token = os.environ['TWILIO_AUTH_TOKEN']def send_typing_indicator(message_sid):try:response = requests.post('https://messaging.twilio.com/v2/Indicators/Typing.json',data={'messageId': message_sid,'channel': 'whatsapp'},auth=(account_sid, auth_token))response.raise_for_status()except requests.RequestException as e:print(f'Failed to send typing indicator: {e}')@app.route('/webhook/whatsapp', methods=['POST'])def handle_whatsapp():incoming_message = request.form.get('Body')message_sid = request.form.get('MessageSid')from_number = request.form.get('From')# Trigger typing indicator immediatelysend_typing_indicator(message_sid)# Do your slow processing hereresponse_text = generate_response(incoming_message)# Send the actual replysend_whatsapp_message(from_number, response_text)return '', 200
Use them when:
Don't use them when:
The 25-second timeout is a hard limit. If your processing takes longer, the indicator vanishes and you're back to silence. For operations that might exceed this, consider sending a preliminary acknowledgment message before diving into the heavy processing.
A few things to keep in mind during Public Beta:
No SLA coverage. If the feature breaks, Twilio support won't prioritize it. Build graceful degradation into your error handling.
Not HIPAA/PCI compliant. If you're in healthcare or handling payment data, skip this feature until GA (and verify compliance then).
API may change. The endpoint, parameters, or behavior could shift before general availability. Keep an eye on Twilio's changelog.
Test thoroughly. Beta features can behave inconsistently. Validate in your staging environment before production.
Typing indicators are part of a broader trend: business messaging is getting more conversational. The WhatsApp Business Platform has been steadily adding features that make automated interactions feel more human, including read receipts, reactions, and now typing indicators.
Meta's Conversations 2025 conference in Miami this past July signaled where things are heading. They announced voice and video calling on the WhatsApp Business Platform (now generally available), letting customers tap a button to call directly from a chat and businesses call customers who've opted in. Business AIs are rolling out to more markets, and Status ads are coming to Ads Manager.
Looking ahead to 2026, expect AI-enabled voice support to move from experimental to production-ready. Meta has been clear that they're building toward AI agents that can handle voice interactions, not just text. For developers, this means planning for richer, multi-modal conversations where typing indicators are just one piece of a larger conversational toolkit.
For developers working directly with Meta's API rather than through Twilio, the WhatsApp Cloud API also supports typing indicators with similar functionality.
If you're building WhatsApp notifications through Courier, you can layer typing indicators into your existing workflows. Courier handles the orchestration and routing logic while Twilio provides the WhatsApp delivery, and adding a typing indicator trigger before slow message sequences becomes a simple addition to your automation flow.
This is especially useful for complex workflows where messages might depend on data from multiple sources, AI-generated content, or conditional routing. Rather than managing typing indicator timing manually across every integration point, you can coordinate it through Courier's automation engine alongside your existing notification logic.
The pattern is straightforward: when Courier receives a trigger that will result in a WhatsApp message with processing delay, fire the typing indicator call before kicking off the content generation. Your users see the typing animation while the real work happens in the background.
For teams already using Courier with Twilio for multi-channel notification orchestration, this fits naturally into your existing architecture without adding another integration to maintain.
WhatsApp typing indicators are available now in Twilio's Public Beta. Check Twilio's documentation for the latest API details.

What Is Alert Fatigue?
Alert fatigue occurs when users become desensitized to notifications due to high volume, leading to ignored alerts, missed critical information, and decreased engagement. This problem affects product notifications, DevOps monitoring, healthcare systems, and security operations. This guide covers the psychology behind alert fatigue (habituation and the "cry wolf" effect), how to measure it (open rates, dismiss rates, time-to-action), and five practical strategies to reduce it: batching, prioritization, user preferences, smart channel routing, and timing optimization.
By Kyle Seyler
January 23, 2026

Build Multi-tenant Customer Messaging the Right Way | Branding, User Preferences, Routing
Most teams don’t plan multi-tenant messaging... they back into it when customers want their branding, routing, Slack workspace, and default preferences. This guide shows how to model tenant context so every message uses the right customer defaults without per-customer logic in your codebase.
By Thomas Schiavone
January 22, 2026

Notification Observability: How to Monitor Delivery, Engagement, and Provider Health
Notification observability is the practice of monitoring notification delivery, engagement, and provider health using the same tools and discipline you apply to the rest of your application infrastructure. It means tracking whether messages are delivered, opened, and acted on across email, SMS, push, and in-app channels, then surfacing that data in dashboards alongside your other application metrics. Key metrics include delivery rate by channel, bounce and failure rates, provider latency, open rate trends, and click-through rates by template. Teams can build notification observability through DIY webhook handlers that pipe provider events to Datadog or Prometheus, log aggregation from application send logs, or notification platforms with built-in observability integrations. This matters most for multi-channel systems, business-critical notifications like password resets and payment confirmations, and teams using multiple providers with fallback routing.
By Kyle Seyler
January 15, 2026
© 2026 Courier. All rights reserved.