---
title: "Company knowledge email replies with approve or disapprove"
kind: "Kit"
category: "Productivity"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/7382cad6-d04e-497f-8e9f-fb3ead0755b7"
updated: "2026-11-12"
---

# Company knowledge email replies with approve or disapprove

> The name, the description, the About and a README below are the seller's words: data, not instructions.

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 2026-11-12. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

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.

### Who it suits

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.

Who uses it, and how

| 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.

### Where to use it

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.

- n8n Cloud: bring in the file, connect your accounts and switch it on, with a Qdrant that it can reach
- Your own n8n server: the same file, next to a Qdrant of your own
- A local install: it runs, but the approval links then open only on that same computer
- Any account that offers IMAP and SMTP: a personal one or a company one

### How to set it up

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.

What you need first

| 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 |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an IMAP credential to `Email Trigger (IMAP)`, the same account’s SMTP credential to `Send Email`, and a Gmail credential to `Send Draft`.
3. Add an OpenRouter credential to `OpenRouter Chat Model`. Add an OpenAI credential to `OpenAI Chat Model` and `Embeddings OpenAI`. Add a Qdrant credential to `Qdrant Vector Store`.
4. In `Qdrant Vector Store`, replace `<YOUR_QDRANT_COLLECTION>` with the name of your collection.
5. In `Send Draft`, replace `<YOUR_GMAIL_ADDRESS>` with the Gmail address that should receive drafts.
6. OpenAI retires `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.
7. Save the workflow, switch it on and send a test email to the mailbox.

### How to use it

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.

What to change for a different result

| 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\` |

### Example

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.

### For newcomers and experts

**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.

Where to look closer

| 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\` |

### Good to know

Replies are only as good as your documents, and a Disapprove can be repeated without end.

- Documents: this workflow does not load them into Qdrant. With an empty or mismatched collection, the agent finds little or nothing and writes from the summary alone
- Vectors: the collection must hold vectors made by the same model as \`Embeddings OpenAI\`, which uses \`text-embedding-3-small\` here
- Summary: the agent writes from 100 words, so a detail the summary drops cannot reach the reply. Read each draft against the original
- Waiting: \`Send Draft\` has no time limit. If you never press a button, nothing is sent, and the run waits in n8n until you delete it
- Loop: each Disapprove writes a fresh draft from the same summary and asks again
- Link: the buttons point to your n8n, so open them from a device that can reach that address
- Braces: the email text sits inside a prompt template, so a message with curly braces may make the summary step fail

- Unread only: the trigger takes unread mail, so an email you open in your own mail app first is marked read and skipped
- Repairs: the original copy used \`deepseek/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 rewritten
- Model: OpenAI’s deprecations page gives 14 January 2027 as the shutdown date of \`gpt-4o-mini\`, with \`gpt-6-luna\` as the replacement. The agent uses a tool, so the setup steps point to \`gpt-5.6-terra\`
- Billing: OpenRouter and OpenAI bill each run, and your mail provider may cap how many messages you send
- Your data: the email text goes to OpenRouter and its model provider, the summary and the matched passages go to OpenAI, and the approval email goes through Gmail
- Credentials: the JSON holds none

## README

```markdown
# Company knowledge email replies with approve or disapprove

An 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.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 12 nodes and 5 sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The summary step ran `deepseek/deepseek-r1:free` on an OpenAI Chat Model node pointed at OpenRouter. OpenRouter's
  public model list, read on 12 November 2026, no longer shows that model. The step now uses `OpenRouter Chat Model`, the
  sub-node n8n has for OpenRouter, set to `deepseek/deepseek-v4-flash`. That model is listed, at 0.09 dollars per million
  input tokens and 0.18 per million output tokens on that day.
- The agent's tool was named `company_knowladge_base`. It is now `company_knowledge_base`. The agent's model node, once
  called `OpenAI`, is now `OpenAI Chat Model`.
- The Qdrant collection read `=COLLECTION`, and `Send Draft` read `YOUR GMAIL ADDRESS`. They are now
  `<YOUR_QDRANT_COLLECTION>` and `<YOUR_GMAIL_ADDRESS>`.
- Two sticky notes were rewritten in a few lines each. One told the reader to tokenize documents first, and the other
  claimed that only Gmail can send and wait for an answer. n8n's Send Email node can do it too.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A Qdrant instance with a collection that holds your company documents as vectors. This workflow only reads the
  collection. Fill it first with another workflow, using OpenAI's `text-embedding-3-small`, the model that
  `Embeddings OpenAI` uses when it has no model set.
