Build a private DeepSeek chatbot with n8n and Venice
This guide shows you how to wire DeepSeek R1 into an n8n workflow using the Venice API, so you can chat with a powerful open-source model privately, either through a hosted web chat or a Telegram bot. You will connect a chat trigger, an AI agent, memory, and the Venice chat model without sending your conversations to any model provider's servers.
- How to build an n8n workflow with a chat trigger and an AI agent
- How to connect Venice's API as an OpenAI-compatible chat model and select DeepSeek R1
- How to add memory and a system prompt to give your chatbot context and personality
- How to publish the chatbot as a hosted web chat
- How to swap the web chat for a Telegram bot, including matching session IDs and sending replies
Why run DeepSeek through Venice
DeepSeek R1 is a powerful open-source model, but using it through its official website means your data is shared with the company that operates it. Routing DeepSeek through Venice gives you the same model while keeping your conversations off provider servers. Venice stores conversations in your browser, not on any backend.
This guide follows the Venice blog tutorial for building a private AI workflow with n8n. You will build a chatbot you can talk to privately, and the same workflow pattern can be reused to vibe code a chatbot into your own app or web page.
Set up the workflow and chat trigger
Sign up for n8n (a free tier is available at n8n.io) and create a new workflow. The first node is your trigger.
Add a trigger and search for "chat" to add a chat trigger node. Make it publicly available so the chat is reachable on the web, and leave it as a hosted chat to keep things simple. There is no authentication in this basic setup. Rename the bot (the demo uses "Vena") and set the opening message the chatbot greets users with.
This trigger fires whenever a user sends a chat message, then passes that message on to the next node.
Add the AI agent
Add a second node: the AI agent. It is prompted by the chat trigger from the previous step, so each incoming message becomes the agent's input.
The agent on its own does nothing useful yet. It needs three things to work: a chat model to generate responses, memory to track the conversation, and optionally tools. You will add the model and memory next, and you will return to add a system message later.
Connect Venice as the chat model
The Venice API is compatible with OpenAI clients, so you add an OpenAI chat model and point it at Venice instead.
First generate an API key. In Venice, click API in the left sidebar, find the generate new API key button, describe the key, choose its permissions, and copy it. Back in n8n, add a new credential for the OpenAI chat model, paste your Venice API key, and set the base URL to Venice's API endpoint:
https://api.venice.ai/api/v1
You can rename the credential to "Venice" for clarity. Once the base URL is correct, Venice's models appear in the model dropdown. If they do not show up, recheck the base URL. Scroll to DeepSeek and select R1 (not the coder variant) for a general chatbot.
Add memory and a system prompt
With a model connected, give the agent memory so it remembers the conversation. Click memory and it uses the same session as the chat trigger that started the conversation, keeping replies in context. A tool is optional here; tools let an agent take actions like calling an MCP server, another workflow, or a database, which this chatbot does not need.
Finally, open the agent and add a system message to set the bot's personality. The demo pastes a prompt describing Vena as a digital ambassador for Venice, knowledgeable and approachable, helping users navigate private and uncensored AI. Save the workflow, open the chat, and test it. You will see DeepSeek's reasoning, then its reply in the persona you defined.
Publish and test the hosted web chat
Activate the workflow at the top of n8n and visit the chat URL to use the bot in a real chat window. Ask it anything and you get the full response, including the model's thinking followed by the answer.
Because the workflow runs through Venice, providers like OpenAI, Anthropic, and Google are not logging your conversations. Venice hosts no conversations on any server; everything is stored in your browser.
Swap in a Telegram bot
For a different interface, replace the hosted chat with Telegram. Add a Telegram node, choose the trigger, and select "on message." Create credentials by messaging @BotFather on Telegram, which walks you through making a bot and gives you an access token. Paste the token, save, and connect the Telegram trigger to the AI agent.
Telegram's output JSON differs from the chat node, so run execute workflow in test mode and send a message to capture real data to work with. Then fix the agent: drag the Telegram message field into the agent's user message so the prompt turns green (meaning it knows the source), and update the memory session ID from the chat trigger to the Telegram chat ID. Rerun with play to confirm green arrows across the workflow.
The hosted chat node replies automatically, but Telegram does not, so you must continue the workflow. Add a Telegram "send a message" node, set the credentials and resource, map the chat ID to match, and use the agent's output as the message text. Press play and the reply lands in Telegram. To stop n8n from appending its branding to each message, open the final Telegram node and toggle off append attribution.
Key takeaways
- Venice's OpenAI-compatible API lets you use DeepSeek R1 in n8n by swapping the base URL to Venice's endpoint and pasting your API key.
- A working chatbot needs a trigger, an AI agent, a chat model, and memory; tools are optional.
- Conversations stay private because Venice stores nothing on its servers, keeping your data away from major model providers.
- The same workflow runs as a hosted web chat or a Telegram bot; for Telegram, match the session and chat IDs and add a send-message node to reply.
- 131votes
- 76votes
- 58votes
Adapted from the @askvenice video on YouTube. Models and prices change fast; verify current details in Venice before production use.