anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow that drafts email replies from your own documents in Qdrant, then sends you the draft by Gmail with Approve and Disapprove buttons. Approve sends the reply, and Disapprove asks for a new draft.
Company knowledge email replies with approve or disapprove is an n8n workflow in the Productivity category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
New unread email
It starts when an unread email arrives in the mailbox. Set first:
A reply built from your documents, sent to the sender only after you pressed Approve
What you need before you start.
Mailbox
Reads each new email and sends the approved reply.
NeedsIMAP and SMTP details
Language model
Summarizes each email.
NeedsOpenRouter API key
Language model
Runs the agent that writes the draft, and turns its search into vectors.
NeedsOpenAI API key
Knowledge base
Holds your documents and returns the passages that match.
NeedsA Qdrant collection and its credential
Approval
Sends you the draft with Approve and Disapprove buttons and waits for your click.
NeedsA Gmail account
Checked by Mindket on 13 Nov 2026
This n8n workflow answers incoming email from your own company documents, with a person checking each reply. It reads an inbox over IMAP and summarizes the message. An AI agent then searches a Qdrant collection of your documents. It drafts a reply from what it finds. You receive the draft in Gmail with an Approve and a Disapprove button. Approve sends the reply to the sender. Disapprove asks the agent for a new draft. Twelve nodes run it, beside five sticky notes.
Companies that answer general enquiries by email and keep the answers in documents, such as price lists, policies and product sheets. Shops, support teams and small agencies fit well. It suits a team that wants an AI to do the lookup while a person keeps the last word. A person always decides. Skip it if you have no documents to search, or if you want a plain draft with no setup. Documents come first. Its simpler cousin, Email replies drafted by AI and approved by email, needs no knowledge base and has one Approve button.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Retail | Online shops | Answer questions on shipping and returns from the policy documents | A shop owner approves a reply that quotes the return window from the policy. |
| Support | Support teams | Answer repeat product questions from the manual | A team lead presses Disapprove when a draft misses a step, and a new one arrives. |
| Services | Small agencies | Quote standard terms and prices from a rate card | An agency checks a reply that quotes a package price before it goes out. |
| Hospitality | Hotels | Answer questions on check in times and facilities | A front desk manager approves a reply about parking rules. |
You need your documents loaded in Qdrant, a mailbox, a Gmail account and keys for OpenRouter and OpenAI.
Any n8n that can reach your mail server, Qdrant, OpenRouter, OpenAI and Gmail will run it. The workflow must be switched on. The buttons are links to your n8n, so you must be able to open it where you read the email.
Download saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Import the file, add the credentials, name your collection and your Gmail address, and switch the workflow on.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| Qdrant | A collection of your documents as vectors made by text-embedding-3-small |
| Mailbox | IMAP and SMTP details for one account |
| Gmail | An account that receives the approval emails |
| OpenRouter | An API key |
| OpenAI | An API key |
workflow.json.Email Trigger (IMAP), the same account’s SMTP credential to Send Email, and a Gmail credential to Send Draft.OpenRouter Chat Model. Add an OpenAI credential to OpenAI Chat Model and Embeddings OpenAI. Add a Qdrant credential to Qdrant Vector Store.Qdrant Vector Store, replace <YOUR_QDRANT_COLLECTION> with the name of your collection.Send Draft, replace <YOUR_GMAIL_ADDRESS> with the Gmail address that should receive drafts.gpt-4o-mini on 14 January 2027. Pick gpt-5.6-terra in OpenAI Chat Model, because the agent calls a tool and OpenAI says gpt-6-luna supports function calling in Chat Completions only with reasoning effort set to none.Leave the workflow on. Each unread email gets a draft, and you receive an approval email in Gmail with the original and the draft. Press Approve to send the reply. Press Disapprove to get a new draft. Do nothing and nothing is sent. No click, no reply.
| To change | Where |
|---|---|
| Tone and length of the reply | The instructions in Write email |
| What the agent may look up | The description of the tool in Qdrant Vector Store |
| Length of the summary | The two prompts in Email Summarization Chain |
| The models | OpenRouter Chat Model and OpenAI Chat Model |
| The button names | The options of Send Draft |
A hotel gets an email that asks whether the car park is free for guests. The workflow summarizes it, and the agent searches the hotel’s documents and finds the parking rules.
The approval email reaches the front desk manager in Gmail, with the guest’s message above the draft. The draft gives the weekday price and leaves out the weekend rate. She presses Disapprove. A new draft arrives. This one is complete, so she presses Approve. The guest receives it under the subject Re: plus the original subject.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Qdrant is a database that finds passages by meaning, not by exact words. Your documents sit in it as numbers called vectors. An agent is a model that can choose to use a tool, and here the tool is that search. You are the check, because the run stops until you press a button.
For experts. The agent’s only tool is the Qdrant node in retrieve as tool mode, so its model must support tool calls.
| Node | What it does | What to know |
|---|---|---|
Qdrant Vector Store | Searches your collection when the agent asks | Retrieve as tool mode. The tool is named company_knowledge_base, and document metadata is not returned |
Embeddings OpenAI | Turns the agent’s query into a vector | No model is set, so it uses text-embedding-3-small, and the collection must match it |
Email Summarization Chain | Summarizes the Markdown text | Binary mode with no binary file, so the text enters through {{ $json.data }} in the prompt |
Send Draft | Sends the approval email through Gmail and pauses | Two buttons and no time limit. It resumes with data.approved |
Approve? | Tests data.approved | The false output goes to Set Email and then back to Write email |
Replies are only as good as your documents, and a Disapprove can be repeated without end.
Embeddings OpenAI, which uses text-embedding-3-small hereSend Draft has no time limit. If you never press a button, nothing is sent, and the run waits in n8n until you delete itdeepseek/deepseek-r1:free, which OpenRouter’s model list no longer shows on 12 November 2026. Mindket’s copy uses deepseek/deepseek-v4-flash on the OpenRouter sub-node, listed at 0.09 dollars per million input tokens. The tool name had a typo, two placeholders replace private values and two sticky notes were rewrittengpt-4o-mini, with gpt-6-luna as the replacement. The agent uses a tool, so the setup steps point to gpt-5.6-terraAn n8n workflow that answers incoming email from your own company documents. An AI agent looks facts up in a Qdrant
collection and drafts a reply. It then emails the draft to you with an Approve and a Disapprove button. Approve sends the
reply to the sender. Disapprove makes the agent write another draft.
workflow.json: the workflow as n8n exports it, 12 nodes and 5 sticky notes. It holds no credential.README.md: these notes.deepseek/deepseek-r1:free on an OpenAI Chat Model node pointed at OpenRouter. OpenRouter'sOpenRouter Chat Model, thedeepseek/deepseek-v4-flash. That model is listed, at 0.09 dollars per millioncompany_knowladge_base. It is now company_knowledge_base. The agent's model node, onceOpenAI, is now OpenAI Chat Model.=COLLECTION, and Send Draft read YOUR GMAIL ADDRESS. They are now<YOUR_QDRANT_COLLECTION> and <YOUR_GMAIL_ADDRESS>.text-embedding-3-small, the model thatEmbeddings OpenAI uses when it has no model set.workflow.json.Email Trigger (IMAP), the same account's SMTP credential to Send Email, and a GmailSend Draft.OpenRouter Chat Model. Add an OpenAI credential to OpenAI Chat Model andEmbeddings OpenAI. Add a Qdrant credential to Qdrant Vector Store.Qdrant Vector Store, replace <YOUR_QDRANT_COLLECTION> with the name of your collection.Send Draft, replace <YOUR_GMAIL_ADDRESS> with the Gmail address that should receive drafts.gpt-4o-mini on 14 January 2027. Pick gpt-5.6-terra in OpenAI Chat Model, because the agent callsgpt-6-luna supports function calling in Chat Completions only with reasoning effort setEmail Trigger (IMAP) watches the inbox. It fires for each unread email and marks it read, which are its owntextHtml.Markdown turns that into Markdown and puts it in data.Email Summarization Chain asks OpenRouter Chat Model for a summary of at most 100 words. The chain is set to read a{{ $json.data }}.Set Email copies the summary into a field called email.Write email is an agent on OpenAI Chat Model. Its instructions ask for a short, professional business reply, withQdrant Vector Store, searches yourEmbeddings OpenAI and hands back matching passages.Send Draft emails the original message and the draft to your Gmail address through two buttons, one to approve andApprove? checks data.approved. On true, Send Email sends the latest draft as HTML to the sender, under theRe: plus the original subject. On false, Set Email and Write email run again for a new draft, andSend Draft asks again.Write email.Qdrant Vector Store.Email Summarization Chain.OpenRouter Chat Model and OpenAI Chat Model.Send Draft.Send Draft.Embeddings OpenAI, which uses text-embedding-3-smallSend Draft has no time limit. The run waits until you press a button. If you never do, nothing is sent, and thegpt-4o-mini, with gpt-6-luna asgpt-5.6-terra.NOTICE.md 675 B README.md 6 KB workflow.json 11 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
op7418 · Skill
Skill that makes single-file HTML slide decks, slide illustrations and platform covers in two visual styles, with a presenter mode for rehearsal. For speakers…
zarazhangrui · Skill
Builds HTML presentations from scratch or from a PowerPoint file and shows visual style previews to pick from, for people who want web slides with no CSS or Ja…
iptv-org · Kit
Collects publicly available live TV channels from many countries into playlists that any video player with live streaming can open. Made for viewers and for de…