Every send carries a dedup_key and a statusCallback. Status advances queued → sent → delivered / failed as Twilio reports back; a re-POSTed callback is a no-op.
| # | time | to | scenario | status | message SID | dedup key | body |
|---|---|---|---|---|---|---|---|
| loading… | |||||||
Replies are classified (confirm / reschedule / STOP / help) and auto-answered; anything unknown escalates to a human.
| time | from | message | intent | auto-reply |
|---|
STOP / UNSUBSCRIBE lands here. Our sender checks it before every message — opted-out numbers are never texted.
UNIQUE(dedup_key) gates every send. A webhook retry or double-submit inserts nothing and sends no second SMS.
statusCallback per message: queued → sent → delivered / failed, each transition logged. You know what actually landed.
STOP/UNSUBSCRIBE opts the number out; the sender refuses to text it again. START re-subscribes.
Failed/undelivered messages are re-sent on demand — same message row, attempt count tracked, still dedup-safe.