ZaloSendMessage Node - Gửi tin nhắn đa năng trong n8n

@Nguyễn Ngô Thượng//~11 phút đọc0
Chia sẻ:
ZaloSendMessage Node - Gửi tin nhắn đa năng trong n8n

Tổng quan

ZaloSendMessage là node cốt lõi để gửi tin nhắn Zalo với đầy đủ tính năng như tin nhắn text, ảnh, file, video, markdown formatting, mention người dùng, quote reply và nhiều hơn nữa.

i

🆕 Cập nhật v1.1.6 - Hỗ trợ gửi video qua URL hoặc binary file, tự động tạo thumbnail và lấy metadata video!

Use Cases chính

  • 📤 Gửi tin nhắn marketing hàng loạt
  • 🤖 Auto-reply khách hàng
  • 📢 Thông báo hệ thống
  • 📊 Báo cáo tự động
  • 🎉 Chúc mừng sinh nhật/sự kiện
  • 🎬 Gửi video sản phẩm/hướng dẫn

Features

ZaloSendMessage hỗ trợ nhiều tính năng mạnh mẽ:

1. Markdown Formatting

**Bold text**
_Italic text_
[red]Red color text[/red]
[blue]Blue color text[/blue]

2. Gửi Ảnh

  • Single image (URL)
  • Multiple images (array of URLs)
  • Auto HEIC/HEIF → JPEG conversion
  • Support local files & remote URLs

3. Gửi Video 🆕

  • URL Mode: Gửi video từ URL công khai
  • Binary Mode: Gửi video từ file (upload từ HTTP Request, Read File...)
  • Tự động tạo thumbnail từ video (cần ffmpeg)
  • Tự động lấy metadata (duration, width, height) từ video (cần ffprobe)
  • Hỗ trợ định dạng MP4
  • Upload tự động lên hosting tạm nếu dùng binary
!

Yêu cầu cho tính năng Video - Với URL Mode: Video URL phải public accessible (Zalo server cần download được) - Với Binary Mode: Server n8n cần cài ffmpeg để tự động tạo thumbnail - Nếu không có ffmpeg, bạn cần cung cấp thumbnail URL thủ công

4. Gửi Files

  • Documents (PDF, DOCX, XLSX, etc.)
  • Audio
  • Max size: 50MB/file

5. Quote Reply

Trích dẫn tin nhắn trước đó:

{
  "quoteMessageId": "message_id_here"
}

6. @Mention Users 🆕 Enhanced

Tag người dùng trong tin nhắn với syntax mới trực tiếp trong message:

Syntax hỗ trợ:

SyntaxMô tảVí dụ
@[uid]Mention user theo ID@[2234791809511721207] Hello!
@allMention tất cả (group only)@all Xin chú ý!

Ví dụ sử dụng:

{
  "message": "@[2234791809511721207] please review và @all check this!"
}

Kết quả hiển thị: @user please review và @all check this!

i

Lưu ý Mention: - Mention chỉ hoạt động trong GROUP chat (không phải chat 1-1) - @[uid] sẽ hiển thị là @user trên Zalo - @all mention tất cả thành viên trong group - Có thể kết hợp nhiều mention trong 1 tin nhắn

7. Priority Levels

  • Mặc định: Normal message
  • Quan trọng: Important (yellow)
  • Khẩn cấp: Urgent (red)

8. TTL (Time To Live)

Tự xóa tin nhắn sau X giây:

{
  "ttl": 300 // Xóa sau 5 phút
}

Parameters

Required Parameters

ParameterTypeMô tả
CredentialCredentialZalo credential (từ ZaloLoginByQr)
ToStringUser ID hoặc Group ID nhận tin
MessageStringNội dung tin nhắn

Optional Parameters

ParameterTypeDefaultMô tả
Message TypeDropdownTexttext / image / file / video / sticker
ImagesString/Array-URL ảnh (single hoặc array)
FilesString/Array-URL file đính kèm
Quote Message IDString-ID tin nhắn để quote reply
MentionsArray[]Danh sách user IDs để mention
PriorityDropdownNormalNormal / Important / Urgent
TTLNumber-Thời gian tự xóa (giây)
WidthNumberAutoChiều rộng ảnh (px)
HeightNumberAutoChiều cao ảnh (px)

Video Parameters (khi Message Type = video) 🆕

