Bỏ qua đến nội dung chính
Hướng dẫn kỹ thuật10 phút đọcTác giả: ntdungdev

Setup Chatbot AI cho Zalo OA từ A-Z (Hướng dẫn chi tiết 2026)

Hướng dẫn từng bước tích hợp chatbot AI vào Zalo Official Account. Tạo OA, lấy access token, setup webhook, kết nối n8n + Gemini. Kèm troubleshoot 10 lỗi thường gặp.

Zalo có 75 triệu user tại Việt Nam — gần như người Việt trưởng thành nào cũng dùng. Nếu bạn làm kinh doanh mà bỏ qua Zalo OA = mất cơ hội lớn.

Bài này hướng dẫn chi tiết cách tích hợp chatbot AI vào Zalo OA, từ tạo tài khoản đến nhận message đầu tiên. Có kèm xử lý 10 lỗi phổ biến.

Điều kiện cần trước khi bắt đầu

Bắt buộc:

  • Tài khoản Zalo cá nhân đã verify
  • Business registration (giấy phép kinh doanh) nếu muốn Premium OA
  • Domain hosting HTTPS (cho webhook)
  • Server hoặc n8n self-hosted để nhận webhook
  • AI API key: Gemini (miễn phí) hoặc OpenAI

Tùy chọn:

  • Website đã có → dùng làm knowledge base cho RAG
  • Google Sheets → lưu lead khách
  • Telegram bot → nhận alert lead mới

Bước 1: Tạo Zalo Official Account

  1. Truy cập https://oa.zalo.me/ → đăng nhập bằng Zalo cá nhân
  2. Click "Tạo OA mới"
  3. Chọn loại:
    • OA Doanh nghiệp (cần giấy phép) — recommended
    • OA Cá nhân — hạn chế tính năng, 100 msg/ngày
  4. Điền thông tin: tên brand, mô tả, avatar, cover
  5. Xác thực SĐT
  6. Chờ Zalo duyệt (thường 1-3 ngày)

Lưu ý: OA miễn phí có giới hạn gửi message. Cần upgrade Premium (~500k/tháng) nếu > 2000 message/tháng.

Bước 2: Lấy Access Token

Zalo có 2 loại token:

App Access Token (dài hạn, KHÔNG đổi)

Dùng để gọi API generic, không specific per-user.

User Access Token (ngắn hạn, đổi 90 ngày)

Dùng để gửi message cho từng user cụ thể. Đây là token bạn cần.

Quy trình:

  1. Vào https://developers.zalo.me/
  2. Tạo Zalo App, chọn platform "Messaging on Zalo Official Account"
  3. Add scope: send_messages, read_msg
  4. Link app với OA của bạn (OA admin phải duyệt)
  5. OAuth flow để lấy access_token + refresh_token:
    https://oauth.zaloapp.com/v4/oa/permission?app_id=<APP_ID>&redirect_uri=<YOUR_CALLBACK>
    
  6. User Zalo click → redirect về callback với code
  7. Dùng code → lấy access_token:
    POST https://oauth.zaloapp.com/v4/oa/access_token
    app_id=<APP_ID>&app_secret=<APP_SECRET>&code=<CODE>
    

Result:

{
  "access_token": "abc123...",
  "expires_in": 90000,
  "refresh_token": "xyz789..."
}

Ghi chú: Lưu refresh_token để auto-renew access_token mỗi 90 ngày. Nếu quên → app ngừng hoạt động.

Bước 3: Setup Webhook nhận message

Zalo gửi webhook POST đến URL bạn config mỗi khi có event (message, follow, unfollow, v.v.).

Khai báo webhook URL

  1. Zalo Developer → App → Webhook
  2. Điền URL: https://chatbot.ntdungdev.id.vn/webhook/zalo
  3. Chọn event: user_send_text, user_send_image, user_send_file, follow, unfollow
  4. Verify URL (Zalo gửi challenge, server phải response đúng)

