Cách sử dụng Brevo API cho SMS Marketing hiệu quả

Ashley Innocent

Ashley Innocent

24 tháng 3 2026

Cách sử dụng Brevo API cho SMS Marketing hiệu quả

Apidog cho doanh nghiệp

Triển khai tại chỗ

SSO & RBAC

Tuân thủ SOC 2

Khám phá Apidog Enterprise

Tóm tắt

Các API của Brevo cho phép bạn gửi email tiếp thị, email giao dịch và tin nhắn SMS theo chương trình. Bạn xác thực bằng khóa API, gửi yêu cầu đến api.brevo.com và sử dụng webhook để theo dõi việc gửi và tương tác. Để thử nghiệm, hãy sử dụng Apidog để xác thực payload, kiểm tra trình xử lý webhook và đảm bảo tích hợp của bạn xử lý các email bị trả lại và hủy đăng ký một cách chính xác.

Giới thiệu

Brevo (trước đây là Sendinblue) xử lý hàng triệu email mỗi ngày cho hơn 500.000 doanh nghiệp. Nó xử lý các chiến dịch tiếp thị, email giao dịch, tiếp thị SMS và quy trình tự động hóa.

API email có vẻ đơn giản – gửi một tin nhắn là xong. Nhưng các hệ thống email sản xuất cần xử lý các email bị trả lại, khiếu nại spam, hủy đăng ký và thời gian gửi. Brevo quản lý sự phức tạp này để bạn không cần phải làm.

API bao gồm ba trường hợp sử dụng chính:

💡
Nếu bạn đang tích hợp email vào ứng dụng của mình, Apidog giúp bạn kiểm tra các mẫu, xác thực payload của webhook và đảm bảo tích hợp của bạn hoạt động trên các ứng dụng email khác nhau. Bạn có thể mô phỏng phản hồi của Brevo trong quá trình phát triển và kiểm tra việc xử lý lỗi mà không cần gửi email thật.
button
button

Xác thực và thiết lập

Lấy khóa API

  1. Đăng nhập vào Brevo
  2. Đi tới SMTP & API → API Keys
  3. Tạo một khóa mới với các quyền thích hợp
  4. Lưu trữ khóa một cách an toàn

Khóa API nằm trong tiêu đề api-key:

curl -X GET "https://api.brevo.com/v3/account" \
  -H "accept: application/json" \
  -H "api-key: your-api-key-here"

URL cơ sở API

Tất cả các yêu cầu đều được gửi đến:

https://api.brevo.com/v3/

Giới hạn tỷ lệ

Brevo giới hạn số lượng yêu cầu theo gói:

Kiểm tra tiêu đề X-RateLimit-Remaining để theo dõi mức sử dụng.

Gửi email giao dịch

Email giao dịch là những tin nhắn riêng lẻ được kích hoạt bởi hành động của người dùng. Hãy nghĩ đến việc đặt lại mật khẩu, xác nhận đơn hàng, email chào mừng.

Gửi một email đơn giản

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "accept: application/json" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "sender": {
      "name": "Your App",
      "email": "noreply@yourapp.com"
    },
    "to": [
      {
        "email": "user@example.com",
        "name": "John Doe"
      }
    ],
    "subject": "Welcome to Our Platform",
    "htmlContent": "<html><body><h1>Welcome!</h1><p>Thanks for signing up.</p></body></html>",
    "textContent": "Welcome! Thanks for signing up."
  }'

Phản hồi:

{
  "messageId": "<20260324123456.123456@relay.brevo.com>"
}

Sử dụng mẫu

Tạo mẫu trong trình chỉnh sửa trực quan của Brevo, sau đó gửi theo ID:

curl -X POST "https://api.brevo.com/v3/smtp/email" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "templateId": 15,
    "to": [
      {
        "email": "user@example.com",
        "name": "John Doe"
      }
    ],
    "params": {
      "name": "John",
      "order_number": "ORD-12345",
      "tracking_url": "https://tracking.example.com/ORD-12345"
    }
  }'

Các biến mẫu sử dụng dấu ngoặc kép:

<p>Chào {{params.name}},</p>
<p>Đơn hàng của bạn {{params.order_number}} đã được vận chuyển.</p>
<p><a href="{{params.tracking_url}}">Theo dõi gói hàng của bạn</a></p>

Gửi kèm tệp đính kèm

