Recall (abandoned cart)
Configurable intervals for abandoned-cart recovery emails. Coupon binding per interval.
Recall sends recovery emails to customers who started checkout but did not complete payment. autonnel checks PENDING orders on a schedule and sends the appropriate recall email at each configured interval.
Prerequisites
An email provider must be configured in Settings → Email Provider before recall emails can be sent. The Resend free tier (100 emails/day) is generally too restrictive for recall at any meaningful volume — use a paid tier or a different provider.
Navigate to the setting
Go to Settings → Recall. There is one recall configuration per installation.
Default intervals
| Interval | Template | Default offset |
|---|---|---|
| Recall 1 | RECALL_1 | 24 hours after order creation |
| Recall 2 | RECALL_2 | 72 hours after order creation |
| Recall 3 | RECALL_3 | 168 hours (1 week) after order creation |
You can change the hour offsets for each interval. Each interval must map to a distinct template type (RECALL_1, RECALL_2, or RECALL_3).
Binding a coupon
Each interval can optionally include a discount coupon. When a coupon is bound to an interval:
- The coupon code is injected into the recall email template as a highlighted block.
- The recall link includes
?coupon=CODEin the query string so it is applied automatically when the customer returns.
To bind a coupon, select one from the dropdown next to each interval. Only active coupons appear in the dropdown. If you deactivate a coupon that is bound to an interval, the interval continues to fire but the email is sent without the coupon code.
How the cron works
A cron job runs every 30 minutes. For each interval, it:
- Queries for pending orders whose creation time falls within the interval’s time window (offset ± a 72-hour lookback buffer to catch orders missed during downtime).
- Excludes orders with a placeholder email or no email.
- Checks whether a recall email for the same order and interval was already sent. If one exists, the order is skipped (dedup).
- Builds the recall checkout URL, preserving all original URL parameters from the order. This keeps attribution intact —
fbclid,ttclid,gclid, UTM parameters, and others are passed through to the recovery link. - Enqueues the recall email with the
isRecallmarker set.
The processor caps each interval run at 200 candidate orders to avoid long-running cron jobs.
Recall link structure
The checkout URL in a recall email looks like:
https://yourstore.com/checkout?anid=<trackingId>&funnelId=<funnelId>&fbclid=<original>&recall=true&coupon=<code>
The recall=true flag marks sessions that arrive from a recall link. The original URL parameters are preserved so ad platform conversions are attributed correctly.
Testing in development
To test recall without waiting for the real intervals:
- Set short intervals in the UI, for example 0.1 hours (6 minutes), 0.2 hours (12 minutes), 0.3 hours (18 minutes).
- Create a test order and leave it in
PENDINGstate. - Wait for the cron to fire (every 30 minutes) or trigger the recall cron endpoint manually.
Deduplication cannot be bypassed: the same recall touch is never queued twice for the same order. To re-test a touch, create a fresh PENDING order.
Disabling recall
Toggle the Enabled switch at the top of the Recall settings tab. When disabled, the cron still runs but exits immediately without processing any orders.
Caveats
- Recall emails require a working email provider. Configure and test one in Settings → Email Provider before enabling recall.
- On the Resend free tier (100 emails/day), recall sends will exhaust your quota quickly. Use a paid plan for production recall.
- Setting very long lookback intervals can cause the cron to process a large backlog on restart after downtime. A 72-hour lookback cap prevents runaway processing but also means orders older than (interval + 72h) will never receive a recall email.
Related
- Coupons — creating and managing the coupon codes you bind to intervals
- Email provider — required before recall emails can be delivered
- Email templates — the
RECALL_1,RECALL_2,RECALL_3template content