ParameterTypeDefaultMô tả
Video SourceDropdownurlurl (từ URL) hoặc binary (từ file)
Video URLString-URL video công khai (cho URL mode)
Video Binary PropertyStringdataTên property chứa binary (cho Binary mode)
Thumbnail URLString-URL thumbnail (auto nếu có ffmpeg)
Video MessageString-Tin nhắn đi kèm video
Auto Video MetadataBooleantrueTự động lấy duration/width/height
Video DurationNumberAutoThời lượng video (ms)
Video WidthNumberAutoChiều rộng video (px)
Video HeightNumberAutoChiều cao video (px)

Examples

Example 1: Gửi tin nhắn text đơn giản

Scenario: Gửi tin nhắn chào khách hàng

{
  "nodes": [
    {
      "name": "Send Welcome",
      "type": "n8n-nodes-zalo-nnt.zaloSendMessage",
      "parameters": {
        "toId": "{{$json.userId}}",
        "message": "Chào mừng bạn đến với dịch vụ của chúng tôi! 👋"
      },
      "credentials": {
        "zaloApi": "Zalo Main Account"
      }
    }
  ]
}

Result: Khách hàng nhận tin nhắn chào mừng ngay sau khi đăng ký.


Example 2: Gửi tin với Markdown formatting

Scenario: Gửi thông báo quan trọng với format đẹp

{
  "parameters": {
    "toId": "user123",
    "message": "**THÔNG BÁO QUAN TRỌNG**\n\nĐơn hàng #12345 của bạn đã được *xác nhận*.\n\n[blue]Thời gian giao hàng dự kiến:[/blue] 2-3 ngày\n[red]Tổng tiền:[/red] 500,000 VNĐ",
    "priority": "Important"
  }
}

Result: Tin nhắn được highlight với màu sắc và độ ưu tiên cao.


Example 3: Gửi nhiều ảnh

Scenario: Gửi album sản phẩm mới

{
  "parameters": {
    "toId": "group789",
    "message": "🎉 Ra mắt bộ sưu tập mùa hè 2024!",
    "messageType": "image",
    "images": [
      "https://example.com/image1.jpg",
      "https://example.com/image2.jpg",
      "https://example.com/image3.jpg"
    ]
  }
}

Result: Tin nhắn kèm 3 ảnh sản phẩm.


Example 4: Quote Reply với Mention 🆕

Scenario: Trả lời câu hỏi khách hàng với mention syntax mới

{
  "parameters": {
    "toId": "group123",
    "message": "@[{{$json.userId}}] Cảm ơn bạn đã hỏi! Sản phẩm này còn hàng nhé 😊",
    "quoteMessageId": "{{$json.originalMessageId}}"
  }
}

Result: Tin nhắn trích dẫn câu hỏi gốc và tag khách hàng. Hiển thị: @user Cảm ơn bạn đã hỏi!...

Ví dụ với @all:

{
  "parameters": {
    "toId": "group123",
    "message": "@all Thông báo quan trọng: Meeting lúc 3PM hôm nay!"
  }
}

Result: Tất cả thành viên trong group được mention.


Example 5: Gửi file với TTL

Scenario: Gửi file báo cáo tự xóa sau 1 giờ

{
  "parameters": {
    "toId": "group_managers",
    "message": "📊 Báo cáo bán hàng hôm nay (tự xóa sau 1h)",
    "messageType": "file",
    "files": "https://example.com/daily-report.pdf",
    "ttl": 3600
  }
}

Result: File được gửi và tự động xóa sau 3600 giây (1 giờ).


Example 6: Gửi video từ URL 🆕

Scenario: Gửi video hướng dẫn sản phẩm từ URL

{
  "parameters": {
    "toId": "user123",
    "messageType": "video",
    "videoSource": "url",
    "videoUrl": "https://example.com/product-guide.mp4",
    "thumbnailUrl": "https://example.com/thumbnail.jpg",
    "videoMessage": "🎬 Video hướng dẫn sử dụng sản phẩm mới!",
    "autoVideoMetadata": true
  }
}

Result: Video được gửi với thumbnail và message đi kèm. Duration/width/height được tự động detect.

i

Lưu ý: Video URL phải public accessible để Zalo server có thể download. Nếu không cung cấp thumbnailUrl, hệ thống sẽ cố gắng tự động tạo thumbnail (cần ffmpeg trên server).


Example 7: Gửi video từ Binary (HTTP Request → Zalo) 🆕

