Tích hợp Claude API vào n8n về cơ bản là một node HTTP Request gọi tới https://api.anthropic.com/v1/messages với API key trong header, nhưng phần quyết định workflow có chạy ổn định hay không nằm ở ba việc: ép Claude trả JSON đúng cấu trúc bằng output_config, bật Retry On Fail đúng cách cho lỗi 429/529, và đọc trường usage để biết mỗi lần chạy tốn bao nhiêu token. Bài này đi thẳng vào ba việc đó.
TL;DR
- Claude API gọi qua endpoint
POST /v1/messagesvới 3 header bắt buộc:x-api-key,anthropic-version: 2023-06-01,content-type: application/json(theo docs Anthropic, truy cập 11/09/2026). - Muốn JSON chắc chắn parse được, dùng
output_config.formatkiểujson_schema— tính năng structured outputs đã GA, không cần beta header, hỗ trợ Haiku 4.5, Sonnet 5, Opus 5. - Trong n8n, mở Settings của node HTTP Request để bật Retry On Fail, đặt Max Tries và Wait Between Tries (ms); chỉ nên retry với 429, 500, 529 — không retry 400/401.
- Mỗi response Claude trả về
usage.input_tokens,usage.output_tokens,cache_read_input_tokens; nhân với bảng giá là có chi phí thật của từng execution. - Giá tham chiếu (Anthropic, 09/2026): Haiku 4.5 = 1 USD input / 5 USD output mỗi 1 triệu token; Sonnet 5 = 2/10; Opus 5 = 5/25. Batch API giảm 50%, cache đọc chỉ 0,1 lần giá input.
- Endpoint
/v1/messages/count_tokensmiễn phí — dùng để ước lượng token tiếng Việt trước khi chạy hàng loạt.
Vì sao nên dùng Claude trong n8n thay vì chỉ chat trên web?
Vì n8n biến Claude từ một cửa sổ chat thành một “công nhân” chạy theo lịch, nhận dữ liệu từ Google Sheets, WordPress, Zalo OA, webhook rồi trả kết quả về đúng chỗ mà không cần ai ngồi copy-paste. Nếu bạn mới làm quen với n8n, đọc trước bài n8n là gì và hub tự động hóa quy trình no-code để nắm khái niệm node, trigger, execution.
Có ba lý do Claude hợp với automation hơn nhiều người nghĩ:
- Structured outputs: Claude API cho phép khai báo JSON Schema và đảm bảo kết quả trả về đúng schema đó (constrained decoding). Với workflow, “đúng cấu trúc 100%” quan trọng hơn “văn hay” — một dấu ngoặc thiếu là cả chuỗi node phía sau đổ.
- Context 1M token ở giá chuẩn: theo trang pricing của Anthropic, các model từ Claude 4.6 trở đi tính giá như nhau cho toàn bộ cửa sổ 1 triệu token — nạp cả file CSV 200 trang vào một request không bị phụ thu.
- Trường usage minh bạch: mỗi response ghi rõ số token vào/ra và số token đọc từ cache, nên bạn tính được chi phí từng execution thay vì chờ hóa đơn cuối tháng.
Trên site đã có bài nối OpenAI và Claude vào n8n hướng dẫn phần nối cơ bản. Bài này không lặp lại phần đó mà đào sâu vào ba thứ mà bài cơ bản chưa chạm tới: parse JSON, bắt lỗi và kiểm soát token.
Lấy API key Claude ở đâu và cấu hình credential trong n8n thế nào?
API key tạo trong Claude Console tại platform.claude.com, mục API Keys; tài khoản mới được cấp một khoản credit nhỏ để thử, sau đó nạp tiền trả trước. Chi tiết từng bước tạo tài khoản, đọc bảng giá và gọi API lần đầu mình đã viết trong bài Claude API tiếng Việt, ở đây chỉ tóm tắt phần liên quan tới n8n.
Trong n8n có hai cách đưa key vào:
- Credential Anthropic có sẵn — dùng cho node Anthropic chính thức (thao tác “Message a Model”, phân tích ảnh/tài liệu, quản lý file). Theo docs n8n, trên n8n Cloud còn có thể dùng Gateway credits mà không cần tài khoản Anthropic riêng.
- Generic Credential → Header Auth — dùng cho node HTTP Request. Name đặt là
x-api-key, Value là key của bạn. Cách này cho bạn toàn quyền với body request (structured outputs, cache_control, batch), là cách mình khuyên dùng cho workflow nghiêm túc.
Lưu ý bảo mật: tuyệt đối không dán key thẳng vào tab Headers của node, vì key sẽ nằm trong JSON workflow khi export hoặc chia sẻ. Credential của n8n được mã hóa và không đi theo file export.
Node HTTP Request gọi Claude cần cấu hình những gì?
Cấu hình tối thiểu cho một node HTTP Request gọi Claude gồm 5 phần: Method POST, URL endpoint, Authentication (Header Auth vừa tạo), thêm header anthropic-version, và body JSON. Bảng dưới là bản đối chiếu từng ô trong n8n với tham số của Claude API:
| Ô trong node HTTP Request | Giá trị | Ghi chú |
|---|---|---|
| Method | POST | Messages API chỉ nhận POST |
| URL | https://api.anthropic.com/v1/messages | Không có dấu / cuối |
| Authentication | Generic Credential Type → Header Auth | Name = x-api-key |
| Send Headers → anthropic-version | 2023-06-01 | Bắt buộc, thiếu là lỗi 400 |
| Send Body → Content Type | JSON → Using JSON | Dán body bên dưới, dùng expression cho phần động |
| Options → Timeout | 120000 (ms) trở lên | Bài dài + model lớn có thể mất hơn 60 giây |
Body JSON mẫu cho tác vụ tóm tắt bình luận khách hàng thành dữ liệu có cấu trúc:
{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"system": "Bạn là trợ lý phân loại phản hồi khách hàng cho một shop online tại Việt Nam.",
"messages": [
{ "role": "user", "content": {{ JSON.stringify($json.binh_luan) }} }
],
"output_config": {
"format": {
"type": "json_schema",
"schema": {
"type": "object",
"properties": {
"cam_xuc": { "type": "string", "enum": ["tich_cuc", "trung_tinh", "tieu_cuc"] },
"van_de_chinh": { "type": "string" },
"can_phan_hoi_gap": { "type": "boolean" }
},
"required": ["cam_xuc", "van_de_chinh", "can_phan_hoi_gap"],
"additionalProperties": false
}
}
}
}
Ba điểm dễ sai: max_tokens là bắt buộc (không có giá trị mặc định); system là trường riêng ngoài mảng messages; và nếu bạn viết "{{ $json.binh_luan }}" trong chuỗi JSON, nội dung có dấu ngoặc kép hoặc xuống dòng sẽ phá vỡ JSON — vì thế body mẫu ở trên dùng {{ JSON.stringify($json.binh_luan) }} để n8n tự escape.
Parse JSON Claude trả về trong n8n như thế nào cho chắc?
Claude trả text trong content[0].text; khi đã dùng structured outputs, chuỗi đó là JSON hợp lệ, bạn chỉ cần một node Code (hoặc expression trong node Edit Fields) gọi JSON.parse. Không cần regex, không cần “xin” Claude bỏ dấu “`json nữa.
Cấu trúc response quan trọng cần nhớ:
{
"id": "msg_...",
"content": [ { "type": "text", "text": "{\"cam_xuc\":\"tieu_cuc\",...}" } ],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 412,
"output_tokens": 58,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
}
}
Node Code (JavaScript) để tách dữ liệu ra thành field phẳng, giữ luôn số token để tính tiền ở bước sau:
return $input.all().map(item => {
const r = item.json;
const data = JSON.parse(r.content[0].text);
return {
json: {
...data,
stop_reason: r.stop_reason,
tokens_in: r.usage.input_tokens,
tokens_out: r.usage.output_tokens,
tokens_cache_read: r.usage.cache_read_input_tokens || 0
}
};
});
Hai bẫy khi parse mà người mới hay dính:
- stop_reason = “max_tokens”: Claude bị cắt giữa chừng, JSON sẽ thiếu ngoặc đóng. Hãy kiểm tra trường này trước khi parse; nếu gặp thì tăng
max_tokensvà chạy lại, đừng cố “vá” chuỗi. - Schema không hỗ trợ: theo docs Anthropic, structured outputs không nhận schema đệ quy, không nhận
minLength/maxLength/minimum/maximum, vàadditionalPropertiesphải làfalse. Vi phạm là lỗi 400 ngay từ request đầu.
Với model cũ hơn (trước 4.5) không có structured outputs, bạn vẫn có thể ép JSON bằng system prompt, nhưng phải bọc JSON.parse trong try/catch và chuyển item lỗi sang nhánh riêng — đó chính là chỗ cần tới phần bắt lỗi bên dưới.
Bắt lỗi và retry Claude API trong n8n: lỗi nào nên thử lại, lỗi nào dừng?
Nguyên tắc: retry lỗi tạm thời (429, 500, 529), dừng ngay với lỗi do mình gây ra (400, 401, 403, 413). n8n có sẵn cơ chế retry ở cấp node, nhưng nó retry mọi mã lỗi như nhau, nên bạn cần kết hợp với nhánh error output để phân loại.
Bảng mã lỗi Claude API và cách xử lý tương ứng trong n8n (mã lỗi theo docs Anthropic):
| HTTP | Loại lỗi | Nguyên nhân thường gặp | Xử lý trong n8n |
|---|---|---|---|
| 400 | invalid_request_error | Thiếu max_tokens, JSON body hỏng, schema không hợp lệ, chạm spend limit tự đặt | Không retry — sửa body, kiểm tra expression |
| 401 | authentication_error | Key sai, bị thu hồi hoặc hết hạn | Không retry — kiểm tra credential |
| 413 | request_too_large | Body vượt 32 MB (Messages API) | Chia nhỏ dữ liệu đầu vào |
| 429 | rate_limit_error | Vượt RPM/TPM của usage tier hoặc chạm trần chi tiêu tháng | Retry có chờ; nếu là trần chi tiêu thì không có retry-after và sẽ lỗi liên tục |
| 500 | api_error | Lỗi nội bộ Anthropic | Retry với backoff |
| 529 | overloaded_error | API quá tải toàn cục | Retry với chờ dài hơn (30-60 giây) |
Quy trình 5 bước dựng lớp chống lỗi
- Bật Retry On Fail: mở tab Settings của node HTTP Request, bật Retry On Fail, đặt Max Tries = 3 và Wait Between Tries (ms) = 5000. Docs n8n về xử lý rate limit khuyên chỉnh số chờ này theo giới hạn tần suất của API bạn gọi.
- Đổi On Error sang “Continue (using error output)”: node sẽ có thêm một cổng ra màu đỏ, item lỗi đi theo cổng đó thay vì làm cả workflow dừng.
- Thêm node IF sau cổng lỗi: điều kiện
{{ $json.error.httpCode }}thuộc [429, 500, 529] → đẩy vào nhánh “chờ rồi gọi lại” (node Wait 60 giây rồi quay về HTTP Request); còn lại → nhánh “báo người”. - Bật Include Response Headers and Status trong Options → Response của node HTTP Request để đọc được header
retry-aftervàrequest-id; request-id là thứ Anthropic yêu cầu khi bạn cần hỗ trợ. - Đặt Error Workflow: trong Workflow Settings chọn một workflow bắt đầu bằng node Error Trigger để gửi cảnh báo (Telegram/Slack/email) kèm tên node lỗi và execution URL — cái này bắt cả những lỗi không đi qua nhánh error output ở trên.
Một mẹo thực dụng cho lỗi 429 do tần suất: thay vì retry, dùng Options → Batching của node HTTP Request với Items per Batch = 5 và Batch Interval (ms) = 2000. Docs n8n mô tả đây là cách kết hợp cả hai kỹ thuật chia nhỏ và tạm dừng giữa các request; với workflow SME, giới hạn token/phút thường bị chạm trước giới hạn request/phút, và batching làm phẳng cả hai.
Các lỗi n8n phổ biến không liên quan tới Claude (expression sai, node Code trả sai định dạng) mình đã gom trong bài lỗi hay gặp khi dùng n8n.
Kiểm soát chi phí token khi chạy Claude hàng loạt như thế nào?
Chi phí một execution = input_tokens × giá input + output_tokens × giá output + cache_read × 0,1 × giá input, chia cho 1.000.000. Vì Claude trả đủ ba con số này trong usage, bạn có thể tính ngay trong node Code và ghi vào Google Sheets làm sổ chi tiêu.
Bảng giá Anthropic công bố (USD mỗi 1 triệu token, truy cập 11/09/2026):
| Model | Input | Output | Cache đọc | Batch (input/output) | Phù hợp việc gì trong n8n |
|---|---|---|---|---|---|
| Claude Haiku 4.5 | 1 | 5 | 0,10 | 0,5 / 2,5 | Phân loại, trích xuất field, tag tự động |
| Claude Sonnet 5 | 2 | 10 | 0,20 | 1 / 5 | Viết mô tả sản phẩm, tóm tắt, trả lời khách |
| Claude Opus 5 | 5 | 25 | 0,50 | 2,5 / 12,5 | Phân tích phức tạp, quyết định nhiều bước |
Anthropic ghi rõ mức 2/10 USD của Sonnet 5 nay là giá chuẩn — đợt tăng lên 3/15 dự kiến ngày 01/09/2026 đã không diễn ra. Đây là tin tốt cho automation vì Sonnet 5 là điểm cân bằng tốt nhất giữa chất lượng tiếng Việt và giá.
Ví dụ tính tiền cho một workflow thực tế
Giả sử bạn chạy workflow phân loại 3.000 bình luận Facebook mỗi ngày bằng Haiku 4.5, mỗi bình luận khoảng 400 token input (gồm system prompt) và 60 token output:
- Input: 3.000 × 400 = 1.200.000 token × 1 USD = 1,2 USD
- Output: 3.000 × 60 = 180.000 token × 5 USD = 0,9 USD
- Tổng ≈ 2,1 USD/ngày, tức khoảng 63 USD/tháng. Nếu dời sang Batch API (kết quả trả trong vòng 24 giờ) thì còn một nửa.
Cùng khối lượng đó chạy bằng Opus 5 sẽ tốn 5 lần input và 5 lần output — khoảng 315 USD/tháng. Chênh lệch này là lý do quy tắc đầu tiên khi tối ưu chi phí là chọn đúng model theo độ khó việc, chứ không phải cắt prompt.
5 đòn bẩy giảm chi phí token trong n8n
- Chọn model theo tầng: Haiku cho lọc/phân loại, Sonnet cho viết, Opus chỉ cho item Haiku/Sonnet không tự tin (dùng field
can_phan_hoi_gaphoặc điểm tự đánh giá để rẽ nhánh). - Prompt caching: system prompt dài + tài liệu tham chiếu đặt ở đầu request và thêm
cache_control; theo Anthropic, ghi cache 5 phút tính 1,25 lần giá input nhưng mỗi lần đọc chỉ 0,1 lần — hòa vốn ngay từ lần đọc thứ nhất. Chú ý: cache 5 phút chỉ có ích khi workflow chạy liên tục (batching, Loop Over Items), không có ích với lịch chạy mỗi giờ. - Batch API cho việc không cần ngay: giảm 50% cả input lẫn output; hợp với báo cáo đêm, làm sạch dữ liệu cũ.
- Đo trước bằng count_tokens: endpoint
/v1/messages/count_tokensmiễn phí, tier Start cho 5.000 request/phút, chấp nhận cả system prompt, tool, ảnh và PDF base64. Chạy 20-30 mẫu nội dung tiếng Việt thật qua endpoint này để có số token trung bình trước khi nhân với 3.000 item. - Đừng đặt max_tokens quá cao “cho chắc”: max_tokens không tính tiền nếu Claude dừng sớm, nhưng Anthropic cảnh báo request không streaming quá 10 phút dễ bị mạng ngắt; đặt quá lớn cũng dễ timeout ở node HTTP Request.
Một điểm riêng cho tiếng Việt: Anthropic lưu ý các model từ Claude Opus 4.7 trở đi (gồm cả dòng Fable 5 và Mythos 5) dùng tokenizer mới, sinh ra nhiều hơn khoảng 30% token cho cùng một đoạn văn so với Sonnet 4.6 trở về trước; endpoint count_tokens đếm theo đúng tokenizer của model bạn truyền vào. Nếu bạn từng đo token trên model cũ, phải đo lại — và với tiếng Việt có dấu, chênh lệch thực tế có thể khác con số 30% đó, nên count_tokens vẫn là cách duy nhất đáng tin.
Workflow mẫu: phân loại phản hồi khách hàng từ Google Sheets bằng Claude
Workflow này gồm 7 node, chạy mỗi 30 phút, đọc bình luận mới từ Google Sheets, nhờ Claude phân loại và ghi kết quả ngược lại, kèm cột chi phí. Đây là mẫu mình thấy hợp nhất với shop online và agency nhỏ ở Việt Nam vì không cần code ngoài một node JavaScript ngắn.
- Schedule Trigger — mỗi 30 phút.
- Google Sheets (Read) — lọc các dòng có cột
trang_thaitrống. - Edit Fields — chuẩn hóa: cắt bình luận còn tối đa 1.500 ký tự, gộp tên sản phẩm vào ngữ cảnh.
- HTTP Request → Claude — body như mục trên, model
claude-haiku-4-5-20251001, Batching 5 item/2 giây, Retry On Fail 3 lần, On Error = Continue (using error output). - Code — parse JSON, tính
chi_phi_usd = (tokens_in × 1 + tokens_out × 5) / 1.000.000. - Google Sheets (Update) — ghi cảm xúc, vấn đề chính, cờ cần phản hồi gấp, chi phí, request-id.
- Nhánh lỗi → IF → Wait 60s → quay lại node 4 với mã 429/500/529; mã khác → Telegram báo admin.
Muốn thêm bước trả lời tự động, chỉ cần một node HTTP Request thứ hai gọi Sonnet 5 cho những dòng can_phan_hoi_gap = true — đây là kiểu “tầng model” giúp 90% item chạy bằng Haiku rẻ, chỉ 10% lên Sonnet.
Nếu về sau bạn muốn Claude tự thao tác trên nhiều công cụ hơn thay vì chỉ trả JSON, hướng đi tiếp theo là kết nối Claude qua MCP; còn nếu công việc là viết và sửa chính workflow n8n, Claude Code có thể đọc file JSON workflow và chỉnh sửa trực tiếp cho bạn.
FAQ: tích hợp Claude API vào n8n
Nên dùng node Anthropic có sẵn hay node HTTP Request?
Node Anthropic hợp khi bạn chỉ cần “Message a Model” nhanh hoặc phân tích ảnh/PDF. Node HTTP Request hợp khi cần structured outputs, prompt caching, batch hay đọc header response — docs n8n cũng gợi ý dùng HTTP Request cho các thao tác node chưa hỗ trợ, và có thể tái dùng credential Anthropic.
Claude có trả JSON kèm chữ thừa như “Đây là kết quả:” không?
Với structured outputs thì không — response bị ràng buộc theo schema. Không dùng structured outputs thì có thể, nên phải bọc try/catch khi parse.
Tại sao lỗi 400 nói “This model does not support assistant message prefill”?
Vì các model từ Claude 4.6 trở đi không cho “mớm” đầu câu trả lời bằng message assistant cuối. Cách thay thế chính thức là dùng output_config.format hoặc hướng dẫn trong system prompt.
Lỗi 429 cứ lặp dù đã retry?
Nếu 429 không kèm header retry-after, theo docs Anthropic khả năng cao bạn chạm trần chi tiêu tháng của usage tier chứ không phải rate limit tần suất. Retry vô ích; cần nạp thêm hoặc chờ sang tháng.
Có thể tính chính xác tiền VND cho từng execution không?
Có, vì usage trả về số token thật. Nhân với bảng giá USD rồi quy đổi theo tỷ giá thẻ của bạn — chú ý thêm phí chuyển đổi ngoại tệ của ngân hàng phát hành thẻ.
Chạy n8n self-host hay Cloud thì hợp với workflow gọi Claude?
Self-host (Community Edition mã nguồn mở) không giới hạn execution, phù hợp khối lượng lớn; n8n Cloud gói Starter 20 EUR/tháng (trả năm) cho 2.500 execution, đủ cho workflow chạy vài chục lần/ngày. Chi phí Claude không phụ thuộc vào lựa chọn này.
Có nên để Claude tự gọi lại API khi kết quả chưa tốt?
Có, nhưng đặt giới hạn vòng lặp (ví dụ tối đa 2 lần) và ghi lại số token mỗi vòng. Vòng lặp không giới hạn là cách nhanh nhất để nhận hóa đơn bất ngờ.
Kết luận
Nối Claude vào n8n không khó; làm cho nó chạy ổn định 30 ngày liên tục mới khó. Ba thứ quyết định là structured outputs để JSON không bao giờ hỏng, Retry On Fail kết hợp nhánh error output để phân loại lỗi, và cột chi phí tính từ trường usage để bạn biết chính xác mỗi execution tốn bao nhiêu. Làm đủ ba việc đó, workflow của bạn trở thành thứ có thể giao cho người khác vận hành.
Đọc tiếp trong cụm Claude: Claude API tiếng Việt: lấy key, bảng giá token, gọi API cơ bản · Claude MCP: kết nối Claude với công cụ ngoài · Claude Code từ A–Z · và hub tự động hóa quy trình no-code.
Nguồn tham khảo
- Anthropic — Messages API reference — header bắt buộc, cấu trúc request/response, trường usage (truy cập 11/09/2026)
- Anthropic — Structured outputs — tham số output_config.format, model hỗ trợ, giới hạn schema
- Anthropic — API errors — bảng mã lỗi 400/401/413/429/500/529, request-id, giới hạn kích thước request
- Anthropic — Pricing — giá token từng model, cache, batch, ghi chú Sonnet 5 giữ giá 2/10
- Anthropic — Token counting — endpoint count_tokens miễn phí, rate limit theo tier, tokenizer mới
- n8n Docs — HTTP Request node — Header Auth, Batching, Timeout, Response options
- n8n Docs — Handle rate limits — Retry On Fail, Wait Between Tries, Items per Batch
- n8n Docs — Handle errors gracefully — Error Trigger, Error Workflow, Stop and Error
- n8n Docs — Anthropic node — thao tác Message a Model, credential, Gateway credits
- n8n — Pricing — gói Cloud Starter 20 EUR/2.500 execution, Community Edition self-host
