Aurora Café is an end-to-end AI customer service workflow designed for a fictional coffee shop. The project demonstrates how conversational AI, vector search (RAG), memory, and workflow automation can work together to provide a natural customer experience through WhatsApp.
Customers can ask questions, browse the menu, place takeout orders, make reservations, reschedule or cancel bookings, and seamlessly escalate conversations to a human agent whenever necessary.
Built with n8n, Redis, PGVector, Airtable, Google Calendar, Google Drive, OpenRouter, Ollama, nomic embed text and Evolution API.
Aurora Café is a fictional premium coffee shop specialized in specialty coffee, artisanal brunch, signature pastries, and warm customer experiences. The business concept combines gastronomy, productivity, meetings, and wellbeing in a modern, sophisticated, and comfortable environment.
In addition to in-store service, Aurora Café provides intelligent WhatsApp support, table reservations, pickup orders, corporate event requests, casual coworking, accessibility, partner parking, customer Wi-Fi, and a pet-friendly outdoor area.
The automation turns WhatsApp into a digital concierge, named Aurora, able to assist customers with an elegant, warm, and objective tone. The assistant must not invent information and must use the official knowledge base whenever the conversation involves opening hours, menu, policies, prices, reservations, payments, accessibility, coworking, events, and other business information.
Automate a coffee shop customer service operation using n8n as the main orchestration layer. The workflow receives WhatsApp messages, detects customer intent with AI, queries the RAG knowledge base when needed, stores customer memory, creates/reschedule/cancel reservations in Google Calendar, records pickup orders in Airtable, and routes customers to a human attendant whenever manual handling is required.
| Area | Feature |
|---|---|
| Receives text and voice messages through a webhook. | |
| Conversational AI | Uses an AI Agent to interpret intent and respond naturally. |
| STT | Transcribes voice notes before processing. |
| Message debounce | Queues messages in Redis and waits 15 seconds before responding. |
| Bot/human mode | Controls the service state per customer in Redis. |
| RAG | Queries a vector knowledge base for business info, menu, FAQ, and policies. |
| Reservations | Creates reservations in Google Calendar based on operational rules. |
| Cancellation | Finds a reservation by email and deletes it from Google Calendar. |
| Rescheduling | Finds a reservation by email and updates its date/time in Google Calendar. |
| Pickup orders | Records orders in Airtable with name, phone, items, value, and status. |
| Customer memory | Stores and retrieves customer name/interest in Airtable. |
| Human handoff | Sets customer mode to human in Redis and alerts an attendant via WhatsApp. |
| RAG ingestion | Watches Google Drive, downloads files, generates embeddings, and stores vectors in PGVector. |
| File | Role in the project |
|---|---|
RAG - Aurora Café.pdf |
Business knowledge base: description, mission, vision, values, opening hours, menu, FAQ, and policies. |
SYSTEM PROMPT — Aurora Café.pdf |
Aurora assistant behavior, conversation flows, tools, limits, and governance. |
Aurora Café.json |
Main n8n workflow: webhook, Redis, AI, RAG, tools, response sending, and document ingestion. |
HUMAN_HANDOFF.json |
Subworkflow for human handoff. |
CANCEL_RESERVATION.json |
Subworkflow for Google Calendar reservation cancellation. |
RESCHEDULE_RESERVATION.json |
Subworkflow for Google Calendar reservation rescheduling. |
flowchart LR
A[WhatsApp / Customer] --> B[Evolution API]
B --> C[n8n Webhook]
C --> D[Message normalization]
D --> E{Customer message?}
E -- No --> Z[Ignore]
E -- Yes --> F[Redis: bot/human mode]
F --> G{Service mode}
G -- human --> H[Bot paused]
G -- empty --> I[Set bot mode]
G -- bot --> J[Classify type]
I --> J
J -- voice --> K[OpenAI transcription]
J -- text --> L[Redis queue]
K --> L
L --> M[Wait 15s]
M --> N[Retrieve queue]
N --> O[AI Agent]
O --> P[(Redis Chat Memory)]
O --> Q[(PGVector RAG)]
O --> R[Google Calendar]
O --> S[Airtable]
O --> T[Subworkflows]
T --> U[Handoff / Cancellation / Rescheduling]
O --> V[Send WhatsApp response]
V --> W[Clear Redis queue]
- n8n as the main automation platform.
- AI Agent as the conversation decision center.
- Subworkflows invoked as custom agent tools.
- WhatsApp connected through Evolution API.
- n8n webhook for incoming messages.
- Response sending through Evolution API.
- OpenRouter for the chat model.
- OpenAI Whisper for voice transcription.
- Redis Chat Memory for conversation memory by phone number.
- Google Drive as the document source.
- Ollama with
nomic-embed-textembeddings. - PostgreSQL + PGVector as the vector store.
- Google Calendar for reservations.
- Airtable for pickup orders and customer memory.
- Redis for memory, service mode and temporary message queue.
Responsible for two main areas:
- Receives a message through the webhook.
- Extracts phone, message, ID, message type, origin, date, and instance.
- Ignores messages sent by the connected account itself.
- Reads the customer's service mode from Redis.
- Sets mode to
botif no mode exists. - Stops automatic response if mode is
human. - Classifies the message as text, voice, or unsupported.
- Transcribes voice messages when needed.
- Pushes the message to a Redis queue.
- Waits 15 seconds to group consecutive messages.
- Retrieves the accumulated queue.
- Sends context to the AI Agent.
- The agent may use RAG, memory, calendar, Airtable, or subworkflows.
- Sends the answer through WhatsApp.
- Clears the Redis queue.
- Watches a Google Drive folder.
- Finds new files.
- Processes documents in batches.
- Downloads each file.
- Loads document content.
- Generates embeddings with Ollama.
- Stores vectors in PGVector.
- Moves the file to a processed folder.
Inputs:
| Field | Description |
|---|---|
Customer |
Customer phone/identifier. |
Human |
Human attendant phone/identifier. |
Instance |
Evolution API instance. |
Reason |
Reason for handoff. |
Flow:
- Triggered by the agent tool.
- Sets Redis key
customer:{phone}:modetohuman. - Sends an alert to the human attendant through Evolution API with the customer contact and reason.
Input:
| Field | Description |
|---|---|
Email |
Email used to find the reservation. |
Flow:
- Searches Google Calendar events using the customer's email.
- Deletes the matching event.
- Returns the result to the main flow.
Inputs:
| Field | Description |
|---|---|
Email |
Email used to find the reservation. |
Date |
New reservation date/time. |
Flow:
- Searches Google Calendar events using the customer's email.
- Updates the reservation start and end time.
- Sets the end time to new date/time + 1 hour.
- The assistant is named Aurora.
- Tone must be elegant, polite, warm, objective, and professional.
- The AI must query RAG for institutional information, menu, rules, policies, FAQ, and operations.
- The AI must not answer outside the Aurora Café context.
- Severe complaints, corporate events, operational failures, and questions not found in the knowledge base must be routed to a human.
- Required data: name, date, time, party size, and email.
- Valid hours in the operational prompt:
- Monday to Friday: 09:00 to 19:00;
- Saturday: 09:00 to 20:00;
- Sunday: unavailable.
- Automatic reservations allow up to 8 people.
- Reservation date/time must be in the future.
- Minimum lead time is 1 hour.
- Late tolerance is 15 minutes.
- The automation uses a 1-hour duration in Google Calendar.
- The project does not support delivery.
- Orders are for pickup only.
- Required flow: present menu, collect items, confirm order, calculate total, and record the order.
- Must be triggered when the customer asks for a human, there is a critical complaint, operational failure, booking above the automatic limit, corporate event, financial issue, or a question not found in RAG.
humanmode pauses automatic responses for that customer.- The current workflow does not automatically switch a customer back to
bot; this must be done manually in Redis or through an additional workflow.
| Key | Purpose | Example value |
|---|---|---|
customer:{phone}:mode |
Controls whether the customer is handled by bot or human. | bot or human |
queue:{phone} |
Stores temporary messages before the response. | Message list |
| Field | Use |
|---|---|
Phone |
Customer identifier. |
Name |
Customer name detected or provided. |
Interest |
Customer's main interest. |
| Field | Use |
|---|---|
Phone |
Customer phone. |
Name |
Full name. |
Order |
Order summary. |
Value |
Amount calculated from the menu. |
Status |
Initial state: In progress. |
| Field | Use |
|---|---|
summary |
Customer full name. |
attendees |
Customer email. |
description |
Party size / chairs. |
start |
Reservation start date/time. |
end |
Reservation end date/time. |
| Table | Use |
|---|---|
Aurora_cafe |
Stores embeddings from institutional documents used by RAG. |
Have available:
- running n8n instance;
- Redis;
- PostgreSQL with PGVector;
- Evolution API connected to WhatsApp;
- Google Calendar for reservations;
- Google Drive for RAG documents;
- Airtable with
CustomersandOrderstables; - Ollama with
nomic-embed-text:latest; - OpenAI and OpenRouter credentials configured in n8n.
In n8n:
- Go to Workflows.
- Click Import from File.
- Import the four JSON files.
- Open each workflow and assign the correct credentials.
- Save each workflow.
In the Aurora Café workflow, review:
- inbound webhook;
- Evolution API instance;
- Redis credentials;
- OpenRouter model;
- OpenAI transcription credentials;
- Google Calendar;
- Airtable base/tables;
- PGVector table;
- Google Drive input and processed folders;
- subworkflow references.
- Add institutional documents to the configured Google Drive folder.
- Run the ingestion block or wait for the trigger.
- Confirm vectors were stored in
Aurora_cafe. - Test questions such as:
- “Do you have vegan options?”
- “What are your opening hours?”
- “Are pets allowed?”
- “Do you have parking?”
| Scenario | Expected result |
|---|---|
| Simple greeting | Aurora replies warmly. |
| Menu question | Aurora queries RAG and returns existing items/prices. |
| Delivery request | Aurora says the shop currently supports pickup only. |
| Valid reservation | Aurora collects data, confirms, and creates a Google Calendar event. |
| Reservation above 8 people | Aurora transfers to a human. |
| Cancellation | Aurora requests email and calls CANCEL_RESERVATION. |
| Rescheduling | Aurora requests email and new date and calls RESCHEDULE_RESERVATION. |
| Pickup order | Aurora confirms items/value and records the order in Airtable. |
| Human request | Workflow sets mode to human and alerts an attendant. |
Aurora Café is a fictional coffee shop created for educational use, automation demonstration, and technical portfolio purposes. The project must be reviewed and sanitized before public release or production use.