Scenario: Download video từ API rồi gửi qua Zalo

Workflow structure:

HTTP Request (download video) → ZaloSendMessage (binary mode)

HTTP Request node (download video):

{
  "parameters": {
    "url": "https://api.example.com/videos/123.mp4",
    "responseFormat": "file"
  }
}

ZaloSendMessage node:

{
  "parameters": {
    "toId": "group789",
    "messageType": "video",
    "videoSource": "binary",
    "videoBinaryProperty": "data",
    "videoMessage": "📹 Video mới từ hệ thống!",
    "autoVideoMetadata": true
  }
}

Result:

  1. Video được upload tự động lên hosting tạm (catbox.moe)
  2. Thumbnail được tự động tạo và upload (nếu có ffmpeg)
  3. Video được gửi đến Zalo group
!

Yêu cầu Binary Mode: - Server n8n cần cài ffmpeg để tự động tạo thumbnail - Nếu không có ffmpeg, bạn phải cung cấp thumbnailUrl thủ công - Video sẽ được upload lên catbox.moe (hosting tạm, có thể bị xóa sau 1 tháng)


Example 8: Gửi video với metadata thủ công 🆕

Scenario: Gửi video khi server không có ffmpeg/ffprobe

{
  "parameters": {
    "toId": "user456",
    "messageType": "video",
    "videoSource": "url",
    "videoUrl": "https://cdn.example.com/video.mp4",
    "thumbnailUrl": "https://cdn.example.com/video-thumb.jpg",
    "videoMessage": "Video sản phẩm",
    "autoVideoMetadata": false,
    "videoDuration": 45000,
    "videoWidth": 1920,
    "videoHeight": 1080
  }
}

Result: Video được gửi với metadata được chỉ định thủ công (duration: 45 giây, 1920x1080).


Common Use Cases

1. Marketing Campaign

Gửi tin nhắn hàng loạt với personalization:

// Workflow logic
// 1. Load customers từ Google Sheets
// 2. Template message với personalization
// 3. Send to each customer với delay

const message = `Chào ${customerName}, đặc biệt cho ${company}: Giảm 20% hôm nay!`;

2. Customer Support Auto-reply

Workflow tự động trả lời:

Trigger: ZaloMessageTrigger
Condition: message contains 'giá' or 'price'
Action: ZaloSendMessage with price list

3. System Monitoring

Gửi alert khi có lỗi:

{
  "parameters": {
    "toId": "group_tech_team",
    "message": "🚨 **CẢNH BÁO HỆ THỐNG**\n\nLỗi: {{$json.error}}\nTime: {{$now}}",
    "priority": "Urgent"
  }
}

Advanced Configuration

HEIC/HEIF Auto-conversion

Node tự động convert ảnh HEIC/HEIF (từ iPhone) sang JPEG:

{
  "images": "https://example.com/photo.heic"
  // Tự động convert → JPEG
}

Batch Sending với Rate Limiting

Gửi hàng loạt an toàn:

// Function node
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

for (let i = 0; i < items.length; i++) {
  // Gửi tin nhắn
  await sendMessage(items[i]);

  // Delay 2 giây giữa các tin
  await delay(2000);
}

Dynamic Mentions 🆕

Mention nhiều người từ data với syntax mới:

// Function node - Build message with mentions
const participants = $json.participants; // [{userId: "123"}, {userId: "456"}]

// Build mention string directly in message
const mentionTags = participants.map((p) => `@[${p.userId}]`).join(" ");

return {
  message: `Chào mừng ${mentionTags} - ${participants.length} thành viên mới!`,
};
// Result: "Chào mừng @[123] @[456] - 2 thành viên mới!"
// Display: "Chào mừng @user @user - 2 thành viên mới!"

Mention all + specific users:

return {
  message: `@all Thông báo: @[${$json.adminId}] vừa thêm tính năng mới!`,
};

Troubleshooting

❌ Lỗi: "Failed to send message"

Nguyên nhân:

  • Credential expired
  • User ID không đúng
  • Network issues

Giải pháp:

  1. Kiểm tra credential: Re-authenticate nếu cần
  2. Verify User ID (check với ZaloUser node)
  3. Check n8n logs

❌ Ảnh không gửi được

Nguyên nhân:

  • URL không public
  • File size quá lớn (>10MB)
  • Format không hỗ trợ

