Delivery, replies and opt-out
Delivery and retries
A message moves through these statuses:
| Status | Meaning |
|---|---|
queued | Handed to Twilio |
sent | Twilio handed it to the carrier or WhatsApp |
delivered | Reached the phone |
read | Read (WhatsApp); may arrive later and update the read time |
The first final status of a message decides what happens to the lead:
| Final status | Lead |
|---|---|
delivered, read | done |
expired: no receipt 48 h after sending | done (treated as sent) |
failed, undelivered | Retried after messageRetry.delayMin (60 min) inside the sending window; after messageRetry.max failures (1 retry by default) the lead is excluded |
| Unreachable, or not on WhatsApp | excluded, reason invalid_number |
canceled | ready, attempt not counted |
The campaign's live view shows the funnel (queued, sent, delivered, read, replied, plus failed and opted out) for a chosen time window and for all time, the number of batches still tracked, and the time of the last batch. The leads table shows each lead's latest message status.
A reply becomes a Flex chat
Replies reach Flex through the sender's normal inbound routing, not through the dialer:
- SMS numbers need a Conversations address configuration (type
sms, autocreate, pointing at a Studio flow with "Send to Flex"). - WhatsApp senders need the same address configuration (type
whatsapp). - The WhatsApp sandbox cannot have an address configuration, because its number is shared by all accounts. Its "When a message comes in" webhook has to go to a bridge function that creates the conversation and attaches the same Studio flow.
The agent sees a campaign badge on the chat: which campaign the customer received, what it said and when (the latest campaign message to that address in the last 30 days).
For the customer to be able to reply, the sender must be local to the recipient's country. In testing, a US number sending to a European mobile was rewritten by the carrier to an alphanumeric sender, which cannot be replied to.
Opt-out
The Bulk API does not handle opt-outs; the dialer does. When a reply consists of a keyword alone (case, punctuation, emoji and Hebrew vowel points are ignored), the number goes to the global "SMS opt-out" or "WhatsApp opt-out" list (created on first use) and the lead is excluded. An SMS opt-out stops SMS from every campaign, but not calls.
Default keywords: STOP, UNSUBSCRIBE, הסר, הסרה, ביטול (the last three are the Hebrew "remove", "removal" and "cancel"). Each campaign can set its own list (optOutKeywords).
Twilio's own carrier-level STOP handling on long codes may additionally block the number.