See llms.txt for all machine-readable content.

Back to Templates

Manage handmade order proof approvals with Gmail, Airtable, Telegram, and GPT-4o-mini

Custom order proofs are the slowest part of selling handmade. Someone has to write the proof email, wait for the buyer, chase the ones who go quiet, resend after every change and then remember to start production. This workflow runs that loop and keeps every order in a table you can actually read.

Last updated: November 2026.

Quick Overview

A POST webhook starts the run when a custom order arrives. The request is normalised and validated, an AI agent writes a warm proof email, and Gmail sends it to the buyer with two links: approve or request changes. A second webhook catches the buyer click, matches the order in Airtable and either sends a production confirmation or alerts the seller with the change notes. A third webhook resends a revised proof and bumps a version counter. Every day at 08:00 a sweep finds proofs that are still waiting, nudges those buyers and escalates anything older than a week.

How it works

  1. Receives the order on a POST webhook (proof/order) with order_id, buyer_name, buyer_email, item, custom_details, price and production_days, then normalises it into a clean record.
  2. Validates the record against the four required fields. When something is missing the seller gets a Telegram alert and an email instead of a half finished run.
  3. Asks an AI agent to write the proof email as JSON: a subject and a body that restate the item and the exact custom details the buyer asked for.
  4. Builds the approve and request-changes links from the order code and appends them to the email.
  5. Sends the proof with Gmail, creates the order row in the Airtable Proof Orders table and posts a proof-sent note to Telegram.
  6. Catches the buyer decision on a GET webhook, reads the Proof Orders table and matches the row by order code. Unknown codes go to Telegram so a dead link never disappears.
  7. On approve: drafts a production confirmation, emails the buyer, sets the order to approved with a timestamp and tells the seller to start production on Telegram.
  8. On changes: writes the buyer notes onto the record, sets the status to changes and alerts the seller with those notes.
  9. On a revised proof: a POST webhook takes the new proof URL, rebuilds the decision links, emails the buyer, bumps the proof version and puts the order back to awaiting.
  10. Every day at 08:00: proofs waiting three days get an AI-written nudge per buyer, seven day waits escalate to the owner on Telegram and by email, and a clean queue gets an all clear.

Setup

  1. Create the Airtable base with a Proof Orders table (order_id, buyer_name, buyer_email, item, custom_details, price, production_days, proof_version, status, proof_sent_at, last_action_at, reference_image_url, notes) and an Action Log table (log_id, order_id, action, detail, at).
  2. Connect your Airtable token on the eight Airtable nodes and point them at that base.
  3. Connect Gmail on the six email nodes and set the shop ops address on the invalid order and escalation emails.
  4. Connect a Telegram bot and replace the placeholder chat ID on all ten Telegram nodes with your own chat.
  5. Set your public base URL in Build Response Links and in the resend email code so both decision links point at your own instance.
  6. Add your OpenAI credential on the three model nodes, and swap the model there if you prefer a cheaper one.
  7. Send a test order to the proof/order webhook and click through both decision links.

Quick Answers

What happens when the buyer asks for changes?
The order is marked changes with the buyer notes kept on the record, the seller is alerted on Telegram, and the revised proof goes back out through the resend webhook with fresh decision links and a higher proof version.

What if the buyer never answers?
The 08:00 sweep writes a friendly follow-up for every buyer waiting three days or more, one email each. Anything unanswered for seven days escalates to the owner on Telegram and by email.

Where do orders and decisions live?
In Airtable. Proof Orders holds one row per order with status, proof version and timestamps, and Action Log holds one row per nudge with the order id and the subject line.

Can this work outside handmade products?
Yes. The intake webhook only needs an order id, a buyer email, an item and custom details, so the same approval loop fits print shops, furniture makers and repair jobs.

Additional info

Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/