Skip to main content

SMS task recipes: batch, webhook, or dashboard

The messaging guides are step-by-step — this page is the index that says which steps to take, in which order, depending on what you are actually trying to do. It deliberately does not restate campaign end-to-end; use this page to pick a task path, then follow its links.

Decide: batch vs webhook vs dashboard

Pick batch when the recipient list is finite and there is no campaign machinery to maintain. Pick webhook-consumer when your product (not a person) needs to consume DLRs and replies. Pick campaign when marketing will iterate on the send. The rest of this page chains the supporting guides for each intent.

Batch path — review and send

  1. Open the Messages → Batch SMS wizard or call POST /messages/batch directly.
  2. Work through the review-and-send loop: upload or paste E.164 recipients, then check the rendered segment count and per-country cost before confirming.
Follow Batch SMS for the full wizard flow and the API contract, including scheduled vs immediate sends.

Webhook-consumer path — wire receipts and replies before launch

  1. Register a webhook endpoint and verify HMAC signatures in Node.js or Python: dedupe events, ack fast, survive retries and dead letters, rotate secrets. Build a durable webhook consumer has the full contract.
  2. Choose the event stream you need: delivery receipts (DLRs) update your message bookkeeping; inbound replies drive two-way flows.
  3. Before you send production traffic, walk Send gates: pre-flight checklist — wallet posture, opt-out/sync health, quiet hours, frequency caps, and the TCPA voice window — so the first batch is not admitted and blocked in the same afternoon.

Data hygiene — clean the list before any of the three paths

These four guides are path-independent; run them before sending and revisit them after every import:
  • Import and migrate contacts — pick the right import surface (CSV wizard, async jobs, CDP ingest, or platform connectors), dry-run, map consent, dedupe.
  • Opt-out lists — honor STOP keywords and maintain opt-out entries at the right scope.
  • Message suppression — keep a tenant-owned suppression list so blocked numbers are filtered at send time.
  • DNC pre-flight scrub — scrub recipient lists against do-not-contact entries before launch.

Local compliance — sender identity per destination country

After the first send — monitor and inspect

  • Delivery log — search every delivery by message ID, provider reference, recipient, or sender and work a result row to its answer.
  • Insights: deliverability — read the consolidated dashboard across channels to spot degradation before it lands in complaint tickets.
  • Smart route preview — call POST /messages/route-preview to see which channel the router picks, why, and what it costs when the selected channel underperforms or the destination is better served by WhatsApp or RCS.

Troubleshooting — the common misreads

  • “Delivered batch shows zero events.” Webhooks are path-dependent: the batch wizard and POST /messages/batch send but do not register an endpoint for you. Register the endpoint (Build a durable webhook consumer) and confirm it acks within its timeout before re-sending test traffic.
  • “Blocked at a gate” reads as “provider rejected.” A gate is a tenant-owned admission check (wallet, quiet hours, suppression, frequency cap). The pre-flight checklist shows the admission order; count blocked rows after launch in the same checklist guide.
  • “Deliverability dashboard is clean but recipients say nothing arrived.” DLRs are per-recipient; check the Delivery log for the specific recipient’s status rather than the aggregate window.
  • “The legislation oddly prohibits alphanumeric senders.” That is the destination, not a platform bug — confirm from the Sender ID country matrix and pick a compliant sender type per country.
  • “US recipients flagged as blocked despite clean registration.” Check brand/campaign review status in 10DLC rejections and re-vet, not the aggregate dashboards.
Use messaging services console when compliance or routing needs a dedicated sender pool per region or use case.