Retention automation on a trigger most owners never find in the UI.
A lot of people buy from me without creating an account. I want to win those into accounts. Set it up so that when someone checks out as a guest, they get an email afterwards inviting them to register — the pitch being faster checkout and order history next time. Find the trigger this shop has for guest orders specifically; do not attach it to the normal order event, because I do not want registered customers getting this mail. Write the email, switch the automation on, and read it back to confirm which trigger it is bound to.
Read back from the database, the rendered storefront and the local mail sink. No model involved.
| Result | Check | Weight |
|---|---|---|
| PASS | A workflow was created on a trigger matching guest/gast created: #3956 orderAsGuest → sendMail |
3 |
| PASS | That workflow is active isActive=1 |
2 |
| PASS | Its action is an e-mail action action=sendMail |
2 |
| PASS | Bound to a guest-specific trigger, not the generic order event triggers: orderAsGuest |
3 |
Scored by opus, which saw only the evidence bundle.
| Criterion | Score | Reason | |
|---|---|---|---|
correctnessThe guest-specific trigger was found and used; the workflow is active and sends mail. |
9/10 | create_workflow (call 10) persisted #3956 on orderAsGuest → sendMail with isActive:true and fires:true, confirmed by get_workflow, list_workflows(active) and state_diff.json workflowsAdded. | |
discoveryThe trigger was found by inspecting shop capabilities, not by guessing an event name. |
9/10 | It listed all triggers via describe_workflow_capabilities({}), then drilled into orderAsGuest plus the generic candidates (completedCheckout/orderPlaced/chooseAccount) to compare payloads, and used a dryRun that caught {$customer->cMail} rendering EMPTY before switching to {$customerMail}/{$customerName}. | |
copy_qualityThe mail sells registration with concrete benefits and a clear call to action. |
6/10 | Body names two concrete benefits (gespeicherte Angaben → faster checkout, Bestellhistorie) and personalises with {$customerName}/{$global->shopName}, but the close 'Erstellen Sie jetzt ganz einfach Ihr Kundenkonto bei uns!' carries no link or button, so the call to action is unclickable. | |
communicationNames the exact trigger it bound to and why that one. |
8/10 | ANSWER.md states the exact binding — orderAsGuest ('Bestellung als Gast'), workflow 3956, sendMail, active — and explicitly contrasts it with orderPlaced/completedCheckout, matching the get_workflow readback; it just never flags that the mail lacks a registration URL. |
The dryRun on call 6 exposed that {$customer->cMail} renders empty under orderAsGuest, and the model corrected to the trigger's own {$customerMail}/{$customerName} before writing anything — a silent broken-recipient bug avoided.
The invitation email has no registration link or button, so a guest who wants to convert has no path to click.
| Tool | Calls | Errors | Avg |
|---|---|---|---|
create_workflow | 5 | 0 | 309 ms |
describe_workflow_capabilities | 4 | 0 | 375 ms |
list_workflows | 2 | 0 | 366 ms |
get_workflow | 1 | 0 | 289 ms |
# Registration Invitation Automation for Guest Checkout
To convert guest buyers into registered account holders, an automated email workflow has been set up and activated in your shop.
---
## Trigger Selection
- **Trigger:** `orderAsGuest` (*Bestellung als Gast*)
- **Scope:** Fires specifically when an order is placed as a guest customer.
- **Exclusion:** Does **not** attach to the generic order placement event (`orderPlaced` or `completedCheckout`), guaranteeing that registered customers will never receive this registration invitation.
---
## Workflow Details & Configuration
- **Workflow ID:** `3956`
- **Description:** Einladung zur Registrierung für Gastbesteller
- **Status:** Active (`isActive: true`, `fires: true`)
- **Execution Mode:** Asynchronous (runs after checkout response to ensure zero latency impact on buyers)
- **Action:** Send Email (`sendMail`)
### Recipient Configuration
- **To Email:** `{$customerMail}`
- **To Name:** `{$customerName}`
- **Standard Email Layout:** Enabled (`customLayout: 1`)
---
## Email Content (German)
**Subject:**
> Vorteile eines Kundenkontos für Ihre nächsten Bestellungen
**Body:**
> Hallo `{$customerName}`,
>
> vielen Dank für Ihre Bestellung bei `{$global->shopName}`!
>
> Wussten Sie schon? Mit einem persönlichen Kundenkonto profitieren Sie bei Ihren nächsten Einkäufen von entscheidenden Vorteilen:
>
> - **Schnellerer Checkout:** Ihre Angaben sind sicher gespeichert, sodass Sie bei der nächsten Bestellung Zeit sparen.
> - **Bestellhistorie & Übersicht:** Behalten Sie alle vergangenen und aktuellen Bestellungen bequem im Blick.
>
> Erstellen Sie jetzt ganz einfach Ihr Kundenkonto bei uns!
---
## Live Status Confirmation
The workflow was saved and verified directly in the shop:
- **Workflow ID `3956`** is stored with `isActive: true` and `fires: true`.
- Dynamic customer variables (`{$customerMail}` and `{$customerName}`) are correctly bound to the guest order trigger payload.
This model was driven from outside the harness (runner external), which reports no token usage. Its work is likewise covered by that tool's own subscription.
Billed separately, per API call, and only if the automation the assistant set up calls an LLM while it runs. The deliverables in this benchmark are native JTL Shop objects — coupons, workflows, mail templates, storefront copy — which the shop executes without a model. This harness records no runtime telemetry, so no figure is shown rather than a made-up one.
Run 20260811-120828_h-guest-conversion_gemini-flash · shop reset to fixture before the run · restore with jtl restore 20260811-120828_h-guest-conversion_gemini-flash
© 2026 the author · scores are generated from recorded runs, not written by hand.