Prevent Duplicate Actions in Business Automations
Specify the action. Reconcile the outcome. Test the replay.
By AI-Q Dynamics · Published
A retry should finish an unfinished task, not silently repeat a task that already worked. Before you allow an automation to retry a record creation, notification, or booking, write down how your team will recognize the intended action and prove its outcome. This guide gives you a decision record and a replay test matrix to take to your implementer. It is about one bounded effect at a time, not redesigning an entire lead pipeline.
AI-Q Dynamics advertises integrations connecting chatbots and automations with email, SMS, calendars, CRMs, forms, and help desks.[10] The controls below are recommendations for reviewing your own workflow, not a description of AI-Q's internal systems. Stripe appears only as a documented example; it is not a claim about an AI-Q provider or a required purchase.
Why one request can cause two actions
Hypothetical example: a form sends a service request to an automation. The automation creates a CRM task, but the sender does not receive confirmation. The same notification arrives again, and an unchecked second run creates another task. Both tasks refer to one request. Now imagine the returning customer submits a different request the following week. That second request should not disappear just because the customer's name matches.
Separate the delivery from the business action. A delivery is a notification arriving at your workflow. An action is the specific change you intend to make at a destination. Repeated deliveries and repeated actions are different questions. Stripe explicitly documents that webhook endpoints can receive the same event more than once and that event delivery order is not guaranteed.[1] Use that example to ask about your actual sender's behavior rather than assuming every platform has identical retry rules.
Define what counts as the same action
Ask the business owner to describe a duplicate in ordinary language before asking a developer to choose identifiers. “One confirmation for this approved appointment version” is more precise than “one message per customer.” Then identify the records that make that rule testable. Keep personal details out of example keys and shared test evidence.
| Identity | What to record | Boundary to preserve |
|---|---|---|
| Transport event ID | The sender's event identifier, such as hypothetical event-demo-01. | Recognize another delivery of that event; do not treat it as the identity of every future customer request. |
| Business record ID | The source request or appointment identifier, such as request-demo-01. | Keep separate requests distinct, even when a person or business name matches. |
| Intended effect ID | The named action, destination, and relevant approved version. | Distinguish creating a task from sending a confirmation for the same request. |
| Legitimate repeat | The new request, approved revision, or separately authorized action. | Document why it deserves a new action rather than bypassing the duplicate rule informally. |
Do not merge people because names match. Ask how separate accounts, destinations, and workflow environments are kept apart when constructing identifiers. Also decide what happens when a source identifier is missing or changes unexpectedly. Prefer an explicit review state to guessing a match from a name, a rounded timestamp, or a partial address.
Separate incoming duplicates from outgoing retries
Incoming duplicate detection asks, “Have we already accepted or handled this notification?” Outgoing retry control asks, “Will repeating this destination request create another effect?” Require separate answers. A receipt in the incoming event log should not be accepted as proof that every downstream action completed.
Idempotency describes repeat behavior in which repeating the same intended operation does not add another effect under the system's defined rules. For a concrete, provider-specific example, Stripe's idempotent-request documentation says subsequent requests with the same key return the saved result, including 500 errors.[2] That API behavior is not a mechanism for stopping duplicate webhook deliveries. Do not transfer its key lifetime, error behavior, or request rules to another API.
Ask your implementer which destination operations support a documented idempotency mechanism and how a retry preserves the same intended operation. If no suitable mechanism exists, ask what state lookup and review path will be used instead. Do not label a workflow “exactly once” based on a checkbox or a successful demonstration. Require evidence for the specific failure paths you expect to encounter.
Handle concurrency, late events and unknown outcomes
Ask for atomic duplicate handling: the decision to claim an action must remain safe when two workers attempt it together. A separate “look for an existing record, then create one” sequence can race if both workers check before either creates. Have the implementer demonstrate how the actual destination or coordination mechanism prevents both workers from becoming the owner of the same effect. Do not prescribe a database or architecture before reviewing the existing stack.
- Concurrent work: ask who owns the action, what another worker observes, and how a stalled owner is investigated before work resumes.
- Late updates: define how an old event is compared with the current business state. Do not use arrival order alone as permission to overwrite a newer approved change.
- Unknown outcome: after a timeout, look up the destination record or delivery evidence before replaying a consequential action. Record “unknown” rather than converting uncertainty into “failed.”
- Partial success: record separate outcomes for the CRM change, message, and booking. If the message succeeded and the booking failed, do not automatically repeat both.
- Retention and replay: agree how long evidence remains available, which documented retry windows apply, who approves manual replay, and what happens after evidence expires.
Keep validation, authorization, signature checks where applicable, and monitoring in the review. Deduplication is not a substitute for any of them. Do not treat a valid webhook signature alone as proof that a business action has not already occurred. Define a stop condition for missing evidence rather than letting a retry loop make the decision.
Test the failure paths before allowing retries
Run these scenarios in an approved test environment with non-personal fixtures and destinations that cannot send to real customers. Before each test, record the starting destination state and expected action count. Afterward, inspect the destination as well as the automation log. A green run indicator is not sufficient evidence when the question is whether an extra record or message exists.
| Scenario | Expected result to agree | Evidence to retain |
|---|---|---|
| Repeated delivery | Deliver the same event again after completion; no additional intended effect is created. | Event ID, both receipt records, original destination ID, and destination count before and after. |
| Two simultaneous workers | Start both with the same action identity; only one completes the effect and the other records a controlled outcome. | Worker traces, action-claim result, and destination records proving no second effect. |
| Timeout after success | Hide the success response; the workflow reconciles the existing result rather than blindly creating another. | Destination success record, timeout observation, lookup evidence, and replay decision. |
| Out-of-order update | Deliver an older update after a newer approved state; stale information does not overwrite that state. | Both source versions, arrival order, comparison decision, and final destination values. |
| Partial success | Complete one effect and fail another; recovery targets only the unresolved effect under its own rule. | Separate message, CRM, and booking outcomes, plus the scoped recovery request. |
| Legitimate second request | Use the same hypothetical customer with a new request ID; the valid new action is allowed. | Distinct request and action IDs, approved expected results, and both destination records. |
When a test fails, record the discrepancy instead of adjusting the expected outcome to fit it. Retest after the correction and keep the earlier failure linked to the final evidence. Include a reviewer who understands the business effect: two rows in a log may represent two attempts, while two appointments at the destination may represent an actual customer-impacting duplicate.
Copyable duplicate-action control record
Copy these fields into your own change record. Replace the hypothetical identifiers with approved references, not customer names or confidential payloads. Leave unanswered fields visibly unresolved so the reviewer can distinguish missing design decisions from completed controls.
- Workflow and owner
- Workflow name; business owner; implementer; environment; review date.
- Source and business identity
- Sender; event ID: event-demo-01; request ID: request-demo-01; approved version reference.
- Intended action and destination
- Exact effect; destination system; action identity; definition of a legitimate repeat.
- Duplicate and concurrency rule
- Atomic claim or destination control to verify; simultaneous-worker behavior; missing-ID handling.
- State check and outcomes
- Lookup method; destination result ID; pending, succeeded, failed, or unknown status for each effect.
- Replay authorization
- Permitted automatic retries; documented retention basis; manual replay approver; escalation trigger.
- Test result and evidence
- Scenario; expected result; observed result; evidence location; reviewer; unresolved issue; approval decision.
When to stop and get help
If retries are uncontrolled, customers receive repeated messages, or records cannot be reconciled confidently, stop treating the problem as an ordinary retry setting. Use your approved escalation path and refer to the AI automation incident response plan for broader response planning. Do not attempt bulk deletion or cancellation simply to make counts match.
Bring the completed control record, a sanitized failed-test example, and the actual provider documentation to a discussion about Business integrations. Keep the request bounded: which effect needs protection, what result is uncertain, and who can approve the next action? For other planning topics, use More implementation guides.
Sources
Documentation and first-party service information retrieved September 13, 2026. Numbers match the citations in this guide.
Bring your decision record and evidence questions. Use the contact page to describe the scope you want to discuss; do not include credentials or confidential customer records.