---
title: "Three AI examples: email labels, PDF chat and booking agent"
kind: "Kit"
category: "Developer"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/275bed41-35a3-4bc7-8f7c-e797dfda209d"
updated: "2026-11-12"
---

# Three AI examples: email labels, PDF chat and booking agent

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

An n8n workflow with three separate AI examples: a classifier that labels Gmail, a chat that answers from a PDF kept in Pinecone, and a Claude agent that books Google Calendar appointments.

Three AI examples: email labels, PDF chat and booking agent is an n8n workflow in the Developer 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 holds three separate AI examples on one canvas, plus a small webhook demo. The first sorts incoming Gmail messages into two labels with a text classifier. The second downloads a PDF, stores it in Pinecone and lets you chat with it. The third is a Claude agent that checks a Google Calendar for free time and books a 30-minute appointment. Twenty-seven nodes run it, beside six sticky notes.

### Who it suits

Developers and automation builders who want to see three common AI patterns working side by side: a classifier, a chat over their own document and an agent with tools. It fits a workshop or a first day with n8n’s AI nodes. Skip it if you want one finished process. The examples are independent, and each needs its own accounts.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Agencies | Automation consultants | Show a client three patterns before scoping a project | A consultant opens the file on a kickoff call and runs the PDF chat on the client’s own report. |
| Customer support | Support leads | Start from the email labeller to sort a shared inbox | A lead swaps the two categories for billing and bug reports. |
| Training | Workshop hosts | Teach classifiers, retrieval and agents from one file | A host runs the examples one by one in a two-hour session. |
| Services | Studios and independent consultants | Start from the booking agent to let visitors ask for a slot | A studio points the agent at its own calendar and shares the chat. |

You need solid n8n for this one: up to six credentials, a Pinecone index and two Gmail labels. Set up one example and ignore the others if you like.

### Where to use it