Webhook payload ví dụ (user gửi text)

{
  "app_id": "1234567890",
  "event_name": "user_send_text",
  "sender": {
    "id": "999000111"
  },
  "recipient": {
    "id": "OA_ID"
  },
  "message": {
    "text": "Bảng alu 2m x 0.8m giá bao nhiêu em?",
    "msg_id": "msg_abc123"
  },
  "timestamp": "1744500000000"
}

Verify signature (bảo mật)

Zalo ký mỗi request bằng HMAC. Server phải verify trước khi xử lý:

import hmac
import hashlib

def verify_zalo_signature(body: bytes, signature: str, app_secret: str) -> bool:
    expected = hmac.new(app_secret.encode(), body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

KHÔNG skip bước này — nếu không verify, attacker có thể giả message làm spam bot.

Bước 4: Xử lý message + gửi response bằng AI

Pipeline khi nhận text message

Zalo → Webhook → n8n → AI (RAG) → Gửi response về Zalo

Setup n8n workflow

  1. Webhook node: lắng nghe POST /webhook/zalo
  2. Verify signature (Function node)
  3. Parse message: lấy sender.id, message.text
  4. Lookup chat history (Google Sheets hoặc DB) — để AI có context
  5. Call AI (HTTP Request tới Gemini/OpenAI/OpenClaw):
    • Prepend system prompt + history + message mới
    • Nhận response
  6. Save chat log vào Google Sheets
  7. Gửi response về Zalo (HTTP POST):
    POST https://openapi.zalo.me/v3.0/oa/message/cs
    Headers: access_token=<TOKEN>
    Body: {
      "recipient": {"user_id": "<SENDER_ID>"},
      "message": {"text": "<AI_RESPONSE>"}
    }
    

Sample response code (Node.js)

async function sendZaloMessage(userId, text, accessToken) {
    const res = await fetch('https://openapi.zalo.me/v3.0/oa/message/cs', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'access_token': accessToken
        },
        body: JSON.stringify({
            recipient: { user_id: userId },
            message: { text: text }
        })
    });
    return await res.json();
}

Bước 5: Tích hợp AI với RAG (Knowledge Base)

Để bot biết sản phẩm/giá, cần RAG. Xem chi tiết trong bài RAG là gì?.

Quick setup:

  1. Upload catalogue/PDF/website content vào Qdrant hoặc Google Sheets FAQ
  2. Khi nhận message, search top-K chunks liên quan
  3. Ghép vào prompt AI:
    [Knowledge Base]
    {retrieved_chunks}
    
    [User question]
    {message_text}
    
    [Instruction]
    Trả lời khách theo data trên. Nếu không có → nói "em cần xác nhận".
    

Bước 6: Handle các loại message khác

Image (khách gửi ảnh)

  • Event: user_send_image
  • Payload có attachments chứa URL ảnh
  • Pipeline: download ảnh → gửi Gemini Vision → extract thông tin → trả lời

Sticker / Emoji

  • Event: user_send_sticker
  • Bot thường reply text chuẩn ("Dạ em chào anh/chị")

File (PDF, DOCX)

  • Event: user_send_file
  • Download → parse text (PyPDF2 / docx) → feed AI

Follow (khách follow OA lần đầu)

  • Event: follow
  • Trigger welcome message tự động:
    "Dạ em chào anh/chị! Em là trợ lý AI của shop.
    Em có thể tư vấn sản phẩm, báo giá, đặt hàng 24/7 ạ.
    Anh/chị cần hỗ trợ gì ạ?"
    

Bước 7: Testing

Test tool

  1. Zalo Developer Console → Test Webhook
  2. ngrok cho local dev: ngrok http 3000 → config URL ngrok vào Zalo webhook
  3. Postman để test gửi API

