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": "Legal Chat Assistant",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "chat",
"responseMode": "responseNode",
"options": {}
},
"id": "webhook-chat",
"name": "Chat Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
240,
300
]
},
{
"parameters": {
"resource": "text",
"operation": "embed",
"model": "text-embedding-3-small",
"input": "={{ $json.query }}"
},
"id": "create-query-embedding",
"name": "Create Query Embedding",
"type": "n8n-nodes-base.openAi",
"typeVersion": 1,
"position": [
460,
300
]
},
{
"parameters": {
"operation": "executeQuery",
"query": "SELECT * FROM match_laws($1, $2, $3)",
"parameters": [
"={{ $json.embedding }}",
"0.7",
"5"
]
},
"id": "search-laws",
"name": "Search Laws",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
680,
300
]
},
{
"parameters": {
"jsCode": "// Prepare context for AI\nconst laws = $input.first().json;\nconst query = $input.first().json.query;\n\n// Create context from matched laws\nconst context = laws.map(law => \n `Ti\u00eau \u0111\u1ec1: ${law.title}\\n` +\n `\u0110i\u1ec1u/Kho\u1ea3n: ${law.article_reference || 'N/A'}\\n` +\n `N\u1ed9i dung: ${law.content}\\n` +\n `Ngu\u1ed3n: ${law.source || 'N/A'}\\n`\n).join('\\n---\\n');\n\n// Create sources array\nconst sources = laws.map(law => ({\n id: law.id,\n title: law.title,\n article_reference: law.article_reference,\n source: law.source,\n similarity: law.similarity\n}));\n\nreturn {\n json: {\n query: query,\n context: context,\n sources: sources,\n matched_ids: laws.map(law => law.id)\n }\n};"
},
"id": "prepare-context",
"name": "Prepare Context",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
900,
300
]
},
{
"parameters": {
"resource": "chat",
"operation": "create",
"model": "gpt-3.5-turbo",
"messages": {
"values": [
{
"role": "system",
"content": "B\u1ea1n l\u00e0 m\u1ed9t tr\u1ee3 l\u00fd ph\u00e1p lu\u1eadt chuy\u00ean nghi\u1ec7p. H\u00e3y tr\u1ea3 l\u1eddi c\u00e2u h\u1ecfi v\u1ec1 ph\u00e1p lu\u1eadt Vi\u1ec7t Nam d\u1ef1a tr\u00ean c\u00e1c v\u0103n b\u1ea3n ph\u00e1p lu\u1eadt \u0111\u01b0\u1ee3c cung c\u1ea5p. Tr\u1ea3 l\u1eddi ch\u00ednh x\u00e1c, r\u00f5 r\u00e0ng v\u00e0 c\u00f3 tr\u00edch d\u1eabn ngu\u1ed3n. N\u1ebfu kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin li\u00ean quan, h\u00e3y n\u00f3i r\u00f5 \u0111i\u1ec1u \u0111\u00f3."
},
{
"role": "user",
"content": "C\u00e2u h\u1ecfi: {{ $json.query }}\\n\\nV\u0103n b\u1ea3n ph\u00e1p lu\u1eadt li\u00ean quan:\\n{{ $json.context }}"
}
]
},
"options": {
"temperature": 0.3,
"maxTokens": 1000
}
},
"id": "generate-response",
"name": "Generate Response",
"type": "n8n-nodes-base.openAi",
"typeVersion": 1,
"position": [
1120,
300
]
},
{
"parameters": {
"operation": "insert",
"table": "query_logs",
"columns": "user_id, query, matched_ids, response"
},
"id": "log-query",
"name": "Log Query",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
1340,
300
]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { \"response\": $json.message.content, \"sources\": $json.sources, \"matched_ids\": $json.matched_ids } }}"
},
"id": "response",
"name": "Response",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [
1560,
300
]
}
],
"connections": {
"Chat Webhook": {
"main": [
[
{
"node": "Create Query Embedding",
"type": "main",
"index": 0
}
]
]
},
"Create Query Embedding": {
"main": [
[
{
"node": "Search Laws",
"type": "main",
"index": 0
}
]
]
},
"Search Laws": {
"main": [
[
{
"node": "Prepare Context",
"type": "main",
"index": 0
}
]
]
},
"Prepare Context": {
"main": [
[
{
"node": "Generate Response",
"type": "main",
"index": 0
}
]
]
},
"Generate Response": {
"main": [
[
{
"node": "Log Query",
"type": "main",
"index": 0
}
]
]
},
"Log Query": {
"main": [
[
{
"node": "Response",
"type": "main",
"index": 0
}
]
]
}
}
}
About this workflow
Legal Chat Assistant. Uses openAi, supabase, respondToWebhook. Webhook trigger; 7 nodes.
Source: https://github.com/Minh-sawada/DO_AN_CHUYEN_NGANH/blob/614b91391cf04523a3317fbe44c6e01cf5ed680b/n8n-workflows/chat-workflow.json — original creator credit. Request a take-down →