# Draft a reply with AI, then approve it

AI is useful for getting to a first draft quickly. It should not quietly invent a customer-facing answer and send it unchecked. This workflow drafts a reply, puts that exact draft in front of a reviewer, and sends it only after approval.

<dl class="fc-recipe-meta not-content" aria-label="Recipe details">
	<div class="fc-recipe-meta__group">
		<dt class="fc-recipe-meta__label">Good for</dt>
		<dd class="fc-recipe-meta__value">Support, applications, lead qualification, and other review-heavy inboxes</dd>
	</div>
	<div class="fc-recipe-meta__group fc-recipe-meta__group--level">
		<dt class="fc-recipe-meta__label">Level</dt>
		<dd class="fc-recipe-meta__value">
			<span class="fc-recipe-meta__level" data-level="intermediate">
				<svg class="fc-recipe-meta__level-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" aria-hidden="true" focusable="false">
					<rect class="fc-recipe-meta__level-bar" x="1" y="10" width="3" height="4" rx="1" />
					<rect class="fc-recipe-meta__level-bar" x="6.5" y="6" width="3" height="8" rx="1" />
					<rect class="fc-recipe-meta__level-bar" x="12" y="2" width="3" height="12" rx="1" />
				</svg>
				Intermediate
			</span>
		</dd>
	</div>
</dl>

## What you'll build

```mermaid
flowchart TD
    A[Form Submitted] --> B[OpenAI Text: draft the reply]
    B --> C[Wait for Approval]
    C -->|Approved| D[Send Email to the submitter]
    C -->|Rejected| E[Email the team for a manual reply]
    C -->|Expired| F[Escalate to a manager]
```

![AI draft workflow with approved, rejected, and expired review paths](/documentation/flowcrafter/screenshots/use-case-ai-draft-with-approval-workflow.png)

## Before you build

- Configure GC OpenAI under **Forms → Settings → OpenAI** and review its data-processing terms.
- Confirm the form has an email field for the submitter.
- Choose a reviewer inbox and a manager inbox for expired requests.
- Make sure WordPress can send mail reliably.

## Build it step by step

1. Configure GC OpenAI under **Forms → Settings → OpenAI**. Open your form and click **Workflows** in the form toolbar. Click **New Workflow**, then **Add Trigger** and choose [Form Submitted](/documentation/flowcrafter/nodes/triggers/form-submitted/).
2. Activate GC OpenAI and add [OpenAI Text](/documentation/flowcrafter/nodes/actions/ai-text/) named **Draft reply**. Tell it what tone to use and what it must not promise. Include only the submitted fields the draft actually needs rather than sending `{all_fields}` by default.
3. Add [Wait for Approval](/documentation/flowcrafter/nodes/flow/wait-for-approval/) named **Review draft**. Set **Approver emails** to the reviewer inbox, **Approval policy** to `First response decides`, **Expiry** (hours) to `72`, and **Reminder** (hours) to `24`. In **Email Body**, include `{{ "Draft reply".response_text }}` above `{{approval.approve_url}}` and `{{approval.reject_url}}`. Turn on **Require a note when rejecting**.

   
   ![Approval email settings containing the draft response flow tag and approval links](/documentation/flowcrafter/screenshots/use-case-ai-draft-with-approval-settings.png)
4. On **Approved**, add [Send Email](/documentation/flowcrafter/nodes/actions/send-email/). Address it to the submitted email field and use the same AI response as the body.
5. On **Rejected**, email the support team with the draft and `{{ "Review draft".note }}`. Use **Expired** for an escalation so the request cannot sit unnoticed.

## Data passed between nodes

| From | Data used later | Where it goes |
|---|---|---|
| Form Submitted | Selected answers and submitter email | OpenAI Text prompt and Send Email recipient |
| Draft reply | `response_text` | Approval email and approved customer email |
| Review draft | `action`, `note`, `resolved_by`, `resolved_at` | Rejection handoff and run history |

## Test and activate safely

New workflows start **Inactive**. Keep this one inactive while you run a builder test for both Approved and Rejected; test mode simulates the decision and does not email real approvers. Then temporarily activate on staging, or use a controlled live run with a non-sensitive entry and temporary reviewer addresses. Let a short deadline pass to verify the Expired branch. Restore the production expiry, review every recipient and prompt, activate the workflow, and watch its first runs.

The Expired branch is scheduled when a new approval parks. Approval nodes that were already waiting before expiry scheduling was installed do not gain a timer retroactively.

## What Flowcrafter adds

The useful part is not AI by itself. It is the handoff: generated text becomes input to a human decision, and that decision controls whether the customer email runs. The draft, reviewer, decision, and final send all stay visible in one run.

## Related resources

- [OpenAI Text](/documentation/flowcrafter/nodes/actions/ai-text/) — generate the first draft
- [Wait for Approval](/documentation/flowcrafter/nodes/flow/wait-for-approval/) — review it before continuing
- [Send Email](/documentation/flowcrafter/nodes/actions/send-email/) — send the approved result
- [Passing Data Between Nodes](/documentation/flowcrafter/building/using-flow-tags/) — place the draft in both later nodes
