Cách kết nối Claude với n8n trên VPS
Hướng dẫn tích hợp Claude API vào n8n trên VPS qua Docker. Cách chọn model, tối ưu token và xây dựng 3 workflow AI thực tế để tiết kiệm chi phí nhất.
Những gì bạn sẽ xây dựng
Ba workflow AI hoạt động trên instance n8n mà bạn đang chạy: một webhook tóm tắt bất kỳ nội dung nào bạn gửi đến, một trình đọc feed theo lịch trình để chuyển đổi các bài báo thành các hàng trong spreadsheet có cấu trúc, và một AI Agent có khả năng tự gọi HTTP API để trả lời câu hỏi. Đây là giải pháp no-code tương đương với việc gọi Claude API từ Python trên VPS của bạn — cùng một API, cùng số token, cùng một hóa đơn, nhưng việc điều phối nằm ở các node n8n thay vì một script.
Tôi giả định n8n đã chạy qua HTTPS theo hướng dẫn tự host n8n trên Docker. Nếu chưa, hãy làm việc đó trước — webhook cần một endpoint TLS thực thụ, và kho lưu trữ credential mà bạn sắp nhập API key vào cần có bản backup encryption-key như hướng dẫn đã nhấn mạnh.
Các vấn đề thú vị ở đây không phải là kéo-thả. Đó là việc chọn model cho từng node, các trường prompt tự động chèn undefined, và thực tế là một automation chạy tự động — một workflow tốn nửa cent mỗi lần chạy thì rẻ, cho đến khi một vòng lặp retry chạy nó bốn nghìn lần trong đêm. Hầu hết hướng dẫn này sẽ tập trung vào những vấn đề đó.
Một credential, được mã hóa bằng key mà bạn đã backup
Lấy một API key từ Anthropic Console tại platform.claude.com — Settings, sau đó là API Keys, rồi tạo một key với tên kiểu như n8n-vps. Key này chỉ hiển thị một lần duy nhất. Hãy nạp tiền vào tài khoản hoặc thiết lập billing; việc sử dụng API tính theo pay-per-token và hoàn toàn tách biệt với bất kỳ gói đăng ký Claude.ai nào.
Trong n8n: Credentials, Create credential, chọn Anthropic, dán key vào trường API Key, rồi save. Mọi node Claude trong mọi workflow đều tham chiếu đến credential đã lưu này — bạn không bao giờ dán trực tiếp key vào một node.
Hai lưu ý vận hành. Thứ nhất, n8n mã hóa các credential đã lưu bằng N8N_ENCRYPTION_KEY. Nếu bạn thiết lập env var này một cách rõ ràng trong file compose theo hướng dẫn của n8n, credential của bạn sẽ tồn tại sau khi rebuild container; nếu bạn để n8n tự tạo và sau đó mất volume, mọi credential đã lưu — bao gồm cả key này — sẽ trở thành ciphertext không thể khôi phục. Hãy backup key ngay bây giờ nếu bạn đã bỏ qua bước đó. Thứ hai, hãy coi kho credential của n8n là phạm vi ảnh hưởng (blast radius): bất kỳ ai có quyền chỉnh sửa workflow trên instance của bạn đều có thể thực hiện các request bằng key Anthropic của bạn. Hãy thiết lập giới hạn chi tiêu (spend limit) trong Console tại phần Settings để nếu instance bị chiếm quyền hoặc chạy lỗi, nó vẫn có một mức trần.
Chọn model là quyết định theo từng node
Menu dropdown model trong các node Claude của n8n được lấy trực tiếp từ API, vì vậy nó hiển thị những gì key của bạn có thể truy cập. Tính đến tháng 7 năm 2026, danh sách model và giá API trên mỗi triệu input/output tokens là: Claude Haiku 4.5 (claude-haiku-4-5) với giá $1/$5 và context window 200K, Claude Sonnet 5 (claude-sonnet-5) với giá $3/$15 — giá giới thiệu là $2/$10 cho đến ngày 31 tháng 8 năm 2026 — và Claude Opus 4.8 (claude-opus-4-8) với giá $5/$25, cả hai đều có context window 1M-token. Ngoài ra còn có Claude Fable 5 (claude-fable-5) với giá $10/$50 cho các tác vụ suy luận khó nhất; không có gì trong hướng dẫn này cần đến nó. Hãy sử dụng chính xác các ID này — một biến thể có hậu tố ngày tháng mà bạn nhớ từ một tutorial cũ sẽ trả về lỗi 404, và giá cả có thể thay đổi, vì vậy hãy kiểm tra platform.claude.com trước khi tin tưởng bất kỳ con số nào, kể cả ở đây.
Thói quen cần xây dựng: chọn model theo từng node, không phải theo platform. Phân loại (classification), trích xuất (extraction), tóm tắt (summarization), điều hướng (routing) — những tác vụ cơ bản của automation — chạy cực tốt trên Haiku với giá chỉ bằng một phần ba của Sonnet và một phần năm của Opus. Hãy dành Sonnet cho các agent và suy luận đa bước, Opus cho những workflow hiếm hoi mà một câu trả lời sai gây tốn kém hơn cả số token. Một workflow có năm node Claude hoàn toàn có thể và nên kết hợp nhiều model khác nhau.
Hai node Claude, và nên dùng loại nào ở đâu
n8n cung cấp hai tích hợp Anthropic riêng biệt, và chọn sai loại là lỗi phổ biến nhất của người mới bắt đầu.
Node Anthropic là một app node thông thường: một request vào, một response ra. Resource Text của nó có thao tác Message a Model, cùng với các thao tác để phân tích hình ảnh và tài liệu. Hãy dùng nó bất cứ khi nào logic workflow nằm trong n8n — trigger, gọi Claude, node tiếp theo. Workflow 1 và 2 dưới đây sử dụng node này hoặc các biến thể tương đương.
Node Anthropic Chat Model là một sub-node — một thành phần đính kèm nhỏ cung cấp model cho một root node như AI Agent hoặc Basic LLM Chain. Nó không có trigger và không có output riêng; nó cung cấp trình chọn model cùng các tùy chọn sampling như Maximum Number of Tokens và Sampling Temperature. Một lưu ý từ docs của n8n cần ghi nhớ: các expression bên trong sub-nodes luôn resolve dựa trên item đầu tiên, không phải từng item một — hãy đặt các expression theo từng item vào các trường prompt của root node, đừng đặt trong sub-node.
Workflow 1: webhook nhận dữ liệu, tóm tắt kết quả
Bài học "hello-world" của AI automation: bất kỳ nội dung nào được POST đến một URL sẽ được tóm tắt và gửi đến Slack hoặc inbox của bạn.
- Webhook node — HTTP Method POST, path
summarize. n8n cung cấp cho bạn một test URL và một production URL; production URL chỉ hoạt động khi workflow đã được active. - Anthropic node — Message a Model, model
claude-haiku-4-5, Max Tokens khoảng 300. - Slack node (hoặc Send Email) — gửi text phản hồi đến một channel.
Prompt là nơi các expression của n8n gặp gỡ Claude. Body của POST nằm trong $json.body, vì vậy trường user message sẽ trông như thế này:
Summarize the following feedback in three bullets, then one line:
verdict: praise | complaint | churn-risk. No preamble.
{{ $json.body.text }}Hãy đặt các chỉ dẫn về role và format vào trường system prompt của node, đừng đặt vào user message — system prompt sẽ giữ cố định trong khi payload thay đổi, giúp hành vi ổn định và giúp prompt dễ đọc hơn sau sáu tháng. Hãy test nó ngay từ chính VPS:
curl -X POST https://n8n.example.com/webhook/summarize \
-H 'Content-Type: application/json' \
-d '{"text": "Third support ticket this month about slow disk IO..."}'Chi phí mỗi lần chạy trên Haiku: một payload 1,200-token cộng với prompt tốn khoảng $0.0012 đầu vào, 300 tokens đầu ra tốn $0.0015 — xấp xỉ một phần tư cent. Một nghìn lần chạy mỗi tháng tốn dưới $3. Cùng một node đó nếu dùng Opus 4.8 sẽ tốn gấp khoảng năm lần. Tỷ lệ đó, nhân với mọi workflow bạn xây dựng, chính là lý do tại sao thói quen chọn model theo từng node lại quan trọng.
Workflow 2: RSS theo lịch trình sang các hàng có cấu trúc
Bây giờ là một thứ chạy theo đồng hồ, với output có cấu trúc: đọc một RSS feed hàng giờ, phân loại từng item, và append các hàng vào một sheet.
- Schedule Trigger — mỗi giờ một lần.
- RSS Read — URL của feed. Output ra một item cho mỗi bài báo.
- Basic LLM Chain — với một sub-node Anthropic Chat Model được thiết lập là
claude-haiku-4-5, và một sub-node Structured Output Parser giữ một JSON schema. - Google Sheets (hoặc Postgres) — append một hàng cho mỗi item.
Structured Output Parser là thứ biến câu lệnh "Claude, hãy trả về JSON" từ một mong muốn thành một bản hợp đồng: nó validate phản hồi của model dựa trên schema của bạn và sẽ báo lỗi item đó thay vì ghi các hàng dữ liệu rác. Một schema kiểu như:
{
"type": "object",
"properties": {
"category": { "type": "string", "enum": ["release", "security", "tutorial", "other"] },
"relevance": { "type": "number" },
"one_line_summary": { "type": "string" }
},
"required": ["category", "relevance", "one_line_summary"]
}Và prompt của chain tham chiếu đến item từ feed:
Classify this article for a VPS hosting audience.
Title: {{ $json.title }}
Content: {{ $json.contentSnippet }}Phép toán chi phí thay đổi ở đây: đây là tính trên mỗi item, không phải mỗi lần chạy. Năm mươi bài báo mỗi giờ, hai mươi bốn giờ một ngày, là 36,000 lần gọi Claude mỗi tháng — trên Haiku có thể tốn $40–$90 tùy vào độ dài bài báo, trên Opus thì gấp khoảng năm lần. Hãy deduplicate (loại bỏ trùng lặp) trước node LLM (một lệnh IF đơn giản so sánh với các link đã thấy trước đó, hoặc dùng node Remove Duplicates của n8n) và số lượng sẽ giảm xuống, vì hầu hết các lần poll hàng giờ không có gì mới. Token rẻ nhất là token của một cuộc gọi mà bạn không bao giờ thực hiện.
Workflow 3: một AI Agent có sử dụng tools
Hai workflow đầu tiên là các pipeline — bạn quyết định các bước. Một node AI Agent đảo ngược điều đó: bạn đưa cho Claude một mục tiêu và các tools, và nó sẽ quyết định gọi tool nào, theo thứ tự nào, cho đến khi hoàn thành. n8n yêu cầu một sub-node chat model và ít nhất một sub-node tool được đính kèm.
Một ví dụ cụ thể — một trợ lý vận hành trả lời câu hỏi "cái gì đang sập và tại sao" từ hệ thống monitoring của bạn:
- Chat Trigger (hoặc webhook) — câu hỏi được gửi đến.
- AI Agent — với một sub-node Anthropic Chat Model được thiết lập là
claude-sonnet-5. Các agent lập kế hoạch và xâu chuỗi các tool calls; Haiku có thể chạy các agent đơn giản chỉ có một tool, nhưng Sonnet là mức tối thiểu hợp lý khi số lượng tools tăng lên. - HTTP Request node được đính kèm như một tool — trỏ đến Uptime Kuma status API hoặc endpoint Zabbix của bạn. Một HTTP tool thứ hai có thể gọi bất cứ thứ gì có REST API.
Hai thiết lập đảm nhận hầu hết công việc. System Message của agent định nghĩa công việc: "Bạn là một trợ lý vận hành. Sử dụng tool status để kiểm tra trạng thái monitor hiện tại trước khi trả lời. Chỉ báo cáo những monitor đang sập, kèm theo thời gian sập." Và description của mỗi tool không phải là tài liệu cho con người — đó là cách Claude quyết định khi nào cần gọi nó. "Returns current up/down state for all monitored services as JSON" sẽ được gọi vào đúng thời điểm; "status API" sẽ bị bỏ qua hoặc dùng sai. Khi bạn đính kèm node HTTP Request như một tool, hãy bật tùy chọn Optimize Response và chọn các field JSON quan trọng — nếu không, mọi response API dài dòng sẽ bị đẩy vào context của model dưới dạng input tokens mà bạn phải trả tiền.
Hãy đặt Max Iterations trên agent (mặc định là 10) ở con số nhỏ nhất mà vẫn hoạt động — đó là sự khác biệt giữa "agent bỏ cuộc sau 4 lần gọi tool" và một vòng lặp gồm hàng tá lượt trao đổi với model. Và hãy hiểu cách tính tiền: mỗi iteration sẽ gửi lại toàn bộ hội thoại từ trước đến nay — system message, câu hỏi, mọi kết quả tool trước đó — dưới dạng input tokens. Một lần chạy agent gồm sáu iteration có thể dễ dàng tốn tổng cộng 20,000 input tokens và 2,000 output: trên mức giá giới thiệu của Sonnet 5 là khoảng $0.06, xấp xỉ $0.09 ở mức tiêu chuẩn $3/$15 — tức là tương đương hai mươi lần chạy tóm tắt đơn giản. Nếu bạn thấy mình đang gắn quá nhiều tools vào một agent, đó là lúc chạy MCP servers trên VPS của bạn trở thành kiến trúc gọn gàng hơn.
Guardrails về chi phí, vì không có ai giám sát cả
Một workflow chạy tự động cần các kiểm soát mà một con người ngồi trước bàn phím thường thực hiện một cách vô thức. Bốn lớp, từ rẻ nhất trở lên.
Max Tokens trên mọi node Claude. Đây là giới hạn output cứng. Một node tóm tắt cần 300, một node phân loại cần 100. Điều này giới hạn phần chi phí đắt đỏ ($5–$25 cho mỗi triệu output tokens so với $1–$5 cho input) và đóng vai trò như một phanh ngăn chặn lỗi — một lỗi prompt khiến Claude nói lan man sẽ chỉ tốn 300 tokens chứ không phải 8,000.
Model theo từng node. Đã đề cập ở trên; đây là đòn bẩy giá từ 5 đến 10 lần trên danh sách model hiện tại và chỉ mất mười giây để thiết lập.
Giới hạn các vòng lặp. Max Iterations trên các agent. Một workflow timeout trong settings của workflow để một execution bị kẹt sẽ chết thay vì chạy vô tận. Và hãy cẩn thận với Retry On Fail trên từng node: nó là công cụ đúng cho các lỗi tạm thời, nhưng retry sẽ nhân bội chi phí — Max Tries là 3 với Wait Between Tries là 5000 ms có nghĩa là một lỗi kéo dài sẽ tính phí bạn tới ba lần cho mỗi item trước khi bỏ cuộc. Đừng bao giờ bọc một lệnh retry quanh một node đã thực hiện thành công một cách tốn kém.
Một error workflow làm chốt chặn. Tạo một workflow bắt đầu bằng node Error Trigger để gửi tên workflow bị lỗi và lỗi đó đến Slack, sau đó thiết lập nó làm Error Workflow trong settings của mỗi AI workflow. Chế độ lỗi mà nó bắt được là loại tệ nhất: một workflow chạy theo lịch trình bị lỗi ở mọi lần chạy, mỗi giờ, trong một tuần — mỗi lần chạy đốt sạch token trước khi chết. Hãy kết hợp nó với một mức giới hạn chi tiêu hàng tháng trong Anthropic Console và kiểm tra trang usage của Console trong vài ngày đầu sau khi kích hoạt bất kỳ thứ gì chạy theo lịch trình. Nếu bạn muốn hiểu chính xác mình đang bị tính tiền cho cái gì, hướng dẫn về token-usage sẽ phân tích chi tiết.
Các lỗi thường gặp, với các dấu hiệu bạn sẽ thấy
Node lỗi ngay lập tức với thông báo "Authorization failed - please check your credentials." API trả về lỗi 401. Nội dung thực sự là:
{"type": "error", "error": {"type": "authentication_error", "message": "invalid x-api-key"}}Do dán sai key — bị cắt bớt, có khoảng trắng ở cuối, hoặc là placeholder từ một tutorial. Hãy tạo lại n8n credential và dán lại; nếu hôm qua nó vẫn chạy, hãy kiểm tra xem key đã bị thu hồi trong Console chưa hoặc liệu việc restore volume có làm quay lại một credential được mã hóa bằng một N8N_ENCRYPTION_KEY khác không.
Các execution lỗi liên tục với lỗi 429 rate_limit_error, thông báo kiểu như "Number of request tokens has exceeded your per-minute rate limit." Rate limits được tính theo các bucket mỗi phút, và n8n khiến việc bắn đồng thời năm mươi execution webhook hoặc RSS trở nên rất dễ dàng. Hãy sửa nó về mặt cấu trúc: xử lý các item theo trình tự (Loop Over Items) thay vì song song, và thiết lập Retry On Fail với Max Tries là 3 và Wait Between Tries ở mức tối đa 5000 ms — n8n giới hạn trường đó ở 5000 ms. Khi bạn cần thời gian chờ (backoff) dài hơn để các retry rơi vào cửa sổ phút tiếp theo, hãy đặt một node Wait trong đường dẫn lỗi hoặc xử lý các item từng cái một. Response có chứa header retry-after cho bạn biết chính xác cần chờ bao lâu — lệnh wait cố định của n8n không thể đọc được nó, vì vậy hãy tự xây dựng khoảng dừng dài hơn.
404 not_found_error do sai tên model. Body sẽ lặp lại lỗi typo:
{"type": "error", "error": {"type": "not_found_error", "message": "model: claude-haiku-4.5"}}Dùng dấu chấm thay vì dấu gạch ngang (4.5 thay vì 4-5), một hậu tố ngày tháng từ một bài blog cũ, hoặc một model đã bị khai tử. Hãy sửa ID theo danh sách hiện tại — điều này thường khiến những người gõ trực tiếp vào trường model dưới dạng expression thay vì chọn từ menu dropdown gặp rắc rối.
Claude trả lời một câu hỏi mà bạn không hề hỏi. Không có lỗi ở bất cứ đâu — execution báo màu xanh. Một n8n expression tham chiếu đến một field bị thiếu, như {{ $json.body.text }} trong khi payload sử dụng message, sẽ chèn chuỗi ký tự undefined vào prompt của bạn, và Claude sẽ nhiệt tình trả lời một prompt về... hư vô. Nếu node được tham chiếu chưa hề thực thi, bạn sẽ nhận được "Referenced node is unavailable", nhưng một field bị thiếu thì sẽ không báo lỗi. Trước khi kích hoạt, hãy luôn chạy thử một lần với dữ liệu thật và đọc prompt thực tế đã được render trong panel input của node — trình chỉnh sửa expression chỉ là xem trước giá trị đã resolve, và undefined nằm ngay đó nếu bạn để ý.
FAQ
Làm thế nào để kết nối Claude với n8n?
Tạo một API key trong Anthropic Console tại platform.claude.com, sau đó trong n8n, thêm một credential loại Anthropic và dán nó vào trường API Key. Mọi node Claude — cả node Anthropic app và sub-node Anthropic Chat Model — đều tham chiếu đến credential đã lưu đó. n8n mã hóa nó bằng N8N_ENCRYPTION_KEY, vì vậy hãy backup key đó nếu không bạn sẽ mất credential cùng với volume.
Một workflow AI tốn bao nhiêu chi phí mỗi lần chạy?
Hãy ước tính số token mỗi lần chạy, sau đó nhân với giá mỗi triệu token của model — tính đến tháng 7 năm 2026, Haiku 4.5 là $1/$5 cho mỗi triệu input/output tokens và Sonnet 5 là $3/$15 ($2/$10 mức giới thiệu cho đến tháng 8 năm 2026). Một lệnh tóm tắt webhook trên Haiku tốn khoảng một phần tư cent; một lần chạy agent trên Sonnet với vài tool calls sẽ tốn gần $0.06–$0.10 vì mỗi iteration sẽ gửi lại toàn bộ hội thoại dưới dạng input. Hãy kiểm tra thực tế trong trang usage của Console thay vì tin vào các ước tính.
Tôi nên dùng model Claude nào cho automation trên n8n?
Haiku 4.5 cho phân loại, trích xuất, tóm tắt và điều hướng — các tác vụ khối lượng lớn nơi tốc độ và giá cả là ưu tiên. Sonnet 5 cho các node AI Agent và suy luận đa bước. Chỉ dùng Opus 4.8 khi một câu trả lời sai đủ đắt để xứng đáng với mức giá $5/$25 — gấp năm lần Haiku, và hơn một chút so với hai lần Sonnet. Hãy thiết lập model theo từng node, không phải theo workflow — một workflow có thể kết hợp cả ba.
Làm thế nào để ngăn n8n workflow chi tiêu quá mức vào Claude API?
Hãy thiết lập các lớp bảo vệ: Max Tokens thấp trên mọi node Claude, Max Iterations trên các agent, một workflow timeout, và thiết lập Retry On Fail thận trọng để lỗi không làm nhân bội chi phí token. Sau đó, thêm một Error Trigger workflow để cảnh báo bạn qua Slack khi bất kỳ AI workflow nào bị lỗi, và thiết lập một mức giới hạn chi tiêu hàng tháng trong Anthropic Console như một cái trần cứng mà không gì trên VPS có thể vượt qua.
Việc gọi tool của AI Agent có tốn thêm phí không?
Không có phí tool riêng biệt, nhưng các tool không hề miễn phí: mọi kết quả từ tool đều được đưa ngược lại cho model dưới dạng input tokens, và mỗi iteration của agent sẽ gửi lại toàn bộ hội thoại từ trước đến nay. Một response API quá dài nếu không được lọc sẽ làm tăng vọt lượng token thực tế — hãy bật Optimize Response trên các HTTP Request tool và chỉ trả về những field mà agent thực sự cần.