A reply should move the lead into a human-owned state and cancel every queued step for that sequence immediately. The minimum implementation is one lead-level reply state, a cancellation transaction that runs before any scheduled send, an idempotent send check, and a notification that contains the product, campaign, lead, and thread.
Most outbound systems are built around a sequence. A lead enters, steps are scheduled, and a worker sends them. Replies are treated as an inbox feature — separate from the sequence state. That separation is where the mistake begins.
Four ways a follow-up escapes after a reply
1. Two sources of truth
The sequence worker checks “is this lead active?” while the inbox writes “this lead replied” somewhere else. If the worker does not read the reply state, the scheduled step still looks valid.
2. The race at send time
A reply arrives at 10:00:03. A worker has already selected the lead at 10:00:02 and is waiting on the email provider. Without a final check and idempotency, the send completes after the reply.
3. The reply is on a different thread
The lead replies from a second address or changes the subject. Matching only on the exact subject or the original thread can miss a real reply.
4. The auto-reply problem
An out-of-office message is technically a reply. Treating it as interest stops the sequence but can also create a false sales signal. Classify it, pause for the return date, and do not count it as a positive reply.
A state model that makes the mistake difficult
- One lead state. Store
reply_state,reply_state_updated_at, and the last reply id on the lead. The sequence worker reads this row before every send. - Cancel before schedule. When a reply is recorded, run a cancellation update for all queued steps for that lead in the same transaction. Do not wait for a background cleanup.
- Re-check at send time. The worker selects a step, re-reads the lead state, and refuses if the state is replied, suppressed, or stopped.
- Idempotency. Use a unique send key or approval state so a retry cannot produce a second email after a reply.
- Human routing. Create a notification and a Reply Rescue thread with product, campaign, lead, subject, and the recommended next step.
- No automatic reply. AI can draft a response, but a human sends it. Automation stops; judgment starts.
If a reply and a follow-up can both be true at the same time, the system has no reply state. It only has an inbox.
A 10-minute audit
| Check | Pass condition |
|---|---|
| Reply state | A lead has one current state, not one per inbox view |
| Queued steps | All future steps are cancelled when a reply is recorded |
| Send check | The worker re-reads state immediately before sending |
| Retry | A retry cannot send a second copy after a reply |
| Notice | The owner gets a message with enough context to act |
| OOO | Out-of-office pauses the sequence; it is not counted as interest |
Run the audit on one real campaign, not a demo. Pick a lead, send a test reply, and watch the queue. If the next step remains scheduled, the state model is incomplete.
FAQ
Should a reply stop every follow-up?
Yes, for that lead and that sequence. A reply is a stronger signal than a scheduled follow-up. Stop queued steps immediately, keep the thread, and route it to a human. Do not restart the sequence automatically.
What if the reply is an out-of-office message?
Classify it separately. Pause the sequence for the return window instead of treating it as interest, and do not send another follow-up while the person is away.
Does a reply in one product stop other products?
Not automatically. A reply belongs to a lead and a product context. PortKnot stops the matching sequence, then shows the lead's other active products so a human can decide whether a cross-product pause is appropriate.
Make a reply stop the sequence.
PortKnot keeps every product's sequence, approval, and reply in one workspace. Reply Rescue is included from Starter.
Start the 7-day trial →