Test cases

  • User gửi "Xin chào" → Bot chào lại
  • User gửi câu hỏi giá → Bot báo đúng giá
  • User gửi ảnh → Bot nhận diện / xử lý
  • User gửi câu vớ vẩn → Bot xin lỗi, hỏi lại
  • User cho SĐT → Bot lưu vào CRM + notify sale

10 lỗi thường gặp

1. Webhook không nhận được message

  • Kiểm tra URL có HTTPS, valid SSL certificate
  • Firewall có mở port 443 không
  • Zalo logs trong Developer Console có error không

2. Signature invalid

  • Sai app_secret (check lại Developer → App Settings)
  • Body phải là raw bytes khi verify, không phải parsed JSON

3. Access token expired

  • Token chỉ valid 90 ngày
  • Setup cron job auto-refresh hàng tuần
  • Dùng refresh_token để lấy token mới

4. Bot bị rate limit

  • Zalo giới hạn ~5 msg/s
  • Implement queue (Redis/RabbitMQ) + throttle

5. Bot trả 2 lần

  • Webhook chạy 2 lần do retry
  • Lưu msg_id vào DB, dedupe

6. Bot trả chậm (>10s)

  • AI model chậm → switch sang Gemini Flash
  • RAG search chậm → optimize index
  • User timeout, không thấy reply → implement typing indicator

7. Bot nói tiếng Anh thay vì tiếng Việt

  • System prompt phải chỉ rõ: "LUÔN trả lời bằng tiếng Việt"
  • Một số model tự động detect language, force bằng prompt

8. Khách gửi link, bot bị lỗi

  • Filter URL trước khi feed AI
  • Hoặc AI skip URL, chỉ xử lý text

9. Bot không biết context conversation

  • Chưa load chat history vào prompt
  • Phải truyền 5-10 tin gần nhất

10. OA bị Zalo suspend

  • Do gửi spam / bulk message
  • Tuân thủ policy: chỉ reply khi user chủ động nhắn trước
  • Không gửi link affiliate, không hứa hẹn quá

Chi phí vận hành thực tế

Small scale (< 1000 msg/tháng)

  • Zalo OA free: miễn phí
  • Gemini Flash: ~50k/tháng
  • Server n8n: tự host 200k/tháng
  • Tổng: ~250k/tháng

Medium (5000-10000 msg/tháng)

  • Zalo Premium: 500k/tháng
  • Gemini Flash: ~500k/tháng
  • VPS riêng: 800k/tháng
  • Tổng: ~1.8tr/tháng

Large (50000+ msg/tháng)

  • Zalo Enterprise: 2-5tr/tháng (tùy volume)
  • Gemini/GPT-4: 2-5tr/tháng
  • VPS dedicated: 2tr/tháng
  • Tổng: ~10tr/tháng (nhưng tự sinh ra 100tr+ doanh thu)

Lời khuyên cuối

  1. Bắt đầu với OA free test trước 1 tháng
  2. Setup webhook đúng ngay từ đầu (verify signature, idempotent)
  3. Monitor lỗi qua Sentry hoặc n8n logs
  4. Backup data khách (không để mất trong case Zalo thay đổi API)
  5. Tuân thủ policy Zalo — không spam, không false advertising

Cần setup chatbot AI cho Zalo OA?

Setup Zalo + AI + RAG tốn 10-15h nếu tự làm. Chúng tôi làm trọn gói trong 6-7 ngày, bao gồm:

  • Tạo Zalo OA (hỗ trợ verify business)
  • Setup webhook + AI với RAG tự động
  • Tích hợp Google Sheets CRM
  • Alert Telegram cho sale
  • Maintain token auto-refresh

👉 Xem gói Business 3 kênh (Web + FB + Zalo) · 📞 0373 527 362

Đọc tiếp: So sánh Flow bot vs AI Chatbot · 5 lỗi chết người khi làm chatbot

Cần triển khai chatbot cho doanh nghiệp?

Gửi nhu cầu, chúng tôi phản hồi tư vấn kỹ thuật trong 24h làm việc.

Liên hệ tư vấn