Any n8n that can reach OpenAI, Anthropic, Google, Pinecone and Slack will run it. Each example answers where its own trigger sits.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file and steps
- Gmail: the labeller puts its labels on your own messages
- Google Calendar: the booking agent reads free time and creates events there
- Slack: the webhook demo posts a line to a channel

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Each example has its own accounts, so add only the ones you will use.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key, for the classifier, the PDF chat and the embeddings |
| Pinecone | An index named \`whitepapers\` for 1,536-dimension vectors |
| Gmail | An account with two labels, for the labeller |
| Anthropic | An API key, for the booking agent |
| Google Calendar | A calendar to book into, with OAuth2 |
| Slack | A workspace, only for the webhook demo |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an OpenAI credential. Select it in `OpenAI Chat Model1`, `Embeddings OpenAI`, `Embeddings OpenAI2` and `OpenAI Chat Model`.
3. For the labeller, add a Gmail OAuth2 credential and select it in `On new email`, `Add automation label` and `Add music label`. Replace the two label ids, then switch `On new email` on. It is disabled in the file.
4. For the PDF chat, add a Pinecone credential and select it in `Insert into Pinecone vector store` and `Read Pinecone Vector Store`. Create the index first.
5. For the booking agent, add an Anthropic credential and select it in `Anthropic Chat Model`. Add a Google Calendar OAuth2 credential, select it in `Get calendar availability` and `Book appointment`, and replace `<YOUR_CALENDAR_EMAIL>` in the three places it appears.
6. For the webhook demo, add a Slack OAuth2 credential, select it in `Send message` and replace `<YOUR_SLACK_CHANNEL_ID>`.
7. Save, then run each example from its own trigger.

### How to use it

Pick an example and run it from its trigger. For the PDF chat, press Execute step on `Insert into Pinecone vector store` first, then open `Chat with the PDF` and ask a question. For the booking agent, open `Chat with the booking agent` and ask for a slot. For the labeller, switch the Gmail trigger on and send yourself a message.

What to change for a different result

| To change | Where |
| --- | --- |
| The email categories | The names and descriptions in \`Assign label with AI\` |
| The PDF it answers from | The item in \`PDFs to download\`, and the namespace and index in the Pinecone nodes |
| How the PDF chat answers | The text in \`Question and Answer Chain\` |
| The booking rules | The system message in \`Appointment booking agent\` |
| The time zone | \`timeZone\` in the bodies of \`Get calendar availability\` and \`Book appointment\` |
| The models | \`OpenAI Chat Model\`, \`OpenAI Chat Model1\` and \`Anthropic Chat Model\` |

### Example

A developer runs the PDF example on the Bitcoin white paper that comes in the file. Then they open the chat and ask how the paper stops a coin from being spent twice.

The chain looks up the closest passages in Pinecone and answers from them. It says it does not know when they hold nothing on the question. For the booking agent, a visitor asks for a slot on a given day, the agent checks free time, and a 30-minute event appears in the calendar with the visitor on it. Check each answer against the PDF, and each event against your calendar.

### 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. Here four small flows share one canvas, each under its own title note. You never need all four at once. Switch on the one you want to try, and leave the rest alone.

**For experts.** The AI nodes hang off their root nodes by typed links, so each model, memory, tool and vector store is its own small node.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Insert into Pinecone vector store\` | Clears the \`whitepaper\` namespace and stores the file’s chunks | Each run replaces the previous PDF |
| \`Assign label with AI\` | Text classifier with two categories | With no fallback set, a message that fits neither is dropped |
| \`Chat with the booking agent\` | Chat trigger with its public setting on | Anyone with its address can start a booking chat |
| \`Window Buffer Memory\` | Keeps the last 10 messages of a chat | It lives inside the n8n instance and does not work in queue mode |

### Good to know

Each example is separate, and the booking chat is open to anyone who finds its address.

- Models: the two OpenAI chat nodes set \`gpt-4o\`. OpenAI’s deprecations page, read on 12 November 2026, gives 14 January 2027 as the shutdown of \`gpt-4o-2024-08-06\` and \`gpt-4o-2024-11-20\`, with \`gpt-6-luna\` as the replacement. The page does not list \`text-embedding-ada-002\`, the embeddings default for this version
- Anthropic: the original copy had no model set, and n8n’s default for that node version, \`claude-3-5-sonnet-20240620\`, was retired on 28 October 2025. Mindket’s copy sets \`claude-sonnet-5-5\`, the replacement Anthropic names
- Repairs: the original copy had no input for the booking agent and no data in the PDF list. Both are fixed, and so are the ids and names of its author’s accounts
- Public chat: once the workflow is active, anyone with the booking chat’s address can book into your calendar and run up your Anthropic bill
- Pinecone: every run clears the \`whitepaper\` namespace first
- Time zone: both calendar tools write \`Europe/Berlin\`, and an example in the availability tool’s description is dated 2024. Change both
- Webhook demo: its path is a fixed string in the file and it posts the \`email\` value it receives to Slack. Change the path before you switch the workflow on
- Billing: OpenAI bills the classifier, the embeddings and the PDF chat, and Anthropic bills each booking turn
- Your data: email text goes to OpenAI, the PDF’s chunks go to OpenAI and Pinecone, the booking chat goes to Anthropic, and calendar requests go to Google
- Credentials: the JSON holds none

## README

```markdown
# Three AI examples: email labels, PDF chat and booking agent

An n8n workflow that holds three separate AI examples on one canvas, plus a small webhook demo. One labels incoming Gmail
messages with a text classifier. One stores a PDF in Pinecone and answers questions about it in a chat. One is a Claude
agent that checks a Google Calendar for free time and books a 30-minute appointment. Each has its own trigger and its own
accounts, so you can set up one and ignore the rest.

## What is inside

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

## What we changed from the original copy

- The original copy carried seven sticky notes made for a live talk. They held slide and screenshot pictures hosted on
  other sites, a QR code, the speaker's name and links to a calendar, n8n's template library and its forum. Mindket's
  copy leaves them out and keeps the six notes that name each example.