const response = await fetch('https://api.brevo.com/v3/smtp/email', {
  method: 'POST',
  headers: {
    'api-key': process.env.BREVO_API_KEY,
    'content-type': 'application/json'
  },
  body: JSON.stringify({
    sender: { name: 'Your App', email: 'noreply@yourapp.com' },
    to: [{ email: 'user@example.com' }],
    subject: 'Your Invoice',
    htmlContent: '<p>Vui lòng tìm hóa đơn của bạn đính kèm.</p>',
    attachment: [
      {
        name: 'invoice.pdf',
        content: base64EncodedPdfContent
      }
    ]
  })
})

Chiến dịch tiếp thị

Email tiếp thị được gửi đến danh sách liên hệ. Brevo xử lý các liên kết hủy đăng ký, lên lịch và phân tích.

Tạo một chiến dịch

curl -X POST "https://api.brevo.com/v3/emailCampaigns" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "name": "March Newsletter",
    "subject": "What'\''s New in March",
    "sender": {
      "name": "Your Brand",
      "email": "newsletter@yourbrand.com"
    },
    "type": "classic",
    "htmlContent": "<html><body>Nội dung bản tin tại đây...</body></html>",
    "recipients": {
      "listIds": [12, 15]
    },
    "scheduledAt": "2026-03-25T09:00:00+00:00"
  }'

Gửi ngay lập tức

curl -X POST "https://api.brevo.com/v3/emailCampaigns/{campaignId}/sendNow" \
  -H "api-key: your-api-key"

Lấy số liệu thống kê chiến dịch

curl -X GET "https://api.brevo.com/v3/emailCampaigns/{campaignId}" \
  -H "api-key: your-api-key"

Phản hồi bao gồm:

{
  "statistics": {
    "delivered": 4850,
    "opened": 1455,
    "clicked": 291,
    "unsubscribed": 12,
    "bounces": 150
  }
}

Quản lý liên hệ

Liên hệ là những người bạn gửi email đến. Tổ chức họ vào các danh sách và thêm các thuộc tính tùy chỉnh.

Tạo một liên hệ

curl -X POST "https://api.brevo.com/v3/contacts" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "email": "new.user@example.com",
    "attributes": {
      "FIRSTNAME": "Jane",
      "LASTNAME": "Smith",
      "PLAN": "premium"
    },
    "listIds": [12, 15],
    "updateEnabled": true
  }'

Cờ updateEnabled: true cập nhật các liên hệ hiện có thay vì thất bại.

Lấy chi tiết liên hệ

curl -X GET "https://api.brevo.com/v3/contacts/user@example.com" \
  -H "api-key: your-api-key"

Thêm vào danh sách

curl -X POST "https://api.brevo.com/v3/contacts/lists/12/contacts/add" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "emails": ["user1@example.com", "user2@example.com"]
  }'

Xóa khỏi danh sách

curl -X DELETE "https://api.brevo.com/v3/contacts/lists/12/contacts/remove" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "emails": ["user@example.com"]
  }'

Hủy đăng ký một liên hệ

curl -X PUT "https://api.brevo.com/v3/contacts/user@example.com" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "emailBlacklisted": true
  }'

Tiếp thị SMS

Brevo gửi tin nhắn SMS trên toàn cầu thông qua API SMS của họ.

Gửi một tin nhắn SMS

curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "sender": "YourApp",
    "recipient": "+15551234567",
    "content": "Mã xác minh của bạn là: 123456",
    "type": "transactional"
  }'

Gửi tin nhắn SMS tiếp thị

curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
  -H "api-key: your-api-key" \
  -H "content-type: application/json" \
  -d '{
    "sender": "YourBrand",
    "recipient": "+15551234567",
    "content": "Giảm giá chớp nhoáng! Giảm 50% chỉ hôm nay. Trả lời STOP để hủy đăng ký.",
    "type": "marketing"
  }'

Lấy số liệu thống kê SMS

curl -X GET "https://api.brevo.com/v3/transactionalSMS/statistics?startDate=2026-03-01&endDate=2026-03-31" \
  -H "api-key: your-api-key"

Webhooks để theo dõi

Webhooks thông báo cho ứng dụng của bạn về các sự kiện email: đã gửi, đã mở, đã nhấp, bị trả lại, đã hủy đăng ký.

Cấu hình webhooks

Trong bảng điều khiển Brevo: Cài đặt → Webhooks → Thêm webhook

Các sự kiện cần theo dõi:

Xử lý payload webhook

