Zalo OA là một trong những công cụ marketing mạnh mẽ nhất tại Việt Nam, nhưng việc tích hợp và tự động hóa thường gặp nhiều khó khăn. Trong bài viết này, mình sẽ hướng dẫn bạn cách kết nối Zalo OA với n8n một cách hoàn chỉnh, từ xác minh domain đến tự động lấy access token hàng ngày.
Chuẩn bị trước khi bắt đầu
Trước khi thực hiện, bạn cần có:
- Tài khoản Zalo OA đã được phê duyệt
- Server n8n đang hoạt động (phiên bản 0.186.0 trở lên)
- Domain/subdomain để xác minh
- Kiến thức cơ bản về n8n workflow
Bước 1: Cài đặt Community Node cho Zalo OA
n8n hỗ trợ cài đặt community nodes trực tiếp từ giao diện web:
Cài đặt qua n8n Interface
- Vào n8n instance của bạn
- Truy cập Settings → Community Nodes
- Click Install a community node
- Nhập tên package:
n8n-nodes-zalo-oa-integration
- Click Install
Bước 2: Xác minh domain với Zalo OA
Theo tài liệu chính thức của Zalo, việc xác minh domain là bắt buộc để sử dụng các API. Quá trình này bao gồm:
Tại Zalo for Developers Console:
- Truy cập developers.zalo.me
- Vào app Zalo OA của bạn
- Chọn Cài đặt → Xác minh domain
- Thêm domain chính của bạn
- Tải file xác minh hoặc copy mã HTML
Tại server của bạn:
- Upload file xác minh vào thư mục root của domain
- Hoặc thêm meta tag vào trang chủ
- Đảm bảo domain có thể truy cập qua HTTPS
Bước 3: Xác minh subdomain cho webhook
Nếu n8n instance của bạn chạy trên subdomain khác (ví dụ: n8n.yourdomain.com
), bạn cũng cần xác minh subdomain này:
- Thêm subdomain vào danh sách domain cần xác minh
- Thực hiện quy trình xác minh tương tự
- Đảm bảo webhook URL sử dụng domain đã xác minh
Video hướng dẫn chi tiết A-Z
Nếu ae chưa có n8n, ae có thể mua VPS cài đặt sẵn N8N + Redis khi đặt hàng, có tặng kèm domain, SSL miễn phí tại Tino
- Mã giảm giá 1-2 năm giảm 20%: tinon8n20
- Mã giảm giá 3-5 năm giảm 40%: tinon8n40
Hỗ trợ cài đặt wf và vấn đề khi kết nối Zalo miễn phí: https://zalo.me/g/sfuihb835
Tải wf miễn phí https://drive.google.com/drive/u/0/folders/1-7Oul7nyUI7Baxs4kBQN9qo37DHraXhN
Code xác minh subdomain
#Cài nano
apt update
apt install nano -y
#Sửa docker-compose.yml
nano docker-compose.yml
#code sửa nội dung docker-compose
static-verify:
image: nginx:alpine
restart: always
volumes:
- ./verify:/usr/share/nginx/html:ro
labels:
- traefik.enable=true
- traefik.http.routers.verify.rule=Host(`dev102.tino.page`) && Path(`/zalo_verifierRUMaDwZq7mufoxyltlrk42pgra_0d00LC3On.html`)
- traefik.http.routers.verify.entrypoints=web,websecure
- traefik.http.routers.verify.tls=true
- traefik.http.routers.verify.tls.certresolver=mytlschallenge
#tạo file html verify zalo
mkdir -p ./verify
nano ./verify/zalo_verifierRUMaDwZq7mufoxyltlrk42pgra_0d00LC3On.html
#Chạy lại docker compose
docker-compose down
docker-compose up -d
Bước 4: Tạo webhook xác minh với Zalo
Webhook là cầu nối để nhận thông tin từ Zalo OA. Trong n8n:
Tạo Webhook Receiver:
- Tạo workflow mới
- Thêm Webhook node
- Cấu hình:
- HTTP Method:
GET
- Path:
/zalo-webhook
- Response Mode:
Respond to Webhook
- HTTP Method:
Xác minh webhook với Zalo:
- URL webhook:
https://your-n8n-domain.com/webhook/zalo-webhook
- Zalo sẽ gửi GET request để verify
- Webhook cần trả về challenge code từ query parameter
Bước 5: Lấy access token từ authorization code
Theo flow OAuth 2.0 của Zalo OA:
Bước 5.1: Tạo authorization URL
curl \
-X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'secret_key: <your_secret_key>' \
--data-urlencode 'code=<your_oauth_code>' \
--data-urlencode 'app_id=<your_app_id>' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code_verifier=your_code_verifier' \
'https://oauth.zaloapp.com/v4/oa/access_token'
Bước 5.2: Xử lý callback và lấy token Trong n8n workflow:
- HTTP Request node để exchange authorization code
- Endpoint:
https://oauth.zaloapp.com/v4/oa/access_token
- Method: POST
- Body:
{ "app_id": "your_app_id", "app_secret": "your_app_secret", "code": "authorization_code", "grant_type": "authorization_code"}
Bước 6: Test kết nối Zalo OA cơ bản
Sau khi có access token, thực hiện các test cơ bản:
Test API cơ bản:
- Get OA Info:
GET https://openapi.zalo.me/v2.0/oa/getoa
- Send Message:
POST https://openapi.zalo.me/v3.0/oa/message/cs
- Get User Profile:
GET https://openapi.zalo.me/v2.0/oa/getprofile
Sử dụng Zalo OA nodes:
- Drag & drop các node Zalo OA từ palette
- Cấu hình credentials với access token
- Test từng chức năng cơ bản
Bước 7: Tự động refresh access token
Điểm quan trọng nhất – setup auto refresh token để tránh gián đoạn:
Tạo Scheduled Workflow:
Cron node: Chạy hàng ngày lúc 2:00 AM 0 2 * * *
HTTP Request node để refresh token:
curl \
-X POST \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'secret_key: <your_secret_key>' \
--data-urlencode 'refresh_token=<your_refresh_token>' \
--data-urlencode 'app_id=<your_app_id>' \
--data-urlencode 'grant_type=refresh_token' \
'https://oauth.zaloapp.com/v4/oa/access_token'
Kết luận
Việc tích hợp Zalo OA với n8n thông qua community node mở ra vô số khả năng automation cho doanh nghiệp. Với workflow đã setup, bạn có thể tạo được hệ thống marketing automation mạnh mẽ và ổn định.
Quan trọng nhất là tuân thủ đúng quy trình OAuth 2.0 của Zalo và setup auto refresh token để đảm bảo hệ thống hoạt động liên tục.
Bài viết dựa trên video hướng dẫn chi tiết và tài liệu chính thức của Zalo for Developers. Subscribe channel để cập nhật thêm các tutorial automation khác!