- Several ids and addresses belonged to the author's own accounts. The Slack channel in `Send message` is
  `<YOUR_SLACK_CHANNEL_ID>`. The two Gmail label ids read `<YOUR_AUTOMATION_LABEL_ID>` and `<YOUR_MUSIC_LABEL_ID>`. The
  calendar address, which sat in the availability request, the booking address and the booking body, reads
  `<YOUR_CALENDAR_EMAIL>`.
- The booking agent's prompt, its chat title and its greeting named a person. They now say "the calendar's owner" or
  nothing at all. The Gmail trigger was named after an inbox owner and is now `On new email`.
- `PDFs to download` was a No-Op with nothing in it, so `Download PDF` had no address to fetch. It is now an Edit Fields
  node with one item: `file_url`, `whitepaper_title`, `publish_year` and `author` for the Bitcoin white paper. The
  address returned a PDF when Mindket tried it.
- The chat trigger carried the booking agent's title and greeting, but its only line led to the PDF chain, and the
  booking agent had no input at all. Mindket's copy gives the trigger to the booking agent as
  `Chat with the booking agent` and adds a plain `Chat with the PDF` for the PDF chain.
- `Anthropic Chat Model` was on version 1.2 with no model set. n8n's source gives that version
  `claude-3-5-sonnet-20240620`. Anthropic's deprecations page lists it as retired on 28 October 2025, with
  `claude-sonnet-5-5` as the replacement. The node is now on version 1.6 and set to `claude-sonnet-5-5`. Both pages were
  read on 12 November 2026.

In the two calendar tools, the capital O in the name of the Google Calendar OAuth2 credential type is written as the JSON
escape `\u004f`. n8n reads the same name. The escape only stops a store check from taking that long name for a secret
key.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An OpenAI API key, for the classifier, the PDF chat and the embeddings.
- For the labeller: a Gmail account with two labels, and for the webhook demo a Slack workspace.
- For the PDF chat: a Pinecone account and an index named `whitepapers` made for 1,536-dimension vectors, the size
  n8n's embeddings node lists as its default.
- For the booking agent: an Anthropic API key and a Google account with a calendar to book into.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an OpenAI credential. Select it in `OpenAI Chat Model1`, `Embeddings OpenAI`, `Embeddings OpenAI2` and
   `OpenAI Chat Model`.
3. For the webhook demo, add a Slack OAuth2 credential, select it in `Send message` and replace
   `<YOUR_SLACK_CHANNEL_ID>` with the channel's ID.
4. For the labeller, add a Gmail OAuth2 credential and select it in `On new email`, `Add automation label` and
   `Add music label`. Replace the two label ids with your own, then switch `On new email` on: it is disabled in the file.
5. For the PDF chat, add a Pinecone credential and select it in `Insert into Pinecone vector store` and
   `Read Pinecone Vector Store`. Create the `whitepapers` index first.
6. For the booking agent, add an Anthropic credential and select it in `Anthropic Chat Model`. Add a Google Calendar
   OAuth2 credential and select it in `Get calendar availability` and `Book appointment`. Replace `<YOUR_CALENDAR_EMAIL>`
   in the three places it appears.
7. Save. Run each example from its own trigger, as the next part describes.

## How a run goes

Webhook demo:

1. `Webhook` receives a request. `Whether email contains n8n` checks whether its `email` query value contains `@n8n`.
2. When it does, `Execute JavaScript` adds a `myNewField` of 1 to the item, and `Send message` posts the address to Slack.

Email labeller:

1. `On new email` polls Gmail every minute for new messages.
2. `Assign label with AI` asks a `gpt-4o` model to pick one of two categories from the message text: `automation` for mail
   about workflows and automated processes, `music` for mail about music.
3. `Add automation label` or `Add music label` puts the matching label on the message. A message that fits neither is
   dropped.

PDF chat:

1. `PDFs to download` holds one item, and `Download PDF` fetches its `file_url`.
2. `Insert into Pinecone vector store` clears the `whitepaper` namespace and stores the file. `Default Data Loader` reads
   the PDF with its title, year and author as metadata, `Recursive Character Text Splitter` cuts it into chunks of 3,000
   characters with 200 of overlap, and `Embeddings OpenAI` makes the vectors.
3. `Chat with the PDF` takes a question. `Question and Answer Chain` adds the instruction to answer only from the stored
   passages, and `Vector Store Retriever` fetches them from `Read Pinecone Vector Store`. A `gpt-4o` model writes the
   answer.

Booking agent:

1. `Chat with the booking agent` opens a public chat titled Book an appointment.
2. `Appointment booking agent` runs on `Anthropic Chat Model` with `Window Buffer Memory`, which keeps the last 10
   messages. Its prompt makes appointments 30 minutes long and allows a booking only into a free slot.
3. `Get calendar availability` posts a free and busy request to Google Calendar. `Book appointment` creates the event, titled
   with the visitor's name, and adds the visitor and the calendar's owner as attendees.

## Change the look

- The classifier's categories: the names and descriptions in `Assign label with AI`.
- The labels: the ids in the two Gmail nodes.
- What the PDF chat answers from: the item in `PDFs to download`, and the namespace and index in the Pinecone nodes.
- How the PDF chat answers: the text in `Question and Answer Chain`.
- The booking rules: the system message in `Appointment booking agent`, and `timeZone` in the bodies of both tools.
- The models: `OpenAI Chat Model`, `OpenAI Chat Model1` and `Anthropic Chat Model`.

## Good to know

- The model and agent facts below come from pages and source files read on 12 November 2026.
- The two OpenAI chat nodes set `gpt-4o`. OpenAI's deprecations page gives 14 January 2027 as the shutdown date of
  `gpt-4o-2024-08-06` and `gpt-4o-2024-11-20`, with `gpt-6-luna` as the replacement. It does not list
  `text-embedding-ada-002`, the embeddings node's default for this version.
- `Insert into Pinecone vector store` clears its namespace before it stores a file, so each run replaces the last PDF.
- `Assign label with AI` has one category for each message and, with no fallback set, drops a message that fits neither.
- The booking chat is public. Once the workflow is active, anyone with the chat's address can book into your calendar and
  run up your Anthropic bill.
- Both calendar tools write `Europe/Berlin` into their requests, and the free and busy tool's description gives its example
  in 2024. Change both to your own time zone.
- `Window Buffer Memory` lives inside the n8n instance. n8n's source warns that it does not work in queue mode or with
  several main instances.
- n8n's source says the Anthropic node ignores its temperature on Claude Sonnet 5 and later, so the `0.4` in the file has
  no effect.
- The webhook demo posts whatever its `email` value holds to a Slack channel. Its path is a fixed string in the file, so
  change it before you switch the workflow on.
- Billing: OpenAI bills the classifier, the embeddings and the PDF chat. Anthropic bills each booking chat turn.
- Email text goes to OpenAI. The PDF's chunks go to OpenAI and Pinecone, the booking chat to Anthropic, and calendar
  requests to Google.
```

## What is in it

3 files, 31 KB, downloaded as a zip.

```text
NOTICE.md  652 B
README.md  8 KB
workflow.json  23 KB
```

## Workflow check

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

- Steps: 8 steps, starting when its webhook is called or on a chat message
- Not reached: 11 nodes no run reaches: Recursive Character Text Splitter, Embeddings OpenAI, Default Data Loader, Download PDF, PDFs to download and 6 more
- AI: 2 steps call an AI model: Appointment booking agent and Question and Answer Chain
- Sign-ins: Signs in to: Slack, Google Calendar, Pinecone, OpenAI and Anthropic
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 7 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/275bed41-35a3-4bc7-8f7c-e797dfda209d)
- [Its page on Mindket](https://mindket.com/p/275bed41-35a3-4bc7-8f7c-e797dfda209d)
