Tóm tắt nội dung chính
– Vấn đề thực tế: Giới hạn tính năng của Zapier, Make.com và n8n khi cần xử lý nghiệp vụ đặc thù.
– Giải pháp: Xây dựng Custom Node (Zapier App, Make Scenario Module, n8n Node) để mở rộng khả năng low‑code.
– Quy trình: Từ thiết kế API, viết code, đóng gói, đăng ký, tới test và triển khai.
– Chi phí & hiệu năng: So sánh chi phí duy trì tự host vs dùng marketplace, ROI thực tế.
– Kinh nghiệm: Lỗi phổ biến, cách khắc phục, cách scale khi lượng request tăng.
1. Vấn đề thật mà mình và khách hay gặp mỗi ngày
⚡ Hiệu năng: Khi một workflow cần tính toán phức tạp (ví dụ: tính thuế, phân loại khách hàng) thì các “action” có sẵn của Zapier/Make.com thường không đáp ứng được, buộc phải dùng nhiều bước trung gian, làm chậm quá trình.
🐛 Bug: Nhiều khách phản ánh “Không có trigger cho sự kiện X” hoặc “Không thể gọi API nội bộ vì giới hạn CORS”.
🛡️ Bảo mật: Dữ liệu nhạy cảm (số thẻ, thông tin tài chính) phải được xử lý trong môi trường kiểm soát, không thể để qua các dịch vụ trung gian không được audit.
Cụ thể, trong 3 dự án gần đây mình đã gặp:
| Dự án | Nền tảng | Vấn đề | Hậu quả |
|---|---|---|---|
| E‑shop A | Zapier | Không có action để tính chiết khấu đa mức | Đơn hàng sai giá, mất doanh thu ~200 USD/ngày |
| FinTech B | Make.com | Không hỗ trợ ký số JWT cho API nội bộ | Giao dịch bị từ chối, khách hàng phàn nàn |
| HR SaaS C | n8n | Không có node để đọc file Excel phức tạp | Thời gian onboarding tăng 2 ngày |
2. Giải pháp tổng quan (text art)
+-------------------+ +-------------------+ +-------------------+
| Zapier / Make | ----> | Custom Node/App | ----> | Your Business |
| (Low‑code) | | (Node.js/TS) | | Logic (API) |
+-------------------+ +-------------------+ +-------------------+
^ ^ ^
| | |
Trigger / Action Code + SDK Data / Service
- Bước 1: Xác định API nội bộ (REST/GraphQL) hoặc logic cần thực hiện.
- Bước 2: Viết Custom Node bằng Node.js/TypeScript, dùng SDK của nền tảng.
- Bước 3: Đóng gói, đăng ký trên Marketplace (Zapier Platform UI, Make Custom Module, n8n Community Nodes).
- Bước 4: Kiểm thử, monitor, scale.
3. Hướng dẫn chi tiết từng bước
Bước 1 – Chuẩn bị API & môi trường
- Xác định endpoint: Ví dụ, API tính thuế
POST /v1/tax/calc. - Tạo token: Sử dụng JWT với secret
my_secret_key. - Kiểm thử bằng Postman để chắc chắn response đúng định dạng JSON.
Bước 2 – Tạo dự án Node.js
mkdir zapier-custom-tax
cd zapier-custom-tax
npm init -y
npm install @zapier/platform-core axios jsonwebtoken
Bước 3 – Viết file index.js (Zapier)
const { ZapierBase } = require('@zapier/platform-core');
const axios = require('axios');
const jwt = require('jsonwebtoken');
const TaxCalc = {
key: 'tax_calc',
noun: 'Tax Calculation',
display: {
label: 'Calculate Tax',
description: 'Tính thuế dựa trên tổng tiền và loại hàng.'
},
operation: {
inputFields: [
{ key: 'amount', type: 'number', required: true, label: 'Amount' },
{ key: 'category', type: 'string', required: true, label: 'Category' }
],
perform: async (z, bundle) => {
const token = jwt.sign({ sub: bundle.authData.userId }, process.env.JWT_SECRET);
const response = await axios.post(
`${process.env.API_BASE}/v1/tax/calc`,
{ amount: bundle.inputData.amount, category: bundle.inputData.category },
{ headers: { Authorization: `Bearer ${token}` } }
);
return response.data;
},
sample: { tax: 5.0, total: 105.0 }
}
};
module.exports = {
version: require('./package.json').version,
platformVersion: '9.0.0',
authentication: {
type: 'custom',
fields: [
{ key: 'api_key', type: 'string', required: true, label: 'API Key' }
],
test: async (z, bundle) => {
const response = await z.request({
url: `${process.env.API_BASE}/v1/ping`,
headers: { 'X-API-KEY': bundle.authData.api_key }
});
if (response.status !== 200) throw new Error('Invalid API Key');
return response.json;
}
},
creates: { [TaxCalc.key]: TaxCalc }
};
Bước 4 – Đăng ký trên Zapier Platform UI
- Đăng nhập Zapier Platform UI.
- Tạo “New App”, import
index.js. - Thiết lập Authentication (API Key).
- Kiểm tra Test → “Ping” trả về
pong.
Bước 5 – Kiểm thử trong Zap
- Tạo Zap mới: Trigger → “New Order” (Shopify).
- Action → “Calculate Tax” (Custom Node).
- Kiểm tra output:
tax,total.
Bước 6 – Đóng gói cho Make.com
Make sử dụng Custom Module (Node.js). Quy trình tương tự, chỉ thay @zapier/platform-core bằng Make SDK.
npm install @make/sdk axios jsonwebtoken
File module.js:
const { Module } = require('@make/sdk');
const axios = require('axios');
const jwt = require('jsonwebtoken');
module.exports = new Module({
name: 'Tax Calculator',
description: 'Calculate tax for orders',
inputs: [
{ name: 'amount', type: 'number', required: true },
{ name: 'category', type: 'string', required: true }
],
async run({ amount, category, auth }) {
const token = jwt.sign({ sub: auth.userId }, process.env.JWT_SECRET);
const res = await axios.post(
`${process.env.API_BASE}/v1/tax/calc`,
{ amount, category },
{ headers: { Authorization: `Bearer ${token}` } }
);
return res.data;
}
});
Upload lên Make Custom Module → Publish.
Bước 7 – Đối với n8n
n8n cho phép Community Nodes viết bằng TypeScript.
npm install n8n-core n8n-workflow axios jsonwebtoken
File TaxCalc.node.ts (rút gọn):
import { INodeType, INodeTypeDescription, IExecuteFunctions } from 'n8n-workflow';
import axios from 'axios';
import jwt from 'jsonwebtoken';
export class TaxCalc implements INodeType {
description: INodeTypeDescription = {
displayName: 'Tax Calculator',
name: 'taxCalc',
group: ['transform'],
version: 1,
description: 'Calculate tax via internal API',
defaults: { name: 'Tax Calculator' },
inputs: ['main'],
outputs: ['main'],
properties: [
{ displayName: 'Amount', name: 'amount', type: 'number', default: 0, required: true },
{ displayName: 'Category', name: 'category', type: 'string', default: '', required: true },
],
};
async execute(this: IExecuteFunctions): Promise<any[][]> {
const amount = this.getNodeParameter('amount', 0) as number;
const category = this.getNodeParameter('category', 0) as string;
const token = jwt.sign({ sub: this.getCredentials('apiKey')?.userId }, process.env.JWT_SECRET);
const response = await axios.post(
`${process.env.API_BASE}/v1/tax/calc`,
{ amount, category },
{ headers: { Authorization: `Bearer ${token}` } }
);
return [this.helpers.returnJsonArray(response.data)];
}
}
Sau khi npm pack, upload lên n8n Community Nodes → Activate.
4. Template qui trình tham khảo
[Client Request] → [Define API Spec] → [Create Node Repo] → [Write Code] →
[Local Test] → [CI/CD Build] → [Publish to Marketplace] → [Client Integration] →
[Monitoring & Scaling]
Checklist
- ✅ API Spec (OpenAPI 3.0)
- ✅ Unit Test (≥80% coverage)
- ✅ CI (GitHub Actions)
- ✅ Secrets (dotenv, GitHub Secrets)
- ✅ Documentation (README + Swagger UI)
5. Những lỗi phổ biến & cách sửa
| Lỗi | Nguyên nhân | Cách khắc phục |
|---|---|---|
| 🐛 401 Unauthorized | Token JWT sai thời gian hết hạn | Đặt expiresIn hợp lý, đồng bộ đồng hồ server. |
| 🐛 CORS Block | Make.com không cho phép header Authorization |
Sử dụng proxy trong Make (HTTP > Proxy) hoặc cấu hình CORS trên server (Access-Control-Allow-Origin: *). |
| 🐛 Timeout | API nội bộ phản hồi > 30s | Tối ưu query DB, hoặc bật async processing + webhook callback. |
| ⚡ Performance Drop | Node thực hiện tính toán nặng trong sync | Chuyển sang worker queue (BullMQ) và trả về job ID. |
| 🛡️ Security Leak | Lưu trữ secret trong repo | Dùng GitHub Secrets + .gitignore cho .env. |
> Best Practice: Luôn log request/response (không chứa dữ liệu nhạy cảm) để debug nhanh khi có lỗi.
6. Khi muốn scale lớn thì làm sao
- Tách service: Đưa Custom Node thành microservice (Docker) chạy trên Kubernetes hoặc Cloud Run.
- Horizontal Pod Autoscaler: Đặt target CPU 60 % → tự động scale pods.
- Rate Limiting: Sử dụng Redis để giới hạn QPS per client, tránh over‑load API.
Công thức tính ROI (tiếng Việt)
ROI = (Tổng lợi ích – Chi phí đầu tư) / Chi phí đầu tư × 100%
LaTeX formula (tiếng Anh)
Giải thích: Total_Benefits là doanh thu tăng thêm nhờ tự động hoá, Investment_Cost bao gồm chi phí phát triển, hosting, và phí marketplace.
7. Chi phí thực tế
| Hạng mục | Chi phí (USD/tháng) | Ghi chú |
|---|---|---|
| Server (Docker on VPS) | 30 | 2 vCPU, 4 GB RAM |
| Marketplace fee | 20 (Zapier) / 15 (Make) | Dựa trên số action dùng |
| CI/CD (GitHub Actions) | 0 (free tier) | Nếu vượt giới hạn sẽ mất $0.008/GB‑minute |
| Bảo trì & Update | 200 (freelancer 20h) | Trung bình 20 h/tháng |
Tổng chi phí ≈ $265/tháng.
Nếu doanh thu tăng thêm $3,000/tháng nhờ giảm lỗi và thời gian xử lý, ROI = ((3000‑265)/265)×100% ≈ 1032 %.
8. Số liệu trước – sau
| KPI | Trước Custom Node | Sau Custom Node | Tăng trưởng |
|---|---|---|---|
| Thời gian xử lý đơn hàng | 8 giây | 2 giây | 75 % giảm |
| Lỗi tính thuế | 12 lần/ngày | 0 lần | 100 % giảm |
| Doanh thu từ kênh tự động | $1,200 | $3,500 | +191 % |
| Chi phí API (external) | $150 | $30 | ‑80 % |
9. FAQ hay gặp nhất
Q1: Có cần phải đăng ký tài khoản developer trên Zapier/Make?
A: Có. Zapier yêu cầu “Developer Platform” để upload app, Make yêu cầu “Custom Module” trong tài khoản Pro.
Q2: Custom Node có hỗ trợ OAuth2 không?
A: Được. Cả ba nền tảng đều cung cấp hook để thực hiện OAuth2 flow, chỉ cần khai báo authentication.type = 'oauth2' và cung cấp authorizationUrl, tokenUrl.
Q3: Làm sao để debug khi Zapier không trả về dữ liệu?
A: Sử dụng “Zapier CLI” → zapier test để chạy local, hoặc bật “Debug mode” trong UI để xem logs.
Q4: Có thể dùng Python thay Node.js không?
A: Zapier và Make hiện chỉ hỗ trợ JavaScript/TypeScript cho custom code. n8n cho phép Python thông qua “Execute Command” node, nhưng không khuyến khích cho production.
Q5: Khi API thay đổi version, có cần rebuild node?
A: Có. Thay đổi schema (endpoint, request/response) yêu cầu cập nhật code và republish.
10. Giờ tới lượt bạn
- Bước 1: Kiểm tra workflow hiện tại, liệt kê các “gap” (thiếu trigger, tính toán, bảo mật).
- Bước 2: Viết spec API cho những phần còn thiếu, dùng OpenAPI để chuẩn hoá.
- Bước 3: Tạo repo, triển khai Custom Node theo mẫu trên, chạy test nội bộ.
- Bước 4: Đăng ký và publish lên marketplace, kết nối vào Zap/Scenario/n8n.
- Bước 5: Theo dõi KPI, tối ưu chi phí, chuẩn bị scale khi traffic tăng.
⚡ Hành động ngay: Đặt mục tiêu hoàn thiện một Custom Node trong 2 tuần tới, chia sẻ kết quả vào cộng đồng Slack của các freelancer automation để nhận feedback nhanh.
Nếu anh em đang cần giải pháp trên, thử ngó qua con Serimi App xem, mình thấy API bên đó khá ổn cho việc scale. Hoặc liên hệ mình để được trao đổi nhanh hơn nhé.
Nội dung được Hải định hướng, trợ lý AI giúp mình viết chi tiết.