app.post('/webhooks/brevo', (req, res) => {
  const event = req.body
  
  switch (event.event) {
    case 'delivered':
      console.log(`Email ${event.messageId} đã được gửi đến ${event.email}`)
      break
    case 'opened':
      console.log(`Email đã được mở bởi ${event.email} vào lúc ${event.date}`)
      break
    case 'bounced':
      console.log(`Bị trả lại: ${event.email} - ${event.reason}`)
      // Đánh dấu liên hệ là không hợp lệ
      markContactBounced(event.email)
      break
    case 'spam':
      console.log(`Khiếu nại spam từ ${event.email}`)
      // Xóa khỏi tất cả các danh sách
      removeFromAllLists(event.email)
      break
    case 'unsubscribed':
      console.log(`Đã hủy đăng ký: ${event.email}`)
      break
  }
  
  res.status(200).send('OK')
})

Kiểm thử với Apidog

Các API email có các chế độ lỗi phức tạp. Bạn cần kiểm thử các mẫu, các email bị trả lại và webhook. Apidog giúp ích.

1. Mô phỏng việc gửi email

Trong quá trình phát triển, đừng gửi email thật. Hãy mô phỏng phản hồi:

pm.test('API Email chấp nhận payload hợp lệ', () => {
  const response = pm.response.json()
  pm.expect(response).to.have.property('messageId')
  pm.expect(response.messageId).to.match(/<.*@relay\.brevo\.com>/)
})

2. Kiểm thử xử lý webhook

Tạo các payload webhook mô phỏng trong Apidog:

{
  "event": "bounced",
  "email": "invalid@example.com",
  "messageId": "<12345@relay.brevo.com>",
  "reason": "hard_bounce",
  "date": "2026-03-24T12:00:00Z",
  "subject": "Chào mừng đến với nền tảng của chúng tôi"
}

Gửi đến điểm cuối webhook của bạn và xác minh rằng mã của bạn xử lý được nó.

3. Xác thực mẫu

Lưu payload mẫu và kiểm thử xem các biến có được thay thế đúng cách không:

pm.test('Các biến mẫu hợp lệ', () => {
  const payload = pm.request.body.toJSON()
  pm.expect(payload.params).to.have.property('name')
  pm.expect(payload.params).to.have.property('order_number')
})

4. Tách biệt môi trường

# Môi trường phát triển
BREVO_API_KEY: xkeysib-dev-xxx
BREVO_SENDER: dev@yourapp.com

# Môi trường sản xuất
BREVO_API_KEY: xkeysib-prod-xxx
BREVO_SENDER: noreply@yourapp.com

Kiểm thử API email Brevo với Apidog - miễn phí

Các lỗi và cách khắc phục thường gặp

400 Bad Request - Thiếu trường bắt buộc

Nguyên nhân: Payload thiếu các trường bắt buộc.

Cách khắc phục: Kiểm tra thông báo lỗi để biết chi tiết:

{
  "code": "invalid_parameter",
  "message": "sender.email là bắt buộc"
}

401 Unauthorized

Nguyên nhân: Khóa API không hợp lệ hoặc bị thiếu.

Cách khắc phục: Xác minh tiêu đề api-key được đặt đúng cách. Kiểm tra xem khóa có bị thu hồi không.

402 Payment Required

Nguyên nhân: Tài khoản đã vượt quá giới hạn hoặc thiếu tín dụng.

Cách khắc phục:

429 Too Many Requests

Nguyên nhân: Vượt quá giới hạn tỷ lệ.

Cách khắc phục: Triển khai chiến lược backoff lũy thừa:

async function sendWithRetry(email, retries = 3) {
  for (let i = 0; i < retries; i++) {
    const response = await sendEmail(email)
    if (response.status === 429) {
      await sleep(Math.pow(2, i) * 1000)
    } else {
      return response
    }
  }
  throw new Error('Đã vượt quá giới hạn tỷ lệ')
}

404 Contact not found

Nguyên nhân: Đang cố gắng cập nhật một liên hệ không tồn tại.

Cách khắc phục: Sử dụng updateEnabled: true khi tạo liên hệ:

{
  "email": "new@example.com",
  "updateEnabled": true
}

Thao tác này sẽ tạo hoặc cập nhật liên hệ.

Các lựa chọn thay thế và so sánh

Tính năng Brevo SendGrid Mailchimp Postmark
Giá 300 email/ngày miễn phí 100 email/ngày miễn phí 500 email/tháng miễn phí 100 email/tháng miễn phí
Email tiếp thị Không
Email giao dịch Hạn chế Có (chuyên biệt)
SMS Không Không Không
Tự động hóa Hạn chế
Trình chỉnh sửa mẫu Trực quan + mã Trực quan

Brevo nổi bật với sự hỗ trợ kết hợp email và SMS với giá cả cạnh tranh.

Các trường hợp sử dụng thực tế

