Self-Hosted
This workflow provides a complete end-to-end system for capturing, analyzing, and routing customer feedback. By combining local multimodal AI processing with structured data storage, it allows teams to respond to customer needs in real-time without compromising data privacy.
Who is this for?
This is designed for Customer Success Managers, Product Teams, and Community Leads who need to automate the triage of high-volume feedback. It is particularly useful for organizations that handle sensitive customer data and prefer local AI processing over cloud-based API calls.
🛠️ Tech Stack
- Tally.so: For front-end feedback collection.
- LM Studio: To host the local AI models (Qwen3-VL).
- PostgreSQL: For persistent data storage and reporting.
- Discord: For real-time team notifications.
✨ How it works
- Form Submission: The workflow triggers when a new submission is received from Tally.so.
- Multimodal Analysis: The OpenAI node (pointing to LM Studio) processes the input using the Qwen3-VL model across three specific layers:
- Sentiment Analysis: Evaluates the text to determine if the customer is Positive, Negative, or Neutral.
- Zero-Shot Classification: Categorizes the feedback into pre-defined labels based on instructions in the prompt.
- Vision Processing: Analyzes any attached images to extract descriptive keywords or identify UI elements mentioned in the feedback.
- Data Storage: The PostgreSQL node logs the user's details, the original message, and all AI-generated insights.
- AI-Driven Routing: The same Qwen3-VL model makes the routing decision by evaluating the classification results and determining the appropriate path for the data to follow.
- Discord Notification: The Discord node sends a formatted message to the corresponding channel, ensuring the support team sees urgent issues while the marketing team sees positive testimonials.
📋 Requirements
- LM Studio running a local server on port
1234.
- Qwen3-VL-4B (GGUF) model loaded in LM Studio.
- PostgreSQL instance with a table configured for feedback data.
- Discord Bot Token and specific Channel IDs.
🚀 How to set up
- Prepare your Local AI:
- Open LM Studio and download the
Qwen3-VL-4B model.
- Start the Local Server on port
1234 and ensure CORS is enabled.
- Disable the Require Authentication setting in the Local Server tab.
- Configure PostgreSQL:
- Ensure your database is running. Create a table named
customer_feedback with columns for name, email_address, feedback_message, image_url, sentiment, category, and img_keywords.
- Import the Workflow:
- Import the JSON file into your n8n instance.
- Link Services:
- Update the Webhook node with your Tally.so URL.
- In the Discord nodes, paste the relevant Channel IDs for your #support, #feedback, and #general channels.
- Test and Activate:
- Toggle the workflow to Active.
- Send a test submission through your Tally form and verify the data appears in PostgreSQL and Discord.
🔑 Credential Setup
To run this workflow, you must configure the following credentials in n8n:
- OpenAI API (Local):
- Create a new OpenAI API credential.
- API Key: Enter any placeholder text (e.g.,
lm-studio).
- Base URL: Set this to your machine's local IP address (e.g.,
http://192.168.1.10:1234/v1) to ensure n8n can connect to the local AI server, especially if running within a Docker container.
- PostgreSQL:
- Create a new PostgreSQL credential.
- Enter your database Host, Database Name, User, and Password. If using the provided Docker setup, the host is usually
db.
- Discord Bot:
- Tally:
- Create a new Tally API credential.
- Enter your API Key, which you can find in your Tally.so account settings.
⚙️ How to customize
- Refine AI Logic: Update the System Message in the AI node to change classification categories or sentiment sensitivity.
- Switch to Cloud AI: If you prefer not to use a local model, you can swap the local LM Studio connection for any 3rd party API, such as OpenAI (GPT-4o), Anthropic (Claude), or Google Gemini, by updating the node credentials and Base URL.
- Expand Destinations: Add more Discord nodes or integrate Slack to notify different departments based on the AI's routing decision.
- Custom Triggers: Replace the Tally webhook with a Typeform, Google Forms, or a custom Webhook trigger if your collection stack differs.