RAG chatbot with Supabase + TogetherAI + Openrouter
Ready for 3.0Ready for 3.0. This template uses no nodes that n8n 3.0 removes. No removed nodes, versions or helpers found. Static check, last run 2026-10-19.
Nodes used (9)
- Google Docs
n8n-nodes-base.googleDocs - Code
n8n-nodes-base.code - HTTP Request
n8n-nodes-base.httpRequest - Supabase
n8n-nodes-base.supabase - Telegram Trigger
n8n-nodes-base.telegramTrigger - Chat Trigger
@n8n/n8n-nodes-langchain.chatTrigger - Aggregate
n8n-nodes-base.aggregate - Basic LLM Chain
@n8n/n8n-nodes-langchain.chainLlm - OpenRouter Chat Model
@n8n/n8n-nodes-langchain.lmChatOpenRouter
What it does
⚠️ RUN the FIRST WORKFLOW ONLY ONCE (as it will convert your content in Embedding format and save it in DB and is ready for the RAG Chat) 📌 Telegram Trigger Type: telegramTrigger Purpose: Waits for new Telegram messages to trigger the workflow. Note: Currently disabled. --- 📄 Content for the Training Type: googleDocs Purpose: Fetches document content from Google Docs using its URL. Details: Uses Service Account authentication. --- ✂️ Splitting into Chunks Type: code Purpose: Splits the fetched document text into smaller chunks (1000 chars each) for processing. Logic: Loops over text and slices it. --- 🧠 Embedding Uploaded Document Type: httpRequest Purpose: Calls Together AI embedding API to get vector embeddings for each text chunk. Details: Sends JSON with model name and chunk as input. --- 🛢 Save the embedding in DB Type: supabase Purpose: Saves each text chunk and its embedding vector into the Supabase embed table. SECOND WORKFLOW EXPLAINATION: 💬 When chat message received Type: chatTrigger Purpose: Starts the workflow when a user sends a chat message. Details: Sends an initial greeting message to the user. --- 🧩 Embend User Message Type: httpRequest Purpose: Generates embedding for the user’s input message. Details: Calls Together AI embeddings API. --- 🔍 Search Embeddings Type: httpRequest Purpose: Searches Supabase DB for the top 5 most similar text chunks based on the generated embedding. Details: Calls Supabase RPC function matchembeddings1. --- 📦 Aggregate Type: aggregate Purpose: Combines all retrieved text chunks into a single aggregated context for the LLM. --- 🧠 Basic LLM Chain Type: chainLlm Purpose: Passes the user's question + aggregated context to the LLM to generate a detailed answer. Details: Contains prompt instructing the LLM to answer only based on context. --- 🤖 OpenRouter Chat Model Type: lmChatOpenRouter Purpose: Provides the actual AI language model that processes the prompt. Details: Uses qwen/qwen3-8b:free model via OpenRouter and you can use any of your choice.