Giải pháp:

  • Đảm bảo URL public accessible
  • Resize ảnh < 10MB
  • Sử dụng format: JPG, PNG, GIF, HEIC

❌ Markdown không render

Nguyên nhân: Syntax sai

Đúng:

**bold** *italic* [red]text[/red]

Sai:

<b>bold</b> <red>text</red>

❌ Mention không hoạt động 🆕

Nguyên nhân:

  • Sử dụng mention trong chat 1-1 (chỉ hoạt động trong GROUP)
  • User ID không hợp lệ
  • Syntax mention sai

Giải pháp:

  1. Đảm bảo gửi mention trong GROUP chat, không phải chat 1-1
  2. Sử dụng đúng syntax:
    • @[uid] → Mention user cụ thể
    • @all → Mention tất cả
  3. Lấy đúng User ID từ ZaloUser node hoặc ZaloMessageTrigger
  4. Kiểm tra user có trong group không

Ví dụ syntax đúng:

@[2234791809511721207] Hello!   ✅
@all Check this!                ✅
@username Hello!                ❌ (không hỗ trợ mention by name)

❌ Video lỗi "Tham số không hợp lệ" 🆕

Nguyên nhân:

  • Thumbnail URL không hợp lệ hoặc không accessible
  • Video URL không public
  • Thiếu thumbnail (và không có ffmpeg để tự tạo)

Giải pháp:

  1. Kiểm tra thumbnail URL có accessible không (mở thử trên browser)
  2. Đảm bảo video URL public (không cần auth)
  3. Nếu dùng Binary mode: cài ffmpeg hoặc cung cấp thumbnailUrl thủ công

❌ Video Binary mode không tạo được thumbnail 🆕

Nguyên nhân: Server n8n không có ffmpeg/ffprobe

Giải pháp (Docker):

# Thêm vào Dockerfile
FROM n8nio/n8n:latest
USER root
RUN apk add --no-cache ffmpeg
USER node

Hoặc rebuild container với ffmpeg:

docker-compose down
docker-compose build --no-cache
docker-compose up -d

Giải pháp (workaround): Cung cấp thumbnailUrl thủ công thay vì dựa vào auto-generate.

❌ Video upload failed (Binary mode) 🆕

Nguyên nhân:

  • Catbox.moe hosting tạm thời unavailable
  • Video quá lớn (>200MB)
  • Network timeout

Giải pháp:

  1. Thử lại sau vài phút
  2. Giảm kích thước video
  3. Sử dụng URL mode với video đã upload lên CDN

❌ Video metadata không đúng 🆕

Nguyên nhân: ffprobe không detect được hoặc không có

Giải pháp:

  • Tắt autoVideoMetadata và nhập thủ công videoDuration, videoWidth, videoHeight
  • Cài ffprobe (đi kèm ffmpeg)

Rate Limiting

Zalo có giới hạn số tin nhắn/phút để tránh spam:

LoạiGiới hạnKhuyến nghị
Tin cá nhân~30/phútDelay 2s/tin
Tin nhóm~60/phútDelay 1s/tin
Ảnh/File~20/phútDelay 3s/tin

Best practice: Sử dụng delay 2-3 giây giữa các tin nhắn.


Tips & Best Practices

Pro Tips - (1) Personalization: Sử dụng {{$json.name}} để cá nhân hóa tin nhắn (2) A/B Testing: Test message templates khác nhau (3) Tracking: Log message IDs để track delivery (4) Retry Logic: Thêm retry khi gửi failed (5) Template Library: Tạo thư viện templates tái sử dụng


Bước tiếp theo

Trong bài tiếp theo, chúng ta sẽ tìm hiểu về ZaloGroup Node - node quản lý nhóm Zalo toàn diện với 17 operations.

Bài viết hữu ích?

Chia sẻ để nhiều người biết đến!

Chia sẻ:

>_ LLM-Friendly Copy

Copy as Markdown to use with ChatGPT, Claude, or other AI tools

2,373 words|15,543 characters

//Bình luận

Bài viết liên quan

Khám phá thêm những bài viết cùng chủ đề với ZaloSendMessage Node - Gửi tin nhắn đa năng trong n8n

Bài viết hữu ích? Hãy kết nối với Diginno!

Chúng tôi giúp doanh nghiệp SME ứng dụng AI và automation vào quy trình làm việc - từ tư vấn chiến lược đến triển khai thực tế.