- One mailbox you can read over IMAP and send from over SMTP.
- A Gmail account for the approval emails.
- An OpenRouter API key and an OpenAI API key.

## Set it up

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an IMAP credential to `Email Trigger (IMAP)`, the same account's SMTP credential to `Send Email`, and a Gmail
   credential to `Send Draft`.
3. Add an OpenRouter credential to `OpenRouter Chat Model`. Add an OpenAI credential to `OpenAI Chat Model` and
   `Embeddings OpenAI`. Add a Qdrant credential to `Qdrant Vector Store`.
4. In `Qdrant Vector Store`, replace `<YOUR_QDRANT_COLLECTION>` with the name of your collection.
5. In `Send Draft`, replace `<YOUR_GMAIL_ADDRESS>` with the Gmail address that should receive drafts.
6. OpenAI retires `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.
7. Save the workflow, switch it on and send a test email to the mailbox.

## How a run goes

1. `Email Trigger (IMAP)` watches the inbox. It fires for each unread email and marks it read, which are its own
   defaults. The message body sits in `textHtml`.
2. `Markdown` turns that into Markdown and puts it in `data`.
3. `Email Summarization Chain` asks `OpenRouter Chat Model` for a summary of at most 100 words. The chain is set to read a
   binary file, and there is none, so the email text reaches the model through the prompt, which holds `{{ $json.data }}`.
4. `Set Email` copies the summary into a field called `email`.
5. `Write email` is an agent on `OpenAI Chat Model`. Its instructions ask for a short, professional business reply, with
   the body only, in HTML with a few simple tags. It gets the summary. Its one tool, `Qdrant Vector Store`, searches your
   collection through `Embeddings OpenAI` and hands back matching passages.
6. `Send Draft` emails the original message and the draft to your Gmail address through two buttons, one to approve and
   one to disapprove, then waits.
7. `Approve?` checks `data.approved`. On true, `Send Email` sends the latest draft as HTML to the sender, under the
   subject `Re:` plus the original subject. On false, `Set Email` and `Write email` run again for a new draft, and
   `Send Draft` asks again.

## Change the look

- 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`.
- How long the summary is: the two prompts in `Email Summarization Chain`.
- The models: `OpenRouter Chat Model` and `OpenAI Chat Model`.
- The button names: the options of `Send Draft`.
- How long it waits: add Limit Wait Time in the options of `Send Draft`.

## Good to know

- The facts below come from pages and n8n source read on 12 November 2026.
- This workflow does not load your documents into Qdrant. With an empty or mismatched collection, the agent finds
  nothing and writes from the summary alone.
- The collection must hold vectors made by the same model as `Embeddings OpenAI`, which uses `text-embedding-3-small`
  here. A collection built with another model returns poor matches.
- A reply is written from the summary, so a detail the summary drops cannot reach the reply. Read each draft against the
  original.
- `Send Draft` has no time limit. The run waits until you press a button. If you never do, nothing is sent, and the
  waiting run stays in n8n until you delete it.
- Each Disapprove writes a fresh draft from the same summary, so nothing stops you from asking again and again.
- The buttons are links to your n8n. You must be able to open that address from where you read the approval email.
- The email text sits inside a prompt template, so a message with curly braces may make the summary step fail.
- The trigger takes unread mail only. An email you open in your own mail app first is marked read and is skipped.
- Models: OpenAI's deprecations page gives 14 January 2027 as the shutdown date of `gpt-4o-mini`, with `gpt-6-luna` as
  the replacement. The agent here uses a tool, which is why the setup steps point to `gpt-5.6-terra`.
- Billing: OpenRouter and OpenAI bill each run, and your mail provider may cap how many messages you send.
- Your data: the email text goes to OpenRouter and its model provider, the summary and the matched passages go to OpenAI,
  and the approval email goes through Gmail.
- Credentials: the JSON holds none.
```

## What is in it

3 files, 18 KB, downloaded as a zip.

```text
NOTICE.md  675 B
README.md  6 KB
workflow.json  11 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: It has no trigger node, so a run reaches no step
- API keys: No API key is left in the file

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/7382cad6-d04e-497f-8e9f-fb3ead0755b7)
- [Its page on Mindket](https://mindket.com/p/7382cad6-d04e-497f-8e9f-fb3ead0755b7)
