This workflow corresponds to n8n.io template #7937 — we link there as the canonical source.
This workflow follows the Agent → OpenAI Embeddings recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "Zendesk Automation (New Tickets)",
"nodes": [
{
"id": "note-webhook",
"name": "Note - Webhook Setup",
"type": "n8n-nodes-base.stickyNote",
"color": "#FFD700",
"position": [
-2480,
640
],
"parameters": {
"notes": "\ud83d\udd17 Set this webhook URL as a trigger in your Zendesk account under 'Admin \u2192 Triggers' so that new tickets are forwarded here."
},
"typeVersion": 1
},
{
"id": "180aaaa5-75a9-4573-a300-d87159dfb153",
"name": "Get New Tickets",
"type": "n8n-nodes-base.webhook",
"position": [
-2320,
784
],
"parameters": {
"path": "zendesk_new_ticket",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "ac8ab31e-3c02-4d48-afd0-4a9736a7aa64",
"name": "Extract New Ticket",
"type": "n8n-nodes-base.set",
"position": [
-2096,
784
],
"parameters": {
"assignments": {
"assignments": [
{
"name": "timestamp",
"type": "string",
"value": "={{new Date().toLocaleString(\"en-BD\", { timeZone: \"Asia/Dhaka\", dateStyle: \"medium\", timeStyle: \"short\" })}}"
},
{
"name": "ticket_id",
"type": "string",
"value": "={{ $json.body.ticket_id }}"
},
{
"name": "ticket_status",
"type": "string",
"value": "={{ $json.body.ticket_status }}"
},
{
"name": "requester_id",
"type": "string",
"value": "={{ $json.body.requester_id }}"
},
{
"name": "requester_name",
"type": "string",
"value": "={{ $json.body.requester_name }}"
},
{
"name": "requester_email",
"type": "string",
"value": "={{ $json.body.requester_email }}"
},
{
"name": "subject",
"type": "string",
"value": "={{ $json.body.subject }}"
},
{
"name": "description",
"type": "string",
"value": "={{ ($json.body.description || \"\").split('\\n\\n').slice(-1)[0].trim() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "note-supabase",
"name": "Note - Supabase Setup",
"type": "n8n-nodes-base.stickyNote",
"color": "#9ACD32",
"position": [
-1728,
1344
],
"parameters": {
"notes": "\ud83d\udcda Replace with your own Supabase project credentials. Ensure you have a 'documents' table with embedded KB content."
},
"typeVersion": 1
},
{
"id": "0aa2089e-7346-43b6-a702-630c4849b8c9",
"name": "Supabase Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
"position": [
-1728,
1216
],
"parameters": {
"options": {
"queryName": "match_documents"
},
"tableName": "documents"
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "note-postgres",
"name": "Note - Postgres Memory",
"type": "n8n-nodes-base.stickyNote",
"color": "#FF7F50",
"position": [
-1904,
928
],
"parameters": {
"notes": "\ud83d\uddc4\ufe0f Create a Postgres table `zendesk_ticket_histories` with fields for session context. This allows AI to recall past ticket interactions."
},
"typeVersion": 1
},
{
"id": "c227d629-3e39-4445-b3c3-7c52e6827fdf",
"name": "Postgres Ticket Memory",
"type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
"position": [
-1744,
1008
],
"parameters": {
"tableName": "zendesk_ticket_histories",
"sessionKey": "={{ $json.ticket_id }}",
"sessionIdType": "customKey"
},
"credentials": {
"postgres": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "note-openai",
"name": "Note - OpenAI Setup",
"type": "n8n-nodes-base.stickyNote",
"color": "#87CEFA",
"position": [
-1680,
1520
],
"parameters": {
"notes": "\ud83e\udd16 Add your own OpenAI API key in the credential settings. Adjust model if desired (gpt-4o, gpt-4o-mini, etc.)."
},
"typeVersion": 1
},
{
"id": "89663ccb-065d-4211-9c26-1770f60984f0",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
-1648,
1424
],
"parameters": {
"model": "text-embedding-3-small",
"options": {
"dimensions": 1536
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5d009f5e-2a9c-4036-a382-9e5180e677a7",
"name": "Retrieve Knowledge Base",
"type": "@n8n/n8n-nodes-langchain.toolVectorStore",
"position": [
-1616,
1008
],
"parameters": {
"name": "content_en",
"topK": 5,
"description": "Contains all KB articles to answer user questions accurately."
},
"typeVersion": 1
},
{
"id": "44147a82-2675-4bef-8b54-53fe90646cb0",
"name": "RAG AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1824,
784
],
"parameters": {
"text": "={{ $json.description }}",
"options": {
"maxIterations": 2,
"systemMessage": "=You are a professional support assistant. Use only the retrieved knowledge base documents to answer the customer\u2019s ticket clearly, formally, and concisely."
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "510b8014-8a8b-4fde-846f-4dd82554ac74",
"name": "If No Relevant KB Found",
"type": "n8n-nodes-base.if",
"position": [
-1232,
784
],
"parameters": {
"conditions": {
"conditions": [
{
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('RAG AI Agent').item.json.output }}",
"rightValue": "will get back to you shortly"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "note-zendesk",
"name": "Note - Zendesk Domain",
"type": "n8n-nodes-base.stickyNote",
"color": "#FFA07A",
"position": [
-896,
704
],
"parameters": {
"notes": "\ud83c\udff7\ufe0f Update `<YOUR_ZENDESK_DOMAIN>` with your Zendesk subdomain. Example: `https://mycompany.zendesk.com/...`"
},
"typeVersion": 1
},
{
"id": "e99c3f1f-cc58-4638-8ddd-65df1998197c",
"name": "Add Tags (ai_reply)",
"type": "n8n-nodes-base.httpRequest",
"position": [
-784,
880
],
"parameters": {
"url": "=https://<YOUR_ZENDESK_DOMAIN>/api/v2/tickets/{{ $('Extract New Ticket').first().json.ticket_id }}/tags.json",
"method": "PUT",
"jsonBody": "{ \"tags\": [\"ai_reply\"] }",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "zendeskApi"
},
"credentials": {
"zendeskApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "note-test",
"name": "Note - Testing",
"type": "n8n-nodes-base.stickyNote",
"color": "#BA55D3",
"position": [
-720,
1200
],
"parameters": {
"notes": "\u2705 After setup, create a sample ticket in Zendesk to test:\n- Does AI reply appear?\n- Correct tags (`ai_reply` / `human_requested`)?\n- Memory stored in Postgres?\nIf yes \u2192 workflow is ready!"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"connections": {}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
openAiApipostgressupabaseApizendeskApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
⚡ How it works
Source: https://n8n.io/workflows/7937/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow automates multi-channel AI-driven sales engagement for lead qualification, service information delivery, and consultation booking. It integrates WhatsApp, Facebook Messenger, Instagram D
Indoor Farming Agent. Uses lmChatOpenAi, documentDefaultDataLoader, embeddingsOpenAi, toolVectorStore. Webhook trigger; 36 nodes.
Hi! I’m Amanda, a creator of intelligent automations using n8n and Make. I’ve been building AI-powered workflows for over 2 years, always focused on usability and innovation. This one here is very spe
RAG_AI_Agent_PDFs_Excel. Uses lmChatOpenAi, documentDefaultDataLoader, embeddingsOpenAi, toolVectorStore. Webhook trigger; 28 nodes.
Supabase RAG AI Agent Custom Auth. Uses lmChatOpenAi, documentDefaultDataLoader, embeddingsOpenAi, toolVectorStore. Event-driven trigger; 27 nodes.