Quy trình đặt hàng thương mại điện tử. Một cửa hàng trực tuyến sử dụng Brevo cho: xác nhận đơn hàng (giao dịch), thông báo vận chuyển (giao dịch), phục hồi giỏ hàng bị bỏ quên (tự động hóa tiếp thị) và các chương trình khuyến mãi hàng tuần (chiến dịch tiếp thị). Tất cả từ một tích hợp duy nhất.

Onboarding SaaS. Một công cụ quản lý dự án gửi email chào mừng, đặt lại mật khẩu và lời mời nhóm qua API giao dịch. Các email tiếp thị thông báo các tính năng mới cho người dùng đã đăng ký.

Xác minh SMS. Một ứng dụng fintech sử dụng API SMS của Brevo cho mã xác thực hai yếu tố. Điểm cuối SMS giao dịch gửi mã trong vài giây và các webhook theo dõi lỗi gửi để xử lý lại.

Kết luận

Đây là những gì bạn đã học được:

Các bước tiếp theo của bạn:

  1. Tạo tài khoản Brevo và lấy khóa API
  2. Gửi email giao dịch đầu tiên của bạn
  3. Tạo một mẫu trong trình chỉnh sửa trực quan
  4. Thiết lập các trình xử lý webhook cho các email bị trả lại và hủy đăng ký
  5. Kiểm thử với Apidog trong quá trình phát triển

Kiểm thử API email Brevo với Apidog - miễn phí

button

Câu hỏi thường gặp

Brevo và Sendinblue khác nhau như thế nào?Cùng một sản phẩm, tên mới. Sendinblue đổi thương hiệu thành Brevo vào năm 2023. Các API vẫn sử dụng api.brevo.com nhưng bạn sẽ thấy các tham chiếu Sendinblue trong tài liệu cũ hơn.

Tôi có thể gửi bao nhiêu email miễn phí?300 email mỗi ngày trong gói miễn phí. Đó là 9.000 email mỗi tháng. Để gửi nhiều hơn, hãy nâng cấp lên gói trả phí bắt đầu từ 25$/tháng cho 20.000 email.

Tôi có thể sử dụng Brevo cho email lạnh (cold emails) không?Về mặt kỹ thuật là có, nhưng rủi ro. Email lạnh có tỷ lệ bị trả lại và spam cao. Brevo theo dõi danh tiếng người gửi. Tỷ lệ khiếu nại cao có thể khiến tài khoản bị tạm ngưng. Hãy làm nóng tên miền của bạn trước và tuân thủ các thực hành tốt nhất về email.

Làm thế nào để xử lý các email bị trả lại?Lắng nghe các webhook bounced. Các email bị trả lại cứng (hard bounces - email không hợp lệ) nên loại bỏ vĩnh viễn các liên hệ. Các email bị trả lại mềm (soft bounces - hộp thư đầy, sự cố tạm thời) có thể được thử lại. Theo dõi tỷ lệ bị trả lại - nếu vượt quá 5%, danh tiếng người gửi của bạn sẽ giảm.

Sự khác biệt giữa email tiếp thị và email giao dịch là gì?Email giao dịch được kích hoạt bởi hành động của người dùng (mua hàng, đăng ký) và gửi đến một người nhận. Email tiếp thị là các chiến dịch được gửi đến nhiều người nhận cùng lúc. Brevo tách biệt chúng vì lý do khả năng gửi và tuân thủ.

Làm thế nào để thêm liên kết hủy đăng ký?Brevo tự động thêm các liên kết hủy đăng ký vào email tiếp thị. Đối với email giao dịch, hãy thêm liên kết của riêng bạn:

<a href="{{ unsubscribe_url }}">Hủy đăng ký</a>

Tôi có thể gửi email từ tên miền của riêng mình không?Có. Thiết lập các bản ghi SPF, DKIM và DMARC. Brevo cung cấp các giá trị trong Cài đặt → Người gửi & IP. Nếu không có xác thực phù hợp, email có thể vào thư rác.

Làm thế nào để lên lịch gửi email theo một múi giờ cụ thể?Sử dụng tham số scheduledAt với dấu thời gian ISO 8601:

{
  "scheduledAt": "2026-03-25T09:00:00-05:00"
}

Điều gì xảy ra nếu tôi đạt giới hạn tỷ lệ?Bạn sẽ nhận được lỗi 429. Phản hồi bao gồm tiêu đề X-RateLimit-Reset với số giây cho đến khi đặt lại. Triển khai chiến lược backoff lũy thừa hoặc xếp hàng email để gửi sau.

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API