A collection of n8n automation workflow examples ready to import and use. This repository serves as a reference library of practical workflows demonstrating different n8n capabilities and integrations.
π This is an n8n project!
n8n is a powerful workflow automation tool that allows you to connect different services and automate tasks without writing code. This repository contains exportable workflows that you can import directly into your n8n instance.
| # | Workflow | File | Description |
|---|---|---|---|
| 1 | Pokemon Scraper | Pokemon Scraper.json |
Fetches PokΓ©mon data from PokΓ©API and stores it in Google Sheets |
| 2 | Forms - T-Shirt | Forms - T-Shirt.json |
Manages t-shirt orders from Google Forms with inventory control (Google Sheets) |
| 3 | T-Shirts - PostgreSQL | T-Shirts - PostgreSQL.json |
Manages t-shirt orders with PostgreSQL database for inventory |
| 4 | Time Off | Time Off.json |
Employee vacation request system with HR approval via Discord (Form Trigger) |
| 5 | Time Off Webhook | Time Off Webhook.json |
Employee vacation request system with HTTP Webhook API trigger |
| 6 | Scraping - Course | Scraping - Course.json |
Web scraping with AI extraction for course data from websites |
| 7 | Google Maps - Scraping | Google Maps - Scraping.json |
Business lead generation from Google Maps using Apify |
| 8 | Wikipedia - Agent | Wikipedia - Agent.json + n8n - chatbot/ |
AI chatbot with Wikipedia search using LangChain agents |
| 9 | Personal Assistant | n8n - agents and MCP/Personal Assistant.json |
AI Assistant for Email and Calendar using MCP tools |
| 10 | MCP Servers | n8n - agents and MCP/ |
Model Context Protocol servers for Gmail and Calendar |
| 11 | Online Store Agent | n8n agents with BE/Online store agent.json |
Customer service agent connected to local backend (mi-tienda) |
| 12 | RAG Standard System | RAG standard system.json |
RAG system with in-memory vector store for document Q&A |
| 13 | RAG Standard System PostgreSQL | RAG standard system PostgreSQL.json |
RAG system with PostgreSQL PGVector for scalable document Q&A |
| 14 | Voice Agent | voice - agent/ |
Voice AI agent with ElevenLabs for customer service via phone |
| 15 | Telegram Bot | n8n-telegram-bot/ |
AI-powered Telegram bot with text, image, and voice message support |
| 16 | WhatsApp Bot | n8n-whatsapp-bot/ |
AI-powered WhatsApp bot with text, image, document, and voice message support |
- Open n8n
- Go to Workflows β Import from File
- Select the desired
.jsonfile - Click on each node showing a credential error and configure them
- Save and activate the workflow
An n8n automation workflow that extracts PokΓ©mon data from the PokΓ©API and automatically stores it in Google Sheets, sending an email summary upon completion.
This n8n workflow automates the following process:
- Read PokΓ©mon IDs from a Google Sheets document
- Filter only records that don't have complete information
- Query the PokΓ©API to fetch detailed data for each PokΓ©mon
- Extract relevant information: ID, name, type, and sprites (images)
- Update Google Sheets with the obtained data
- Send an email with a summary of processed PokΓ©mon
βββββββββββ ββββββββββββββββ ββββββββββββββ ββββββββββββββββ
β Click βββββΆβ Google Sheet βββββΆβ Filter βββββΆβ HTTP Requestβ
β (Manual)β β (Read IDs) β β (No data) β β (PokΓ©API) β
βββββββββββ ββββββββββββββββ ββββββββββββββ ββββββββββββββββ
β
βΌ
βββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Send Email ββββββ Group ββββββ Google Sheet ββββββ Set Fields β
β (Gmail) β β (Aggregate) β β (Update) β β (Extract) β
βββββββββββββββ ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
Your spreadsheet must have the following columns:
| Column | Description |
|---|---|
ID |
Numeric PokΓ©mon ID (1, 2, 3, etc.) |
Name |
PokΓ©mon name (will be auto-filled) |
Type |
Primary PokΓ©mon type (will be auto-filled) |
Sprite Front |
Front image URL (will be auto-filled) |
Sprite Back |
Back image URL (will be auto-filled) |
| Parameter | Placeholder | Description |
|---|---|---|
| Google Sheet ID | YOUR_GOOGLE_SHEET_ID |
Your Google Sheets document ID* |
| Google Sheets Credential ID | YOUR_CREDENTIAL_ID |
Your Google Sheets OAuth2 credential ID |
| Google Sheets Email | your-email@example.com |
Email associated with the credential |
| Gmail Credential ID | YOUR_GMAIL_CREDENTIAL_ID |
Your Gmail OAuth2 credential ID |
| Gmail Email | your-email@example.com |
Email associated with Gmail credential |
| Recipient Email | your-email@example.com |
Email where you'll receive the summary |
| Webhook ID | YOUR_WEBHOOK_ID |
Webhook ID (generated by n8n) |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
* The Google Sheet ID can be found in the document URL:
https://docs.google.com/spreadsheets/d/THIS_IS_THE_ID/edit
{
"id": 25,
"name": "pikachu",
"type": "electric",
"photos": {
"front": "https://raw.githubusercontent.com/.../25.png",
"back": "https://raw.githubusercontent.com/.../back/25.png"
}
}An n8n automation workflow that manages t-shirt orders from a Google Form, verifies available stock using Google Sheets, and sends email notifications.
This n8n workflow automates the following process:
- Detect new responses in a Google Form (Google Sheets Trigger)
- Read t-shirt requests from Google Sheets
- Filter unverified records
- Get current inventory of t-shirt stock from Google Sheets
- Process orders by checking availability per size
- Update responses marking orders as verified
- Update inventory reducing stock
- Send email with a summary of changes made
ββββββββββββββββββββ βββββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββ
β Google Sheets βββββΆβ Get T-Shirt βββββΆβ Filter No Data βββββΆβ Aggregate β
β Trigger β β Requests β β Entries β β Requests β
ββββββββββββββββββββ βββββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββ
β
βΌ
ββββββββββββββββββββ βββββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββ
β Update Stock ββββββ Aggregate Stock ββββββ Get Stock ββββββ β
β (Code) β β β β β β β
ββββββββββββββββββββ βββββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββ
βΌ βΌ
ββββββββββββββββββββ ββββββββββββββββ
β Verify Order β β Update Stock β
β (Google Sheets) β β (Inventory) β
ββββββββββββββββββββ ββββββββββββββββ
β β
βββββββββββββββββ¬ββββββββββββββββββββ
βΌ
ββββββββββββββββββββ ββββββββββββββββ
β Merge Branches βββββΆβ Send Email β
β β β (Gmail) β
ββββββββββββββββββββ ββββββββββββββββ
| Column | Description |
|---|---|
Timestamp |
Form submission timestamp |
Email Address |
Requester's email |
Name |
Requester's name |
Shirt size |
Requested size (S, M, L, XL, etc.) |
Aditional comments |
Additional comments |
Verified |
Verification status (TRUE/FALSE) |
Verification date |
Verification date |
| Column | Description |
|---|---|
Product |
Product name |
Size |
Size (S, M, L, XL, etc.) |
Stock |
Available quantity |
| Parameter | Placeholder | Description |
|---|---|---|
| Google Sheet Responses ID | YOUR_GOOGLE_SHEET_RESPONSES_ID |
Form responses document ID* |
| Google Sheet Stock ID | YOUR_GOOGLE_SHEET_STOCK_ID |
Inventory document ID* |
| Google Sheets Credential ID | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
Google Sheets OAuth2 credential ID |
| Google Sheets Trigger Credential ID | YOUR_GOOGLE_SHEETS_TRIGGER_CREDENTIAL_ID |
Trigger OAuth2 credential ID |
| Gmail Credential ID | YOUR_GMAIL_CREDENTIAL_ID |
Gmail OAuth2 credential ID |
your-email@example.com |
Email for credentials and recipient | |
| Webhook ID | YOUR_WEBHOOK_ID |
Webhook ID (generated by n8n) |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
* The Google Sheet ID can be found in the document URL:
https://docs.google.com/spreadsheets/d/THIS_IS_THE_ID/edit
An n8n automation workflow that manages t-shirt orders from a Google Form, verifies available stock using a PostgreSQL database, and sends email notifications. This is an alternative to the Google Sheets version, demonstrating database integration.
This n8n workflow automates the following process:
- Detect new responses in a Google Form (Google Sheets Trigger)
- Filter unverified records
- Loop over each request processing them one by one
- Query PostgreSQL to check inventory by size
- Verify stock availability and branch accordingly
- Update PostgreSQL reducing stock for successful orders
- Update Google Sheets marking orders as verified or rejected
- Send email with a summary of processed requests
ββββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββββ
β Google Sheets βββββΆβ Filter No Data βββββΆβ Loop Over New β
β Trigger β β Entries β β Requests β
ββββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββΌββββββββββββββββββββββ
β β β
βΌ βΌ β
ββββββββββββββββββββ ββββββββββββββββββββ β
β Aggregate Work β β Get Inventory β β
β β β By Size (SQL) β β
ββββββββββββββββββββ ββββββββββββββββββββ β
β β β
βΌ βΌ β
ββββββββββββββββββββ ββββββββββββββββββββ β
β Send Email β β Have Stock? β β
β (Gmail) β β (IF Condition) β β
ββββββββββββββββββββ ββββββββββββββββββββ β
β β β
βββββββββββββββ ββββββββββββ β
βΌ βΌ β
ββββββββββββββββββββ βββββββββββββββββββββ
β Subtract Stock β β Update Answers ββ
β (Set Node) β β Without Stock ββ
ββββββββββββββββββββ βββββββββββββββββββββ
β β β
βΌ β β
ββββββββββββββββββββ β β
β Update Stock DB β β β
β (PostgreSQL) β β β
ββββββββββββββββββββ β β
β β β
βΌ β β
ββββββββββββββββββββ β β
β Update Answers β β β
β (Google Sheets) β β β
ββββββββββββββββββββ β β
β β β
βΌ βΌ β
βββββββββββββββββββββββββββββββββββββββββ β
β Loop End βββββββββββββββββββββββββββββββ
ββββββββββββββββββββ
| Column | Description |
|---|---|
Timestamp |
Form submission timestamp |
Email Address |
Requester's email |
Name |
Requester's name |
Shirt size |
Requested size (S, M, L, XL, etc.) |
Aditional comments |
Additional comments |
Verified |
Verification status (TRUE/FALSE) |
Verification date |
Verification date |
CREATE TABLE inventory (
id SERIAL PRIMARY KEY,
product_name VARCHAR(255),
size VARCHAR(10),
in_stock INTEGER
);| Column | Type | Description |
|---|---|---|
id |
SERIAL | Primary key |
product_name |
VARCHAR | Product name |
size |
VARCHAR | Size (S, M, L, XL, etc.) |
in_stock |
INTEGER | Available quantity |
| Parameter | Placeholder | Description |
|---|---|---|
| Google Sheet Responses ID | YOUR_GOOGLE_SHEET_RESPONSES_ID |
Form responses document ID* |
| Google Sheets Credential ID | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
Google Sheets OAuth2 credential ID |
| Google Sheets Trigger Credential ID | YOUR_GOOGLE_SHEETS_TRIGGER_CREDENTIAL_ID |
Trigger OAuth2 credential ID |
| PostgreSQL Credential ID | YOUR_POSTGRES_CREDENTIAL_ID |
PostgreSQL credential ID |
| PostgreSQL Database Name | your-database-name |
Name for your PostgreSQL connection |
| Gmail Credential ID | YOUR_GMAIL_CREDENTIAL_ID |
Gmail OAuth2 credential ID |
your-email@example.com |
Email for credentials and recipient | |
| Webhook ID | YOUR_WEBHOOK_ID |
Webhook ID (generated by n8n) |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
* The Google Sheet ID can be found in the document URL:
https://docs.google.com/spreadsheets/d/THIS_IS_THE_ID/edit
To configure PostgreSQL in n8n, you'll need:
- Host: Your database host (e.g.,
db.neon.tech) - Database: Database name
- User: Database username
- Password: Database password
- Port: Usually
5432 - SSL: Enable if required (recommended for cloud databases)
An n8n automation workflow that manages employee vacation/time-off requests with a complete approval flow. Features a custom form, multiple validations, Discord notifications to HR, and automatic calendar event creation.
This n8n workflow automates the complete vacation request process:
- Employee submits request via n8n Form Trigger (custom styled form)
- Validate request timing (must be 7+ days in advance)
- Validate date range (end date must be after start date)
- Check available days in PostgreSQL database
- Notify HR via Discord with request details and approval link
- Wait for HR response (48-hour timeout with approval form)
- If approved: Create Google Calendar event + Update database + Send confirmation email
- If rejected: Send rejection email with reason
ββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Form Trigger βββββΆβ Get Request βββββΆβ Is It Higher Than β
β (Time Request) β β Variables β β 7 Days? β
ββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βββββββββββββββββββββββ΄ββββββββββββββββββββββ
β YES NO β
βΌ βΌ
ββββββββββββββββββββ ββββββββββββββββββββ
β Dates Ok? β β Add Error - β
β (End > Start) β β Request Time β
ββββββββββββββββββββ ββββββββββββββββββββ
β β
βββββββββββββββββ΄ββββββββββββββββ β
β YES NO β β
βΌ βΌ β
ββββββββββββββββββββ ββββββββββββββββββββ β
β Get Free Days β β Add Error - β β
β (PostgreSQL) β β Wrong Dates β β
ββββββββββββββββββββ ββββββββββββββββββββ β
β β β
βΌ β β
ββββββββββββββββββββ β β
β Have Enough β β β
β Vacations? β β β
ββββββββββββββββββββ β β
β β β
βββββββββββββ΄ββββββββββββ β β
β YES NO β β β
βΌ βΌ β β
ββββββββββββββββ ββββββββββββββββββββ β β
β Discord β β Add Error - β β β
β (Notify HR) β β Not Enough Days β β β
ββββββββββββββββ ββββββββββββββββββββ β β
β β β β
βΌ ββββββββββββββββββββ΄βββββββββββββββββββββββββββ€
ββββββββββββββββββββ β
β Wait HR Response β β
β (48 Hours Form) β β
ββββββββββββββββββββ β
β β
βΌ β
ββββββββββββββββββββ β
β Request β β
β Approved? β β
ββββββββββββββββββββ β
β β
βββββ΄ββββββββββββββββ β
β YES NO β β
βΌ βΌ β
ββββββββββββββ ββββββββββββββββ β
β Create β β Add Error - β β
β Calendar β β Rejected β β
β Event β ββββββββββββββββ β
ββββββββββββββ β β
β βΌ β
βΌ ββββββββββββββββ ββββββββββββββββββββ β
ββββββββββββββ β Send HR ββββββββββββββββββββββ Send Reject βββββββ
β Update β β Reject Email β β Message β
β Vacation β ββββββββββββββββ ββββββββββββββββββββ
β Days (DB) β
ββββββββββββββ
β
βΌ
ββββββββββββββ
β Send HR β
β Approve β
β Email β
ββββββββββββββ
| Field | Type | Required | Description |
|---|---|---|---|
Full Name |
Text | Yes | Employee's full name |
Email |
Yes | Employee's email address | |
Start date |
Date | Yes | First day of time off |
End date |
Date | Yes | Last day of time off |
Comments |
Textarea | No | Additional request comments |
CREATE TABLE days_off (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE,
vacation_days INTEGER,
sick_days INTEGER
);| Column | Type | Description |
|---|---|---|
id |
SERIAL | Primary key |
email |
VARCHAR | Employee's email (unique) |
vacation_days |
INTEGER | Available vacation days |
sick_days |
INTEGER | Available sick days |
| Parameter | Placeholder | Description |
|---|---|---|
| PostgreSQL Credential ID | YOUR_POSTGRES_CREDENTIAL_ID |
PostgreSQL credential ID |
| PostgreSQL Database Name | your-database-name |
Name for your PostgreSQL connection |
| Gmail Credential ID | YOUR_GMAIL_CREDENTIAL_ID |
Gmail OAuth2 credential ID |
| Google Calendar Credential ID | YOUR_GOOGLE_CALENDAR_CREDENTIAL_ID |
Google Calendar OAuth2 credential ID |
| Calendar Email | your-email@example.com |
Calendar to create events in |
| Form Webhook ID | YOUR_FORM_WEBHOOK_ID |
Form Trigger webhook ID |
| Discord Webhook ID | YOUR_DISCORD_WEBHOOK_ID |
Discord notification webhook ID |
| Wait Webhook ID | YOUR_WAIT_WEBHOOK_ID |
Wait node webhook ID |
| Gmail Webhook ID | YOUR_GMAIL_WEBHOOK_ID |
Gmail webhook ID |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
This workflow uses Discord webhook authentication. To set it up:
- Go to your Discord server settings
- Navigate to Integrations β Webhooks
- Create a new webhook for your HR channel
- Copy the webhook URL and configure it in the Discord node
The workflow includes these built-in validations:
- β° Request must be submitted at least 7 days before start date
- π End date must be after start date
- ποΈ Employee must have enough vacation days available
- β³ HR has 48 hours to respond before request times out
An n8n automation workflow similar to Time Off, but triggered via an HTTP Webhook API instead of a form. This version is ideal for integrating vacation requests from external systems, mobile apps, or custom frontends.
This n8n workflow provides an API endpoint for vacation requests:
- Receive POST request via HTTP Webhook with header authentication
- Validate request body using JavaScript (name, email, dates format)
- Return HTTP response (200 OK or 400 Bad Request with errors)
- Validate request timing (must be 7+ days in advance)
- Validate date range (end date must be after start date)
- Check available days in PostgreSQL database
- Notify HR via Discord with request details and approval link
- Wait for HR response (48-hour timeout via webhook callback)
- If approved: Create Google Calendar event + Update database + Send confirmation email
- If rejected: Send rejection email with reason
ββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Webhook POST βββββΆβ Validate Webhook βββββΆβ Has Necessary β
β (API Trigger) β β Data (JavaScript) β β Fields? β
ββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βββββββββββββββββββββββ΄ββββββββββββββββββββββ
β YES NO β
βΌ βΌ
ββββββββββββββββββββ ββββββββββββββββββββ
β Respond 200 OK β β Respond 400 β
β β β Bad Request β
ββββββββββββββββββββ ββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ
β Get Request β
β Variables β
ββββββββββββββββββββ
β
βΌ
(Same flow as Time Off workflow)
β
βΌ
ββββββββββββββββββββ
β Validations β β
β HR Approval β β
β Calendar + Email β
ββββββββββββββββββββ
POST /webhook/vacation/ask/form/001
| Header | Required | Description |
|---|---|---|
Authorization |
Yes | Header authentication token |
{
"Full Name": "John Doe",
"Email": "john.doe@company.com",
"Start date": "2025-01-15",
"End date": "2025-01-20",
"Comments": "Family vacation (optional)"
}{
"valid": true,
"status": 200,
"data": {
"fullName": "John Doe",
"email": "john.doe@company.com",
"startDate": "2025-01-15",
"endDate": "2025-01-20",
"comments": "Family vacation"
}
}{
"valid": false,
"status": 400,
"errors": [
"Name is required.",
"Start date needs to have a format: YYYY-MM-DD."
]
}- β
Full Name- Required, non-empty - β
Email- Required, valid email format - β
Start date- Required, format YYYY-MM-DD - β
End date- Required, format YYYY-MM-DD, must be after start date - β
Comments- Optional, max 500 characters
CREATE TABLE days_off (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE,
vacation_days INTEGER,
sick_days INTEGER
);| Parameter | Placeholder | Description |
|---|---|---|
| Header Auth Credential ID | YOUR_HEADER_AUTH_CREDENTIAL_ID |
HTTP Header authentication credential |
| PostgreSQL Credential ID | YOUR_POSTGRES_CREDENTIAL_ID |
PostgreSQL credential ID |
| PostgreSQL Database Name | your-database-name |
Name for your PostgreSQL connection |
| Gmail Credential ID | YOUR_GMAIL_CREDENTIAL_ID |
Gmail OAuth2 credential ID |
| Google Calendar Credential ID | YOUR_GOOGLE_CALENDAR_CREDENTIAL_ID |
Google Calendar OAuth2 credential ID |
| Calendar Email | your-email@example.com |
Calendar to create events in |
| HTTP Webhook ID | YOUR_HTTP_WEBHOOK_ID |
Main webhook endpoint ID |
| Form Webhook ID | YOUR_FORM_WEBHOOK_ID |
Form Trigger webhook ID (disabled) |
| Discord Webhook ID | YOUR_DISCORD_WEBHOOK_ID |
Discord notification webhook ID |
| Wait Webhook ID | YOUR_WAIT_WEBHOOK_ID |
Wait node webhook ID |
| Gmail Webhook ID | YOUR_GMAIL_WEBHOOK_ID |
Gmail webhook ID |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
- In n8n, go to Credentials β New
- Select Header Auth
- Configure:
- Name:
Header Auth Secret - Header Name: Your header name (e.g.,
X-API-Key) - Header Value: Your secret token
- Name:
| Feature | Time Off | Time Off Webhook |
|---|---|---|
| Trigger | n8n Form | HTTP POST Webhook |
| Input Validation | n8n Form validation | JavaScript validation |
| Response | Form submission page | JSON response |
| Authentication | None (public form) | Header authentication |
| HR Approval Wait | Form-based | Webhook callback |
| Use Case | Employee self-service | System integration |
An n8n automation workflow that performs web scraping with AI-powered data extraction for online courses. It scrapes course websites, uses OpenAI to extract structured information, fetches additional data from Udemy using Firecrawl, and stores everything in Google Sheets and Google Docs.
This n8n workflow automates the process of extracting course information from websites:
- Read websites list from Google Sheets (can run on schedule or manually)
- Filter websites that have valid URLs
- Fetch HTML from each website
- Convert to Markdown for easier AI processing
- Send to OpenAI (o3-mini) to extract structured course data
- Parse and aggregate the extracted information
- Update Google Sheets with course details (name, instructor, URLs, description)
- Scrape Udemy using Firecrawl for additional course details
- Create Google Doc for each course syllabus
- Use OpenAI again to format syllabus content
- Update Google Doc with formatted syllabus
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β Schedule/Manual βββββΆβ Get Websites βββββΆβ Filter Valid β
β Trigger β β (Google Sheets) β β URLs β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β OpenAI Extract ββββββ Convert to ββββββ HTTP Request β
β Course Data β β Markdown β β (Get HTML) β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β Parse JSON & βββββΆβ Split Courses βββββΆβ Update Google β
β Aggregate β β (Loop) β β Sheets β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β OpenAI Format ββββββ Create Google ββββββ Firecrawl β
β Syllabus β β Doc β β (Scrape Udemy) β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ
β Update Google βββββΆβ Update Syllabus β
β Doc Content β β URL in Sheets β
ββββββββββββββββββββ ββββββββββββββββββββ
| Column | Description |
|---|---|
Website |
URL of the website to scrape |
| Column | Description |
|---|---|
Course name |
Name of the course |
Teacher |
Instructor's name |
DevTalles |
DevTalles course URL |
Udemy |
Udemy course URL |
Description |
Course description |
GoogleDocs - Syllabus |
Link to generated syllabus document |
{
"courseName": "Course Title",
"instructor": "Instructor Name",
"devtallesUrl": "https://devtalles.com/...",
"udemyUrl": "https://udemy.com/...",
"description": "Course description...",
"category": "Programming",
"additionalInformation": "Extra details..."
}| Parameter | Placeholder | Description |
|---|---|---|
| Google Sheet ID | YOUR_GOOGLE_SHEET_ID |
Google Sheets document ID* |
| Google Sheets Credential ID | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
Google Sheets OAuth2 credential ID |
| OpenAI Credential ID | YOUR_OPENAI_CREDENTIAL_ID |
OpenAI API credential ID |
| Firecrawl Credential ID | YOUR_FIRECRAWL_CREDENTIAL_ID |
Firecrawl API credential ID |
| Firecrawl API Key | YOUR_FIRECRAWL_API_KEY |
Firecrawl API key (for HTTP requests) |
| Google Docs Credential ID | YOUR_GOOGLE_DOCS_CREDENTIAL_ID |
Google Docs OAuth2 credential ID |
| Google Drive Folder ID | YOUR_GOOGLE_DRIVE_FOLDER_ID |
Folder ID for created documents |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
* The Google Sheet ID can be found in the document URL:
https://docs.google.com/spreadsheets/d/THIS_IS_THE_ID/edit
This workflow uses the o3-mini model for:
- Extracting structured course data from scraped content
- Formatting syllabus content for Google Docs
Configure in n8n:
- Go to Credentials β New
- Select OpenAI
- Add your OpenAI API key
Firecrawl is used to scrape Udemy pages (which have anti-scraping protection):
- Sign up at firecrawl.dev
- Get your API key
- Configure in n8n Credentials
The workflow creates Google Docs for each course syllabus. Configure:
- Create a folder in Google Drive
- Get the folder ID from the URL:
https://drive.google.com/drive/folders/FOLDER_ID - Update the
folderIdparameter
- π Scheduled execution - Can run automatically on a schedule
- π Manual trigger - Also supports manual execution
- π€ AI-powered extraction - Uses OpenAI for intelligent data extraction
- π‘οΈ Anti-scraping bypass - Firecrawl handles protected sites like Udemy
- π Document generation - Automatically creates formatted Google Docs
An n8n automation workflow that scrapes Google Maps for business leads using Apify, extracts contact information from business websites using Firecrawl, and stores all data in Google Sheets. Perfect for lead generation and market research.
This n8n workflow automates business lead generation from Google Maps:
- Read search queries from Google Sheets (Query + Location)
- Start Apify scraping job using the Google Places Crawler
- Wait for job completion with polling loop
- Check scraping status until SUCCEEDED
- Fetch scraped results from Apify dataset
- Save business data to Google Sheets (title, category, address, phone, website)
- Filter businesses that have websites
- Scrape websites using Firecrawl for contact information
- Extract contact details (emails, social media, etc.)
- Save contact information to Google Sheets
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
β Schedule/Manual βββββΆβ Read Pending βββββΆβ Start Apify β
β Trigger β β Queries β β Scraping Job β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
β Check Scraping ββββββ Wait for Job ββββββ β
β Status β β to Succeed β β β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ NO
β Loop Until βββββββββββββββββββ
β Complete? β β
ββββββββββββββββββββ β
β YES β
βΌ β
ββββββββββββββββββββ β
β Fetch Scraped βββββββββββββββββββ
β Results β
ββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
β Save Business βββββΆβ Filter BusinessesβββββΆβ Batch Processing β
β Data β β with Websites β β Logic β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
β Save Contact ββββββ Extract Contact ββββββ Firecrawl Scrape β
β Details β β Information β β Website β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββ
| Column | Description |
|---|---|
Query |
Search term (e.g., "restaurants", "dentists") |
Location |
Geographic location (e.g., "New York, NY") |
| Column | Description |
|---|---|
searchString |
Original search query + location |
title |
Business name |
categoryName |
Business category |
address |
Full address |
phone |
Phone number |
website |
Business website URL |
status |
Scraping job status |
| Column | Description |
|---|---|
business_name |
Business name |
email |
Extracted email address |
social_media |
Social media links |
additional_contacts |
Other contact information |
| Parameter | Placeholder | Description |
|---|---|---|
| Google Sheet ID | YOUR_GOOGLE_SHEET_ID |
Google Sheets document ID* |
| Google Sheets Credential ID | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
Google Sheets OAuth2 credential ID |
| Apify Credential ID | YOUR_APIFY_CREDENTIAL_ID |
Apify Bearer Auth credential ID |
| Firecrawl Credential ID | YOUR_FIRECRAWL_CREDENTIAL_ID |
Firecrawl Bearer Auth credential ID |
| Webhook ID | YOUR_WEBHOOK_ID |
Wait node webhook ID |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
* The Google Sheet ID can be found in the document URL:
https://docs.google.com/spreadsheets/d/THIS_IS_THE_ID/edit
Apify is used to scrape Google Maps:
- Sign up at apify.com
- Get your API token from Settings β Integrations
- Create a Bearer Auth credential in n8n with your token
- The workflow uses the
compass~crawler-google-placesactor
Firecrawl is used to scrape business websites:
- Sign up at firecrawl.dev
- Get your API key
- Create a Bearer Auth credential in n8n
The workflow uses these Apify settings:
- Actor:
compass~crawler-google-places - Max places per search: 15
- Language: English
- Max images: 0 (disabled for speed)
- π Scheduled execution - Runs every 30 minutes by default
- π Polling mechanism - Waits for Apify job to complete
- π Location-based search - Search businesses by query and location
- π Website scraping - Extracts contact info from business websites
- π Multi-sheet storage - Organizes data across multiple sheets
An n8n AI Agent workflow that creates an intelligent chatbot assistant named Miranda that can search and retrieve information from Wikipedia. The workflow includes a standalone HTML chat interface for easy deployment.
This n8n workflow creates an AI-powered chatbot with:
- Chat Trigger - Receives messages via webhook (public endpoint)
- AI Agent - LangChain-based agent that processes queries
- Language Model - Supports multiple LLM providers:
- OpenAI (o3-mini)
- Google Gemini
- Ollama (local LLM)
- Simple Memory - Buffer window memory (10 messages context)
- Wikipedia Tool - Searches and retrieves Wikipedia articles
The assistant "Miranda" responds with concise information (2 paragraphs max) and includes article references as links.
ββββββββββββββββββββββ ββββββββββββββββββββββ
β Chat Trigger βββββΆβ AI Agent β
β (Webhook) β β (LangChain) β
ββββββββββββββββββββββ ββββββββββββββββββββββ
β
ββββββββββββββββΌβββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β OpenAI β β Gemini β β Ollama β
β o3-mini β β β β gpt-oss β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β β β
ββββββββββββββββΌβββββββββββββββ
βΌ
ββββββββββββββββββββββββββββββ
β Simple Memory β
β (10 message context) β
ββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββ
β Wikipedia Tool β
β (Search & Retrieve) β
ββββββββββββββββββββββββββββββ
n8n_processes/
βββ Wikipedia - Agent.json # n8n workflow definition
βββ n8n - chatbot/
βββ index.html # Standalone chat UI
A beautiful, pastel-themed chat interface built with the official n8n Chat widget:
- Color Scheme: Soft blue pastel theme
- Responsive: Adjustable chat window (400x600px default)
- Initial Messages: Greeting from Miranda
- Custom CSS Variables: Fully customizable styling
- Open the
index.htmlfile in a browser - Ensure the n8n workflow is active and running
- Update the
webhookUrlif your n8n instance is not onlocalhost:5678
| Parameter | Placeholder | Description |
|---|---|---|
| Chat Webhook ID | YOUR_CHAT_WEBHOOK_ID |
Chat trigger webhook ID |
| OpenAI Credential ID | YOUR_OPENAI_CREDENTIAL_ID |
OpenAI API credential |
| Google Gemini Credential ID | YOUR_GOOGLE_GEMINI_CREDENTIAL_ID |
Google AI API credential |
| Ollama Credential ID | YOUR_OLLAMA_CREDENTIAL_ID |
Ollama local API credential |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
The workflow supports three LLM providers (choose one):
| Provider | Model | Credential Type | Notes |
|---|---|---|---|
| OpenAI | o3-mini | OpenAI API | Cloud-based, requires API key |
| Google Gemini | Default | Google PaLM API | Cloud-based, requires API key |
| Ollama | gpt-oss:latest | Ollama API | Local, requires Ollama server |
Update the webhook URL in index.html:
createChat({
webhookUrl: "http://localhost:5678/webhook/YOUR_CHAT_WEBHOOK_ID/chat",
// ...
});The AI agent (Miranda) uses this system prompt:
## Objective
You are a kind assistant, your name is Miranda, you help to look up
for information in Wikipedia.
## Rules
- Always return responses in two paragraphs or less.
- Always specify the references of the articles that you search as a link.
## Tools
- You have a tool to connect to wikipedia and get information,
you can use to confirm information.
- π§ Multi-LLM support - Switch between OpenAI, Gemini, or local Ollama
- π¬ Conversational memory - Remembers last 10 messages
- π Wikipedia integration - Real-time article search
- π Reference links - Provides source links for information
- π¨ Custom chat UI - Beautiful standalone HTML interface
- π Public endpoint - Accessible webhook for integrations
An n8n AI Agent workflow that acts as a personal assistant to manage your Gmail and Google Calendar. It supports multiple LLMs and uses MCP (Model Context Protocol) to access external tools, keeping the agent logic clean and modular.
The Personal Assistant "Miranda" is designed to be a helpful productivity partner. Instead of having all tools hardcoded, it connects to MCP Servers to perform actions.
- π§ Email Management:
- Read recent emails
- Draft new emails (HTML format)
- Send emails (after confirmation)
- π
Calendar Management:
- List upcoming events
- Check for conflicts
- Schedule new meetings
- π Information Retrieval:
- Pokemon Finder: A dedicated sub-workflow tool to retrieve Pokemon data (demonstrating tool modularity).
- π§ Intelligent Context:
- Maintains a short-term memory of the conversation.
- Knows the current date and time to schedule events accurately.
ββββββββββββββββββββββ ββββββββββββββββββββββ
β Chat Trigger βββββΆβ AI Agent β
β (Webhook) β β (LangChain) β
ββββββββββββββββββββββ ββββββββββββββββββββββ
β
ββββββββββββββββΌβββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β OpenAI β β Gemini β β Ollama β
β o3-mini β β β β gpt-oss β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β
βββββββββββββββββββββββββββΌββββββββββββββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β MCP Client β β MCP Client β β Tool Workflow β
β (Gmail) β β (Calendar) β β (Pokemon) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β
βΌ βΌ
(Connects to) (Connects to)
Gmail MCP Server Calendar MCP Server
| Parameter | Placeholder | Description |
|---|---|---|
| Chat Webhook ID | YOUR_CHAT_WEBHOOK_ID |
Chat trigger webhook ID |
| Pokemon Tool Workflow ID | YOUR_POKEMON_TOOL_WORKFLOW_ID |
ID of the Pokemon finder tool workflow |
| MCP Gmail Webhook | YOUR_MCP_GMAIL_WEBHOOK_ID |
URL part for MCP Gmail Server |
| MCP Calendar Webhook | YOUR_MCP_CALENDAR_WEBHOOK_ID |
URL part for MCP Calendar Server |
| OpenAI / Gemini / Ollama | - | Your preferred LLM credential |
Note: This workflow acts as the Client. It does not need direct Google credentials because it asks the MCP Servers to handle the authentication and execution.
Workflows that act as Model Context Protocol (MCP) servers. These are "headless" workflows that expose tools to other agents (like the Personal Assistant or Claude Desktop).
Exposes Gmail capabilities over MCP.
send_email: Sends an email.create_draft: Creates a draft email.get_emails: Retrieves recent emails.
ββββββββββββββββββββββ ββββββββββββββββββββββ
β MCP Trigger βββββ¬ββΆβ Gmail Tool β
β (Webhook) β β β (Send Email) β
ββββββββββββββββββββββ β ββββββββββββββββββββββ
β
βββΆββββββββββββββββββββββ
β β Gmail Tool β
β β (Create Draft) β
β ββββββββββββββββββββββ
β
βββΆββββββββββββββββββββββ
β Gmail Tool β
β (Get Emails) β
ββββββββββββββββββββββ
Exposes Google Calendar capabilities over MCP.
get_calendar_events: Lists events within a time range.create_calendar_event: Creates a new event.
ββββββββββββββββββββββ ββββββββββββββββββββββ
β MCP Trigger βββββ¬ββΆβ Google Calendar β
β (Webhook) β β β (Get Events) β
ββββββββββββββββββββββ β ββββββββββββββββββββββ
β
βββΆββββββββββββββββββββββ
β Google Calendar β
β (Create Event) β
ββββββββββββββββββββββ
These workflows DO require direct access to Google APIs.
| Parameter | Placeholder | Description |
|---|---|---|
| MCP Gmail Webhook ID | YOUR_MCP_GMAIL_WEBHOOK_ID |
Trigger ID for Gmail MCP |
| MCP Calendar Webhook ID | YOUR_MCP_CALENDAR_WEBHOOK_ID |
Trigger ID for Calendar MCP |
| Gmail Credential | YOUR_GMAIL_CREDENTIAL_ID |
Gmail OAuth2 |
| Calendar Credential | YOUR_GOOGLE_CALENDAR_CREDENTIAL_ID |
Google Calendar OAuth2 |
| Calendar ID | YOUR_CALENDAR_ID |
Calendar email address |
You can also use these MCP servers with Claude Desktop! Use the provided claude_desktop_config.json file found in the n8n - agents and MCP/ directory.
{
"mcpServers": {
"n8n-google-calendar": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:5678/mcp/YOUR_MCP_CALENDAR_WEBHOOK_ID"
]
},
"n8n-google-gmail": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:5678/mcp/YOUR_MCP_GMAIL_WEBHOOK_ID"
]
}
}
}An n8n AI Agent workflow that acts as a customer service representative for an online store. It connects to a local backend API (mi-tienda) to query order status and update delivery addresses.
This agent helps customers with their orders using a conversational interface.
- π¦ Order Status: Look up order details using Name and Order ID.
- π Update Address: Change the delivery address for an order (requires validation).
- π§ Escalate to Support: Send email summaries to support if the issue cannot be resolved.
This workflow requires the local backend to be running.
- Located in
n8n agents with BE/mi-tienda - Run with:
npm install && npm start - It uses
json-serverto mock a REST API on port 3000, using the provideddb.jsonfile as the database.
ββββββββββββββββββββββ ββββββββββββββββββββββ
β Chat Trigger βββββΆβ AI Agent β
β (Webhook) β β (LangChain) β
ββββββββββββββββββββββ ββββββββββββββββββββββ
β
ββββββββββββββββΌβββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Google β β Memory β β Tools β
β Gemini β β β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β
βββββββββββββββ΄ββββββββββββββ
βΌ βΌ
ββββββββββββββββββββ ββββββββββββββββββββ
β HTTP Requests β β Gmail Tool β
β (Local Backend) β β (Send Email) β
ββββββββββββββββββββ ββββββββββββββββββββ
| Parameter | Placeholder | Description |
|---|---|---|
| Chat Webhook ID | YOUR_CHAT_WEBHOOK_ID |
Chat trigger webhook ID |
| Google Gemini Credential | YOUR_GOOGLE_GEMINI_CREDENTIAL_ID |
Google Gemini API Key |
| Gmail Credential | YOUR_GMAIL_CREDENTIAL_ID |
Gmail OAuth2 |
| Gmail Webhook ID | YOUR_GMAIL_WEBHOOK_ID |
Webhook ID for Gmail tool (if applicable) |
An n8n RAG (Retrieval-Augmented Generation) workflow that enables document-based Q&A using an in-memory vector store. Perfect for legal document consultation, knowledge bases, or any scenario where you need to query uploaded documents.
This workflow implements a complete RAG system with two main components:
-
Document Ingestion:
- Upload PDF documents via n8n Form
- Extract text using Default Data Loader
- Split text into chunks (Recursive Character Text Splitter)
- Generate embeddings using OpenAI (text-embedding-3-large)
- Store vectors in in-memory vector store
-
Document Query:
- Chat interface for asking questions
- Semantic search in vector store
- AI Agent (gpt-4.1-mini) generates answers based on retrieved context
- Maintains conversation memory (10 messages)
The system is configured as a Legal Assistant that helps lawyers consult internal legal documents with professional, accurate responses.
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Form Submission βββββΆβ Default Data βββββΆβ Recursive Text β
β (Upload PDF) β β Loader β β Splitter β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Simple Vector ββββββ Embeddings ββββββ β
β Store (Insert) β β OpenAI β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Chat Trigger βββββΆβ AI Agent βββββΆβ Simple Vector β
β (Query) β β (LangChain) β β Store (Retrieve) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
ββββββββββββββββΌβββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β OpenAI β β Simple β β Vector β
β Chat Model β β Memory β β Store Tool β
β (gpt-4.1) β β (10 msgs) β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
| Parameter | Placeholder | Description |
|---|---|---|
| Form Webhook ID | YOUR_FORM_WEBHOOK_ID |
Form trigger webhook ID |
| Chat Webhook ID | YOUR_CHAT_WEBHOOK_ID |
Chat trigger webhook ID |
| OpenAI Credential ID | YOUR_OPENAI_CREDENTIAL_ID |
OpenAI API credential |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
The workflow uses:
- Embeddings Model:
text-embedding-3-large(for vector generation) - Chat Model:
gpt-4.1-mini(for answer generation)
- Storage: In-memory (Simple Vector Store)
- Memory Key:
vector_store_key - Embedding Batch Size: 250
- Chunk Overlap: 250 characters
The AI agent is configured as a Legal Assistant with this system prompt:
# Rol: Asistente Legal
## DescripciΓ³n
Eres un asistente legal diseΓ±ado para ayudar a un abogado a consultar
informaciΓ³n contenida en documentos legales internos. Debes recuperar,
analizar y entregar respuestas precisas, claras y fundamentadas basadas
ΓΊnicamente en los documentos disponibles.
## Reglas
- Respuestas cortas y puntuales
- Incluir referencia del documento utilizado
- Si no conoces la respuesta, indicar que no dispones de la informaciΓ³n
- Mantener tono profesional y formal
- π PDF Document Support - Upload and process PDF files
- π Semantic Search - Vector-based similarity search
- π¬ Conversational Interface - Chat-based Q&A
- π§ Context Memory - Remembers last 10 messages
- π Document References - Includes source document citations
- β‘ In-Memory Storage - Fast retrieval (suitable for small to medium document sets)
An n8n RAG workflow that uses PostgreSQL with PGVector extension for scalable, persistent vector storage. Supports automatic document ingestion from Google Drive and advanced document management features.
This workflow extends the basic RAG system with enterprise-grade features:
-
Document Ingestion (Multiple Methods):
- Form Upload: Upload PDFs via n8n Form
- Google Drive Integration: Automatic ingestion from Google Drive folder
- Scheduled Sync: Periodic sync with Google Drive folder
- Manual Trigger: On-demand document processing
-
Smart Document Management:
- Duplicate Detection: Checks MD5 checksum to avoid re-processing
- Version Control: Tracks file modifications
- Incremental Updates: Only processes new or changed files
- Vector Cleanup: Removes old vectors when files are updated
-
PostgreSQL PGVector Storage:
- Persistent vector storage
- Scalable to large document collections
- Metadata tracking (file_id, name, mime_type, etc.)
- Ingestion history table (
ingested_files)
-
Query Interface:
- Chat-based Q&A interface
- Semantic search using PGVector
- AI Agent generates contextual answers
- Conversation memory
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Trigger βββββΆβ Search Files/ βββββΆβ Is it a file? β
β (Manual/Schedule/ β β Folders β β β
β Google Drive) β ββββββββββββββββββββββ ββββββββββββββββββββββ
ββββββββββββββββββββββ β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Get Previous βββββΆβ Was it charged βββββΆβ Get Variables β
β Upload β β before? β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β β β
β NO β YES β
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β No Operation β β Delete References βββββΆβ Insert Document β
β β β (Old Vectors) β β (Metadata) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Download File βββββΆβ Default Data βββββΆβ Recursive Text β
β (Google Drive) β β Loader β β Splitter β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Postgres PGVector ββββββ Embeddings β β β
β Store (Insert) β β OpenAI β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ
β Update Vectors β
β file_id β
ββββββββββββββββββββββ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Chat Trigger βββββΆβ AI Agent βββββΆβ Answer Questions β
β (Query) β β (LangChain) β β with Vector Store β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β β
ββββββββββββββββΌβββββββββββββββ β
βΌ βΌ βΌ β
βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β OpenAI β β Simple β β β β
β Chat Model β β Memory β β β β
β (gpt-4.1) β β (10 msgs) β β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β
βΌ
ββββββββββββββββββββββ
β Postgres PGVector β
β Store (Retrieve) β
ββββββββββββββββββββββ
Created automatically by PGVector extension. Stores document chunks as vectors.
| Column | Type | Description |
|---|---|---|
id |
UUID | Primary key |
content |
TEXT | Document chunk text |
embedding |
VECTOR(1536) | OpenAI embedding vector |
metadata |
JSONB | Additional metadata |
file_id |
TEXT | Google Drive file ID (nullable) |
Tracks which files have been processed.
CREATE TABLE ingested_files (
file_id VARCHAR PRIMARY KEY,
name VARCHAR,
mime_type VARCHAR,
md5_checksum VARCHAR,
modified_time TIMESTAMP,
last_ingested TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);| Parameter | Placeholder | Description |
|---|---|---|
| Form Webhook ID | YOUR_FORM_WEBHOOK_ID |
Form trigger webhook ID |
| Chat Webhook ID | YOUR_CHAT_WEBHOOK_ID |
Chat trigger webhook ID |
| OpenAI Credential ID | YOUR_OPENAI_CREDENTIAL_ID |
OpenAI API credential |
| PostgreSQL Credential ID | YOUR_POSTGRES_CREDENTIAL_ID |
PostgreSQL credential ID |
| PostgreSQL Database Name | your-database-name |
Name for your PostgreSQL connection |
| Google Drive Credential ID | YOUR_GOOGLE_DRIVE_CREDENTIAL_ID |
Google Drive OAuth2 credential ID |
| Google Drive Folder ID | YOUR_GOOGLE_DRIVE_FOLDER_ID |
Google Drive folder ID for documents |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
-
Install PGVector Extension:
CREATE EXTENSION IF NOT EXISTS vector;
-
Create Tracking Table:
CREATE TABLE ingested_files ( file_id VARCHAR PRIMARY KEY, name VARCHAR, mime_type VARCHAR, md5_checksum VARCHAR, modified_time TIMESTAMP, last_ingested TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
Configure Connection:
- Use a PostgreSQL database with PGVector extension
- Recommended: Neon, Supabase, or self-hosted PostgreSQL
- Create a folder in Google Drive for your documents
- Get the folder ID from the URL:
https://drive.google.com/drive/folders/FOLDER_ID - Configure the folder ID in the workflow nodes
- ποΈ Persistent Storage - PostgreSQL with PGVector for scalable storage
- π Auto-Sync - Automatic document ingestion from Google Drive
- π Duplicate Detection - MD5 checksum prevents re-processing
- π Version Control - Tracks file modifications
- π Incremental Updates - Only processes new/changed files
- π§Ή Vector Cleanup - Removes old vectors when files are updated
- π Metadata Tracking - Comprehensive document metadata
- π¬ Chat Interface - Conversational Q&A
- π§ Memory - Maintains conversation context
| Feature | RAG Standard System | RAG Standard System PostgreSQL |
|---|---|---|
| Storage | In-memory | PostgreSQL PGVector |
| Scalability | Small to medium | Large document collections |
| Persistence | No (lost on restart) | Yes (persistent) |
| Google Drive Integration | No | Yes |
| Duplicate Detection | No | Yes (MD5 checksum) |
| Version Control | No | Yes |
| Use Case | Quick prototypes | Production systems |
An n8n voice AI agent workflow that enables phone-based customer service using ElevenLabs Conversational AI. The agent can query product information and order details from a local backend API, providing a complete voice assistant solution for e-commerce.
This workflow creates a voice-powered customer service agent that:
- Voice Interface: Uses ElevenLabs Conversational AI widget for phone-based interactions
- Product Queries: Retrieves product information from local backend
- Order Lookup: Fetches order details by order ID
- Error Handling: Validates requests and provides appropriate error responses
- Backend Integration: Connects to local
mi-tiendabackend API
The agent is designed to handle customer inquiries via voice, making it perfect for phone support, IVR systems, or voice-enabled customer service.
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β ElevenLabs βββββΆβ Webhook - Get βββββΆβ Get products β
β Voice Agent β β products β β (HTTP Request) β
β (Phone Call) β β β ββββββββββββββββββββββ
ββββββββββββββββββββββ ββββββββββββββββββββββ β
β β
β βΌ
β ββββββββββββββββββββββ
β β Response with β
β β products β
β ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Webhook - Get βββββΆβ OrderId exists βββββΆβ Get order by Id β
β order by id β β in body? β β (HTTP Request) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β β
ββββββββββββββββ΄βββββββββββββββ β
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ
β Response bad β β The order was β
β request (400) β β found? β
ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ
β Response with β β Response not β
β the order (200) β β found (404) β
ββββββββββββββββββββββ ββββββββββββββββββββββ
voice - agent/
βββ Tool - Get products.json # n8n workflow with product/order endpoints
βββ index-agent.html # ElevenLabs voice agent widget interface
βββ mi-tienda/ # Local backend API
βββ db.json # JSON database
βββ package.json # Node.js dependencies
βββ README.md # Backend documentation
The workflow exposes two webhook endpoints:
- Path:
my-store/products - Method:
GET - Authentication: Header Auth (ElevenLabs API key)
- Response: List of all products from backend
- Path:
my-store/orders - Method:
POST - Authentication: Header Auth (ElevenLabs API key)
- Request Body:
{ "orderId": "123" } - Response: Order details or error message
| Parameter | Placeholder | Description |
|---|---|---|
| Webhook ID | YOUR_WEBHOOK_ID |
Webhook ID for both endpoints |
| Header Auth Credential ID | YOUR_HEADER_AUTH_CREDENTIAL_ID |
HTTP Header Auth credential |
| ElevenLabs Agent ID | YOUR_ELEVENLABS_AGENT_ID |
ElevenLabs Conversational AI agent ID |
| Backend URL | http://localhost:3000 |
Local backend API URL |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
-
Create an ElevenLabs Account:
- Sign up at elevenlabs.io
- Navigate to Conversational AI section
-
Create a Conversational AI Agent:
- Create a new agent
- Configure the agent to use your n8n webhook endpoints
- Copy the Agent ID
-
Configure Header Authentication:
- In n8n, create a Header Auth credential
- Use your ElevenLabs API key as the header value
- Header name:
xi-api-key(or as required by ElevenLabs)
-
Update HTML Interface:
- Open
index-agent.html - Replace
YOUR_ELEVENLABS_AGENT_IDwith your actual agent ID
- Open
The workflow requires the local backend to be running:
- Navigate to
voice - agent/mi-tienda/ - Install dependencies:
npm install
- Start the server:
npm start
- The backend runs on
http://localhost:3000by default
The backend uses json-server to mock a REST API with the provided db.json file.
Both endpoints use the same webhook ID but different paths:
my-store/productsβ Get all productsmy-store/ordersβ Get order by ID
Ensure the webhook is configured with Header Authentication using your ElevenLabs API key.
The HTML file provides a simple interface for the ElevenLabs voice agent widget:
<elevenlabs-convai agent-id="YOUR_ELEVENLABS_AGENT_ID">
</elevenlabs-convai>- π Phone-based interaction - Customers can call and speak with the agent
- ποΈ Product queries - Retrieve product information via voice
- π¦ Order lookup - Find order details by order ID
- β Input validation - Validates order ID presence
- β Error handling - Returns appropriate error messages (400, 404)
- π Secure authentication - Header Auth for API security
- π Backend integration - Connects to local Node.js backend
- Phone Support: Handle customer service calls automatically
- IVR Systems: Interactive Voice Response for order inquiries
- Voice Commerce: Voice-enabled shopping assistance
- Order Tracking: Voice-based order status queries
An n8n AI-powered Telegram bot that provides intelligent conversational assistance with support for text messages, image analysis, and voice messages. The bot uses OpenAI for natural language understanding and can respond with text or voice.
This workflow creates a comprehensive Telegram bot that:
-
Text Messages:
- Responds to
/startcommand with a welcome sticker from Giphy - Processes general knowledge questions using AI Agent
- Maintains conversation context per chat (10 messages memory)
- Responds to
-
Image Messages:
- Downloads and analyzes images using OpenAI Vision (GPT-4o)
- Extracts information from images
- Responds with AI-generated insights about the image
-
Voice Messages:
- Transcribes voice messages using OpenAI Whisper
- Processes transcribed text with AI Agent
- Responds with text or converts response to speech using ElevenLabs
The bot is designed as a general knowledge assistant that helps users with questions and can understand context from images and voice messages.
ββββββββββββββββββββββ
β Telegram Trigger β
β (Message Received) β
ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ
β What kind of β
β message is it? β
β (Switch) β
ββββββββββββββββββββββ
β β β β
β β β βββββΆ Voice Message
β β β
β β ββββββββββΆ Image Message
β β
β βββββββββββββββΆ Text Message
β
ββββββββββββββββββββΆ /start Command
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Get Sticker βββββΆβ Download Sticker βββββΆβ Send Sticker β
β (Giphy API) β β β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
Text Message Flow:
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Writing βββββΆβ Message Fields βββββΆβ Unify Information β
β (Chat Action) β β β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β AI Agent βββββΆβ Is it audio? βββββΆβ Send Text Message β
β (LangChain) β β β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β β
β β YES
β βΌ
β ββββββββββββββββββββββ ββββββββββββββββββββββ
β β Convert Text to βββββΆβ Send Audio File β
β β Speech (ElevenLabs)β β β
β ββββββββββββββββββββββ ββββββββββββββββββββββ
Image Message Flow:
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Select Higher βββββΆβ Download Image βββββΆβ Analyze Image β
β Resolution Image β β β β (OpenAI Vision) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Image Data βββββΆβ Unify Information βββββΆβ AI Agent β
β β β β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
Voice Message Flow:
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Recording Audio βββββΆβ Download Audio βββββΆβ Transcribe Audio β
β (Chat Action) β β β β (OpenAI Whisper) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Audio Data βββββΆβ Unify Information βββββΆβ AI Agent β
β β β β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
n8n-telegram-bot/
βββ Telegram bot.json # Main n8n workflow
βββ docker-n8n/
βββ compose.yaml # Docker Compose configuration
βββ local-files/ # Local file storage
| Parameter | Placeholder | Description |
|---|---|---|
| Telegram Credential ID | YOUR_TELEGRAM_CREDENTIAL_ID |
Telegram Bot API token |
| Telegram Webhook ID | YOUR_TELEGRAM_WEBHOOK_ID |
Telegram trigger webhook ID |
| OpenAI Credential ID | YOUR_OPENAI_CREDENTIAL_ID |
OpenAI API credential |
| ElevenLabs Credential ID | YOUR_ELEVENLABS_CREDENTIAL_ID |
ElevenLabs API credential |
| ElevenLabs Voice ID | YOUR_ELEVENLABS_VOICE_ID |
ElevenLabs voice ID for TTS |
| Giphy API Key | YOUR_GIPHY_API_KEY |
Giphy API key for stickers |
| Webhook IDs | YOUR_WEBHOOK_ID_1 to _6 |
Various webhook IDs for nodes |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
-
Create a Telegram Bot:
- Talk to @BotFather on Telegram
- Use
/newbotcommand to create a new bot - Copy the bot token
-
Configure in n8n:
- Go to Credentials β New
- Select Telegram
- Enter your bot token
- Save the credential ID
-
Set Webhook:
- The Telegram trigger node will automatically set up the webhook
- Ensure your n8n instance is publicly accessible (or use ngrok for local development)
The workflow uses OpenAI for:
- Chat Model:
gpt-4.1-mini(for text responses) - Vision Model:
chatgpt-4o-latest(for image analysis) - Whisper: Audio transcription
-
Get API Key:
- Sign up at elevenlabs.io
- Get your API key from the dashboard
-
Get Voice ID:
- Navigate to Voice Library
- Select a voice (e.g., "SofΓa - Natural and Conversational")
- Copy the Voice ID
-
Configure in n8n:
- Create ElevenLabs credential with your API key
- Update the voice ID in the "Convert text to speech" node
-
Get API Key:
- Sign up at developers.giphy.com
- Create an app and get your API key
-
Update Workflow:
- Replace
YOUR_GIPHY_API_KEYin the "Get Sticker" node
- Replace
The docker-n8n/compose.yaml file provides a production-ready setup with:
- Traefik reverse proxy
- SSL/TLS certificates via Let's Encrypt
- n8n with persistent storage
To deploy:
-
Create a
.envfile:SUBDOMAIN=n8n DOMAIN_NAME=yourdomain.com SSL_EMAIL=your-email@example.com GENERIC_TIMEZONE=America/New_York
-
Start services:
docker-compose up -d
-
/startCommand:- Sends a welcome sticker from Giphy
- Tag: "hola"
-
Text Messages:
- General knowledge questions
- Conversational responses
- Context-aware (remembers last 10 messages per chat)
-
Image Messages:
- Automatic image analysis
- Extracts information from images
- Can use image caption if provided
- Responds with AI-generated insights
-
Voice Messages:
- Automatic transcription
- Processes as text message
- Can respond with text or voice (ElevenLabs TTS)
The bot is configured as a general knowledge assistant:
## DescripciΓ³n
- Eres un asistente que ayuda a las personas con problemas de cultura general
- Tus respuestas deben de ser muy cortas, 1 o 2 lineas mΓ‘ximo
- A veces recibirΓ‘s textos de imΓ‘genes previamente analizadas por otro AI,
la respuesta no ha sido enviada al usuario, tu labor serΓa enviarle
ese mensaje al usuario.
## Tools
"send_telegram" te permite enviar mensajes de telegram
- π¬ Multi-modal Support - Text, image, and voice messages
- π§ AI-Powered - OpenAI GPT-4.1-mini for intelligent responses
- ποΈ Image Analysis - GPT-4o Vision for image understanding
- π€ Voice Transcription - OpenAI Whisper for voice-to-text
- π Text-to-Speech - ElevenLabs for voice responses
- π Sticker Support - Giphy integration for fun interactions
- πΎ Conversation Memory - Maintains context per chat (10 messages)
- π Chat Actions - Shows "typing" and "recording audio" indicators
- Customer Support Bot: Answer questions and provide assistance
- Educational Assistant: Help with general knowledge questions
- Image Analysis Bot: Describe and analyze images
- Voice Assistant: Voice-based interactions via Telegram
- Entertainment Bot: Fun interactions with stickers and AI responses
An n8n AI-powered WhatsApp bot that provides intelligent conversational assistance with support for text messages, image analysis, document processing, and voice messages. The bot uses OpenAI for natural language understanding and can respond with text or audio.
This workflow creates a comprehensive WhatsApp bot that:
-
Text Messages:
- Processes general knowledge questions using AI Agent
- Maintains conversation context per user (10 messages memory)
- Responds with intelligent text answers
-
Image Messages:
- Downloads images from WhatsApp
- Analyzes images using OpenAI Vision (GPT-4o)
- Extracts information from images
- Responds with AI-generated insights about the image
-
Image Documents:
- Handles image files sent as documents
- Analyzes document images using OpenAI Vision
- Processes captions if provided
-
Voice Messages:
- Downloads and transcribes voice messages using OpenAI Whisper
- Processes transcribed text with AI Agent
- Can respond with text or convert response to audio using OpenAI TTS
The bot is designed as a general knowledge assistant that helps users with questions and can understand context from images, documents, and voice messages.
ββββββββββββββββββββββ
β WhatsApp Trigger β
β (Message Received) β
ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ
β What type of β
β message is it? β
β (Switch) β
ββββββββββββββββββββββ
β β β β
β β β βββββΆ Audio Message
β β β
β β ββββββββββΆ Image Document
β β
β βββββββββββββββΆ Image Message
β
ββββββββββββββββββββΆ Text Message
Text Message Flow:
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Get Person Info βββββΆβ Get and Unify βββββΆβ AI Agent β
β β β Data β β (LangChain) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β β
ββββββββββββββββΌβββββββββββββββ β
βΌ βΌ βΌ β
βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β OpenAI β β Simple β β β β
β Chat Model β β Memory β β β β
β (gpt-4.1) β β (10 msgs) β β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β
βΌ
ββββββββββββββββββββββ
β Is it an audio? β
ββββββββββββββββββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ
β Generate Audio β β Send Text Message β
β (OpenAI TTS) β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ
β Send Audio Message β
ββββββββββββββββββββββ
Image Message Flow:
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Download Image βββββΆβ Get File βββββΆβ Analyze Image β
β (WhatsApp Media) β β (HTTP Request) β β (OpenAI Vision) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Get Person Info βββββΆβ Get and Unify βββββΆβ AI Agent β
β (with AI analysis) β β Data β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
Voice Message Flow:
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Download Audio βββββΆβ Get Audio βββββΆβ Analyze Audio β
β (WhatsApp Media) β β (HTTP Request) β β (OpenAI Whisper) β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
β Get Person Audio βββββΆβ Get and Unify βββββΆβ AI Agent β
β β β Data β β β
ββββββββββββββββββββββ ββββββββββββββββββββββ ββββββββββββββββββββββ
n8n-whatsapp-bot/
βββ Whatsapp Bot.json # Main n8n workflow
βββ docker-n8n/
βββ compose.yaml # Docker Compose configuration
βββ env.example # Environment variables template
βββ local-files/ # Local file storage
| Parameter | Placeholder | Description |
|---|---|---|
| WhatsApp Trigger Credential ID | YOUR_WHATSAPP_TRIGGER_CREDENTIAL_ID |
WhatsApp OAuth credential for trigger |
| WhatsApp Credential ID | YOUR_WHATSAPP_CREDENTIAL_ID |
WhatsApp API credential |
| WhatsApp Bearer Token Credential ID | YOUR_WHATSAPP_BEARER_TOKEN_CREDENTIAL_ID |
Bearer token for media downloads |
| WhatsApp Phone Number ID | YOUR_WHATSAPP_PHONE_NUMBER_ID |
Your WhatsApp Business phone number ID |
| OpenAI Credential ID | YOUR_OPENAI_CREDENTIAL_ID |
OpenAI API credential |
| WhatsApp Webhook ID | YOUR_WHATSAPP_WEBHOOK_ID |
WhatsApp trigger webhook ID |
| WhatsApp Send Webhook ID | YOUR_WHATSAPP_SEND_WEBHOOK_ID |
Webhook ID for sending messages |
| WhatsApp Media Webhook ID | YOUR_WHATSAPP_MEDIA_WEBHOOK_ID |
Webhook ID for media operations |
| Instance ID | YOUR_INSTANCE_ID |
Your n8n instance ID |
-
Create a Meta Business Account:
- Go to business.facebook.com
- Create or access your business account
-
Set up WhatsApp Business API:
- Navigate to WhatsApp in Meta Business Suite
- Create a WhatsApp Business Account
- Get your Phone Number ID from the dashboard
-
Get Access Token:
- Go to System Users β WhatsApp
- Create a system user with WhatsApp permissions
- Generate a Permanent Access Token
- This token is used for the Bearer Auth credential
-
Configure Webhook:
- In Meta Business Suite, configure webhook URL
- Point to your n8n instance webhook endpoint
- Subscribe to
messagesevents
-
Configure in n8n:
- Create WhatsApp Trigger credential with OAuth
- Create WhatsApp credential with your access token
- Create HTTP Bearer Auth credential with your access token (for media downloads)
- Enter your Phone Number ID in the send message nodes
The workflow uses OpenAI for:
- Chat Model:
gpt-4.1-mini(for text responses) - Vision Model:
gpt-4o(for image analysis) - Whisper: Audio transcription
- TTS: Text-to-speech (voice: "nova", format: "opus")
- π¬ Multi-modal Support - Text, image, document, and voice messages
- π§ AI-Powered - OpenAI GPT-4.1-mini for intelligent responses
- ποΈ Image Analysis - GPT-4o Vision for image understanding
- π Document Processing - Handles image documents
- π€ Voice Transcription - OpenAI Whisper for voice-to-text
- π Text-to-Speech - OpenAI TTS for voice responses
- πΎ Conversation Memory - Maintains context per user (10 messages)
- π± WhatsApp Integration - Native WhatsApp Business API support
-
Text Messages:
- General knowledge questions
- Conversational responses
- Context-aware (remembers last 10 messages per user)
-
Image Messages:
- Automatic image analysis
- Extracts information from images
- Can use image caption if provided
- Responds with AI-generated insights
-
Image Documents:
- Handles images sent as documents
- Analyzes document images
- Processes captions
-
Voice Messages:
- Automatic transcription
- Processes as text message
- Can respond with text or audio (OpenAI TTS)
The bot is configured as a general knowledge assistant:
You are a helpful assistant that help people with general knowledge questions.
You can receive information from an AI that analyze the image. If there is no
information in the AI section, then answer the prompt with the information
that you know.
You can also receive messages or userPrompts that are transcript using AI,
the userPrompt can come from an audio file.
## Image analyzed by AI:
{{ $json.ai }}
- Customer Support Bot: Answer questions and provide assistance via WhatsApp
- Educational Assistant: Help with general knowledge questions
- Image Analysis Bot: Describe and analyze images sent by users
- Voice Assistant: Voice-based interactions via WhatsApp
- Document Processing: Analyze and respond to image documents
- Business Automation: Automated customer service for WhatsApp Business
- n8n (self-hosted or cloud)
- Google account with access to:
- Google Sheets API
- Gmail API
- Google Calendar API (for Time Off workflows)
- Google Docs API (for Scraping - Course workflow)
- Google Drive API (for Scraping - Course and RAG workflows)
- OAuth2 credentials configured in n8n
- PostgreSQL database (for T-Shirts - PostgreSQL, Time Off, and RAG workflows)
- PostgreSQL with PGVector extension (for RAG Standard System PostgreSQL)
- Discord webhook (for Time Off workflows)
- OpenAI API key (for Scraping - Course, Wikipedia - Agent, Personal Assistant, Online Store Agent, and RAG workflows)
- Firecrawl API key (for Scraping - Course and Google Maps - Scraping workflows)
- Apify API token (for Google Maps - Scraping workflow)
- Google Gemini API key (for Wikipedia - Agent workflow, optional)
- Ollama local server (for Wikipedia - Agent workflow, optional)
n8n (pronounced "n-eight-n") is a free and open-source workflow automation tool. It allows you to:
- π Connect 400+ apps and services
- π€ Automate repetitive tasks
- π Build complex workflows visually
- π» Self-host for complete data control
These workflows demonstrate n8n's capability to integrate multiple services (Google Sheets, external APIs, Gmail, PostgreSQL, Discord, Google Calendar, OpenAI, Firecrawl, Google Docs, Apify, Google Maps, LangChain Agents, Wikipedia, Google Gemini, Ollama, PGVector, Google Drive, RAG, ElevenLabs Voice AI, Telegram, Giphy, WhatsApp Business API) into seamless automation pipelines.
This project is available under the MIT License. Feel free to use, modify, and share it.