Why Delivery Outcomes Matter
When you send messages at scale, not every attempt will succeed:- Some addresses are invalid or no longer in use.
- Some recipients don’t support iMessage.
- Some channels are temporarily unavailable.
- Every message ends up in a clear, stable outcome state.
- You can safely build automations that respond to those states.
- You do not need to understand the underlying retry or routing logic.
Message Statuses You Can Build On
Across the app, APIs, and webhooks, you’ll see a small set of message statuses:-
queued
- The message is planned, but not yet eligible to send.
- Common reasons:
- Waiting for allowed hours or days.
- Waiting for free capacity on a line.
- Waiting for a delay between campaign steps.
- Use this to monitor future workload and expected sends.
-
pending / sending
- The message is in the process of being sent.
- Use this to distinguish “actively in flight” from “just planned”.
-
sent
- Tuco successfully handed the message to the downstream channel (e.g. iMessage, SMS, email) according to that channel’s contract.
- Use this to:
- Trigger internal workflows (“message was sent”).
- Update activity feeds or timelines.
-
delivered (where supported)
- Tuco received a confirmation that the message reached the recipient’s device or mailbox.
- Not all channels support this; when they do, Tuco surfaces it clearly.
- Use this to:
- Measure true delivery rates.
- Trigger time‑based follow‑ups (“sent and delivered, now wait X days”).
-
failed
- Tuco determined that this message cannot be sent.
- Typical reasons include:
- Permanently invalid address.
- Hard rejection from the underlying channel.
- Configuration that makes the send impossible.
- Failed messages are not silently retried.
- Use this to:
- Flag data for cleanup.
- Alert operators for high failure rates on a campaign or line.
-
fallback
- The primary channel you wanted to use isn’t available for this recipient (for example, no iMessage‑capable address), or sending on that path is not safe.
- Tuco:
- Marks the message as
fallback. - Emits a clear event (see
/api-reference/message-webhooks).
- Marks the message as
- Use this to:
- Switch to SMS or email, if appropriate.
- Tag leads as “not reachable on iMessage”.
What Tuco Does vs What You Decide
Tuco handles:- Running availability checks behind the scenes.
- Respecting your time windows, day‑of‑week rules, and line limits.
- Deciding when to treat an error as final vs something that can be retried internally.
- Business decisions when you see
failedorfallback:- Whether to try another channel.
- Whether to mark a lead as needing attention.
- Whether to treat repeated failures as a sign to stop contacting a segment.
- Data hygiene:
- Cleaning invalid numbers or emails.
- Updating lead records after repeated failures.
- Customer experience:
- Avoiding aggressive retries in your own systems.
- Respecting consent and preferences when switching channels.
Typical Failure & Fallback Scenarios
1. Invalid or Out‑of‑Date Contact Info
What happens:- You send to a phone or email that is no longer valid.
- The underlying channel rejects the message.
- Tuco marks the message as failed and surfaces a clear reason in the UI and/or API.
- Suppress or clean the offending address in your own systems.
- Consider updating your import or validation flows to catch these earlier.
- Watch for patterns (e.g. a particular list or source producing many invalid contacts).
2. Recipient Does Not Support iMessage
What happens:- Tuco determines that none of the stored addresses for a lead support iMessage.
- The iMessage path is not used.
- The message is marked as fallback, and a webhook event is emitted if configured.
- Route follow‑up via your preferred alternative:
- SMS for time‑sensitive notifications.
- Email for longer‑form communication.
- Tag the lead in your CRM as “no iMessage” so future campaigns choose appropriate channels.
- Use
/features/check-availabilityto periodically refresh availability and keep this accurate.
3. Limits, Time Windows, and Gaps
What happens:- A message cannot be sent right now because:
- Daily limits on a line have been reached.
- You’re outside allowed hours or days.
- Your pacing rules between contacts on a line are still in effect.
- Tuco leaves the message as queued and checks again later.
- Treat Queued as “not attempted yet”, not as a failure.
- If many messages stay queued for long periods:
- Add capacity by configuring more lines.
- Relax your timing windows, if consistent with your brand and compliance.
- Re‑evaluate how many campaigns you run in parallel on the same lines.
4. Sustained Problems on a Channel or Line
What happens:- A line or channel experiences longer‑lasting issues.
- Tuco protects recipients and your account by:
- Reducing or pausing sends on that path.
- Exposing more failed, queued, or fallback outcomes instead of forcing traffic through.
- Use campaign and line‑level stats to:
- Spot unusually high failed or fallback rates.
- Identify which lines or campaigns are affected.
- Temporarily:
- Shift traffic to healthier channels or lines.
- Pause specific campaigns while you investigate.
Using Outcomes in Your Own Systems
You can consume delivery outcomes through:- The Tuco UI (for operational teams).
- The API responses and list endpoints.
- Message webhooks (see
/api-reference/message-webhooks) for real‑time integration.
-
CRM updates
- Mark a contact as “Reached”, “Bounced”, or “Fallback to SMS” based on final status.
- Record last successful contact date vs last attempt date.
-
Automated follow‑ups
- Start a different sequence when a message fails.
- Trigger a task for a human when a VIP contact hits repeated failures.
-
Health dashboards
- Track ratios of
sent/delivered/failed/fallbackper campaign, line, or segment. - Alert internally when failures or fallbacks cross a threshold.
- Track ratios of
Best Practices
-
Focus on trends, not one‑offs
- Individual failures are normal.
- Spikes in
failedorfallbackrates are what deserve attention.
-
Use fallbacks thoughtfully
- Treat
fallbackas a chance to choose the channel that best fits the moment. - Avoid automatically “spamming in every channel” after a single fallback event.
- Treat
-
Keep data clean
- Clean or suppress addresses that repeatedly fail.
- Feed learnings back into your imports and validation rules.
-
Respect consent
- Before reacting to a failure or fallback with another channel, ensure your consent and opt‑out rules allow it.
- See
/features/compliance-and-optoutsfor patterns.