
# Kênh tùy chỉnh

Kết nối bất kỳ nền tảng nhắn tin hoặc công cụ giao tiếp nào với nền tảng bằng cách sử dụng các kênh tùy chỉnh. Điều này cho phép bạn đưa tin nhắn từ các nền tảng như tiện ích trò chuyện trực tiếp trên trang web, hệ thống email, CRM hoặc bất kỳ dịch vụ nào khác vào hộp thư đến của bạn — và phản hồi chúng bằng Tác nhân AI của bạn.


---

## Kênh tùy chỉnh là gì?

Các kênh tùy chỉnh mở rộng nền tảng ra ngoài các nền tảng nhắn tin tích hợp sẵn ([WhatsApp](whatsapp-business.md), [SMS](sms.md), [Instagram](instagram-dms.md), [Messenger](facebook-messenger.md)). Với các kênh tùy chỉnh, bạn có thể:

- **Nhận tin nhắn** từ bất kỳ nền tảng bên ngoài nào vào hộp thư đến tập trung của nền tảng.
- **Gửi phản hồi** từ ứng dụng trở lại nền tảng bên ngoài của bạn một cách tự động.
- **Sử dụng Tác nhân AI** để phản hồi tin nhắn từ bất kỳ nguồn nào.
- **Theo dõi tất cả các cuộc hội thoại** cùng với các kênh khác của bạn trong một hộp thư đến duy nhất.

Đây là giải pháp lý tưởng cho các doanh nghiệp sử dụng các công cụ giao tiếp chuyên biệt, có nền tảng được xây dựng tùy chỉnh hoặc muốn tập trung tất cả tin nhắn của khách hàng tại một nơi.

::: note
**Lưu ý:** Các kênh tùy chỉnh yêu cầu một số thiết lập kỹ thuật. Nếu bạn hoặc nhóm của bạn không quen với việc tích hợp kỹ thuật, bạn có thể nhờ nhà phát triển web hoặc đội ngũ CNTT hỗ trợ phần này.
:::


---

## Cách thức hoạt động

Các kênh tùy chỉnh hoạt động bằng cách truyền tin nhắn qua lại giữa nền tảng bên ngoài của bạn và nền tảng bằng cách sử dụng **webhook** (các tin nhắn tự động được gửi giữa các hệ thống qua internet). Đây là quy trình:

```
Your Platform  ──(sends message to)──>  The App
                                           |
                                       AI Agent responds
                                       Contact saved
                                       Message stored
                                           |
The App  ──(sends reply to)──>  Your Platform
```

1. **Tin nhắn đến:** Nền tảng bên ngoài của bạn gửi tin nhắn đến một địa chỉ web (URL). Hãy coi đó là việc nền tảng của bạn "đăng" một tin nhắn vào hộp thư của nền tảng.
2. **Xử lý:** Nền tảng tạo hoặc cập nhật liên hệ, lưu trữ tin nhắn và yêu cầu Tác nhân AI tạo phản hồi (nếu được kích hoạt).
3. **Tin nhắn đi:** Khi nền tảng gửi phản hồi (dù là từ AI hay do bạn nhập), nó sẽ gửi tin nhắn đến một URL trên nền tảng của bạn, nơi hệ thống của bạn có thể chuyển nó đến người dùng cuối.

---

## Thiết lập tin nhắn đến (Từ nền tảng của bạn đến ứng dụng)

Để gửi tin nhắn từ nền tảng bên ngoài của bạn vào ứng dụng, nền tảng của bạn cần gửi dữ liệu đến URL sau. Nhà phát triển của bạn sẽ nhận ra đây là yêu cầu POST tiêu chuẩn (một cách phổ biến để một hệ thống gửi dữ liệu đến hệ thống khác qua internet).

### Nơi gửi tin nhắn

```
POST https://api.youraiconnector.com/v1/incoming_custom_channel_message?apiKey=YOUR_API_KEY
```

Thay thế `YOUR_API_KEY` bằng khóa API của bạn (một mã riêng tư chứng minh với nền tảng rằng nền tảng của bạn được phép gửi tin nhắn cho nó). Tìm hoặc tạo khóa này trong **Cài đặt → Tích hợp → Khóa API**.

### Định dạng tin nhắn

Gửi dữ liệu tin nhắn theo định dạng sau (JSON):

```json
{
  "customData": {
    "messageSid": "unique-message-id-123",
    "fromId": "user-456",
    "toId": "your-business-id",
    "body": "Hello, I have a question about your service.",
    "status": "received",
    "channel": "my-live-chat",
    "campaignId": "optional-campaign-id",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john@example.com",
    "mediaUrl": null,
    "mediaContentType": null
  },
  "messageType": "text"
}
```

**Ý nghĩa của từng phần:**
- `messageSid` - ID duy nhất cho tin nhắn cụ thể này (hệ thống của bạn tạo ra). Được sử dụng để ngăn chặn việc xử lý cùng một tin nhắn hai lần.
- `fromId` - Người gửi tin nhắn (có thể là ID người dùng, email hoặc số điện thoại từ hệ thống của bạn).
- `toId` - Định danh doanh nghiệp của bạn (có thể là bất kỳ nhãn nào bạn chọn).
- `body` - Nội dung tin nhắn thực tế.
- `channel` - Nhãn bạn chọn để xác định nguồn gốc tin nhắn (ví dụ: "website-chat", "email").

### Tham chiếu trường đầy đủ

| Trường | Bắt buộc? | Chức năng |
|---|---|---|
| `customData.messageSid` hoặc `customData.id` | Có | ID duy nhất cho tin nhắn này (ngăn trùng lặp) |
| `customData.fromId` | Có | Xác định người gửi tin nhắn (ví dụ: ID người dùng, email hoặc số điện thoại từ hệ thống của bạn) |
| `customData.toId` | Có | Xác định phía nhận (doanh nghiệp của bạn). Có thể là bất kỳ văn bản nào bạn chọn. |
| `customData.body` | Có | Nội dung tin nhắn thực tế. Không được để trống. |
| `customData.status` | Không | Trạng thái tin nhắn. Để trống để sử dụng mặc định (`"received"`). |
| `customData.channel` | Không | Nhãn cho nguồn (ví dụ: `"live-chat"`, `"email"`, `"my-crm"`). Giúp bạn xác định tin nhắn đến từ đâu trong hộp thư đến. |
| `customData.campaignId` | Không | ID chiến dịch/Tác nhân. Sử dụng cái này để định tuyến tin nhắn đến một cấu hình AI cụ thể. |
| `customData.firstName` | Không | Tên của liên hệ. Được bao gồm khi tạo hồ sơ liên hệ mới. |
| `customData.lastName` | Không | Họ của liên hệ. Được bao gồm khi tạo hồ sơ liên hệ mới. |
| `customData.email` | Không | Địa chỉ email của liên hệ. Được bao gồm khi tạo hồ sơ liên hệ mới. |
| `customData.mediaUrl` | Không | Liên kết đến tệp đính kèm (hình ảnh, video, âm thanh hoặc tài liệu). Cũng có thể là tệp được mã hóa base64 (xem bên dưới). |
| `customData.mediaContentType` | Không | Loại tệp (ví dụ: `"image/jpeg"`, `"video/mp4"`, `"audio/ogg"`, `"application/pdf"`). Bắt buộc nếu bạn bao gồm `mediaUrl`. |
| `messageType` | Không | Loại tin nhắn. Để trống cho văn bản thông thường. Đặt thành `"reaction"` cho phản ứng bằng biểu tượng cảm xúc. |

### Phản ứng bằng biểu tượng cảm xúc

Nếu nền tảng của bạn hỗ trợ phản ứng bằng biểu tượng cảm xúc (ví dụ: biểu tượng ngón tay cái giơ lên cho một tin nhắn), hãy gửi chúng dưới dạng phản ứng thay vì tin nhắn văn bản: đặt `messageType` thành `"reaction"` và chỉ đặt biểu tượng cảm xúc vào `customData.body`.

```json
{
  "messageType": "reaction",
  "customData": {
    "messageSid": "reaction-123",
    "fromId": "user-42",
    "toId": "my-business",
    "body": "👍"
  }
}
```

Trợ lý sau đó sẽ xử lý theo cách bạn mong đợi:

- Một phản ứng cho câu hỏi mà trợ lý đã đặt ra (ví dụ: "Thứ Năm có được không?") được coi là câu trả lời và trợ lý sẽ phản hồi.
- Một phản ứng cho tin nhắn kết thúc (ví dụ: "Nói chuyện sau nhé!") sẽ kết thúc cuộc trò chuyện một cách lặng lẽ. Không có phản hồi nào được gửi đi.

Nếu nền tảng của bạn chuyển đổi các phản ứng thành văn bản như "Đã phản ứng với: 👍", trợ lý sẽ thấy đó là một tin nhắn văn bản bình thường và tự quyết định xem có nên phản hồi hay không. Việc gửi đúng loại phản ứng sẽ tránh được điều đó.

### Những gì bạn nhận lại

Một yêu cầu thành công sẽ trả về:

```json
{
  "success": true,
  "messageId": "1234567890"
}
```

Nếu có sự cố xảy ra, bạn sẽ nhận được thông báo lỗi giải thích vấn đề:

```json
{
  "error": "Message body cannot be empty"
}
```

### Mã trạng thái

| Mã | Ý nghĩa |
|---|---|
| `200` | Thành công - tin nhắn đã được nhận và đang được xử lý |
| `400` | Có lỗi với yêu cầu của bạn - hãy kiểm tra xem có thiếu trường bắt buộc nào không hoặc nội dung tin nhắn có bị trống không |
| `401` | Khóa API không hợp lệ - hãy kiểm tra lại khóa trong **Cài đặt → Tích hợp → Khóa API** |
| `405` | Sai phương thức yêu cầu - đảm bảo bạn đang sử dụng POST, không phải GET |
| `500` | Đã xảy ra lỗi phía nền tảng - hãy thử lại sau vài phút |

> Nếu bạn đặt `customData.status`, giá trị duy nhất được chấp nhận là `"received"` — hãy bỏ qua hoàn toàn để sử dụng mặc định thay vì gửi bất kỳ giá trị nào khác, nếu không bạn sẽ nhận được lỗi `400`.

---

## Gửi tệp đính kèm (Hình ảnh, Video, Tệp tin)

Bạn có thể bao gồm tệp đính kèm (hình ảnh, video, âm thanh, tài liệu) cùng với tin nhắn của mình. Có hai cách để thực hiện việc này:

### Cách 1: Liên kết đến tệp

Nếu tệp đã được lưu trữ trực tuyến, hãy cung cấp URL (địa chỉ web) nơi nền tảng có thể tải xuống tệp đó:

```json
{
  "customData": {
    "messageSid": "msg-789",
    "fromId": "user-456",
    "toId": "business-1",
    "body": "Here is a photo of the issue.",
    "channel": "support-portal",
    "mediaUrl": "https://example.com/uploads/photo.jpg",
    "mediaContentType": "image/jpeg"
  },
  "messageType": "text"
}
```

### Cách 2: Nhúng tệp trực tiếp (Base64)

Nếu tệp không được lưu trữ trực tuyến, bạn có thể nhúng trực tiếp tệp đó vào tin nhắn dưới dạng văn bản được mã hóa (định dạng base64). Điều này thường thấy trong các tích hợp kỹ thuật nơi hệ thống của bạn tạo tệp ngay lập tức. Nền tảng sẽ tự động giải mã và lưu trữ tệp:

```json
{
  "customData": {
    "messageSid": "msg-790",
    "fromId": "user-456",
    "toId": "business-1",
    "body": "Screenshot attached.",
    "channel": "support-portal",
    "mediaUrl": "data:image/png;base64,iVBORw0KGgo...",
    "mediaContentType": "image/png"
  },
  "messageType": "text"
}
```

::: note
**Lưu ý:** Việc nhúng trực tiếp các tệp tin sẽ làm cho dữ liệu tin nhắn lớn hơn nhiều. Đối với các tệp lớn, tốt hơn là bạn nên lưu trữ tệp trực tuyến và gửi liên kết (Tùy chọn 1) thay vì nhúng trực tiếp.
:::


---

## Thiết lập tin nhắn gửi đi (từ nền tảng đến Nền tảng của bạn)

Khi nền tảng gửi phản hồi trên một kênh tùy chỉnh (dù là từ AI hay do bạn nhập), nó sẽ tự động gửi phản hồi đó đến một URL trên nền tảng của bạn để hệ thống của bạn có thể chuyển nó đến người dùng cuối.

> **Đặt URL webhook trước.** Bạn phải lưu URL webhook của kênh tùy chỉnh trước khi bất kỳ phản hồi nào có thể được gửi đi. Nếu không có URL nào được lưu, các phản hồi vẫn được tạo và lưu trữ, nhưng chúng sẽ không bao giờ được gửi đi — và chúng sẽ **không** hiển thị trạng thái "Thất bại", vì vậy không có gì trong hộp thư đến của bạn báo hiệu vấn đề. Luôn cấu hình URL webhook trước khi bắt đầu sử dụng thực tế.

### Cho ứng dụng biết nơi gửi phản hồi

1. Ở thanh bên trái, nhấp vào **Cài đặt** gần cuối trang.
2. Trong thanh điều hướng bên trái của Cài đặt, dưới mục **Kênh**, nhấp vào **Kênh**.
3. Tìm thẻ **Kênh tùy chỉnh** ở cuối trang (bên dưới Cổng SMS Android, iMessage, tiện ích trò chuyện trên trang web, Tài khoản Twilio và Tuân thủ quy định).
4. Nhập **URL Webhook** — URL trên nền tảng của bạn nơi AI sẽ gửi các tin nhắn đi (nhà phát triển của bạn thiết lập phần này để nhận và xử lý các phản hồi). URL này phải là **URL HTTPS công khai** — các địa chỉ `http://` và máy chủ không công khai sẽ bị từ chối.
5. Nhấp vào **Lưu**.



### Những gì nền tảng gửi đến Nền tảng của bạn

Khi nền tảng gửi phản hồi, nền tảng của bạn sẽ nhận được dữ liệu sau:

```json
{
  "contactId": "abc123",
  "messageId": "msg-456",
  "userId": "your-user-id",
  "body": "Thank you for your message! Here is the information you requested...",
  "toId": "user-456",
  "channel": "my-live-chat"
}
```

### Ý nghĩa của từng trường

| Trường | Nội dung chứa |
|---|---|
| `contactId` | ID nội bộ của nền tảng cho liên hệ này |
| `messageId` | ID duy nhất của tin nhắn này trong ứng dụng |
| `userId` | ID người dùng của bạn |
| `body` | Văn bản phản hồi |
| `toId` | ID của liên hệ trên nền tảng của bạn (trùng khớp với `fromId` bạn đã gửi trong tin nhắn đến) |
| `channel` | Nhãn kênh tùy chỉnh mà bạn đã gán |

Nền tảng của bạn nhận dữ liệu này và sử dụng nó để chuyển phản hồi đến người dùng cuối thông qua hệ thống của riêng bạn.

### Cách nền tảng theo dõi việc gửi tin

Sau khi gửi phản hồi đến nền tảng của bạn, nền tảng sẽ cập nhật trạng thái tin nhắn:

- **Đã gửi** - Nền tảng của bạn đã nhận tin nhắn thành công.
- **Thất bại** - Nền tảng của bạn đã trả về lỗi hoặc không thể kết nối. Nền tảng lưu trữ chi tiết lỗi cùng với tin nhắn để bạn có thể khắc phục sự cố.

---

## Gửi tin nhắn từ hệ thống của bạn đến ứng dụng

Ngoài việc nhận tin nhắn, bạn cũng có thể gửi tin nhắn đi thông qua kênh tùy chỉnh trực tiếp từ hệ thống của riêng mình. Điều này rất hữu ích khi bạn muốn bắt đầu một cuộc trò chuyện hoặc gửi một tin nhắn chủ động.

> **Yêu cầu về gói dịch vụ.** Việc gửi và đồng bộ hóa tin nhắn thông qua API yêu cầu gói dịch vụ bao gồm quyền truy cập API và ít nhất một kênh nhắn tin. Nếu bạn nhận được lỗi `403` "permission denied / feature not enabled" (từ chối quyền / tính năng chưa được bật), gói dịch vụ hiện tại của bạn không bao gồm tính năng này — hãy nâng cấp gói hoặc liên hệ với bộ phận hỗ trợ.

### Nơi gửi

```
POST https://api.youraiconnector.com/v1/send_custom_channel_message?apiKey=YOUR_API_KEY
```

### Định dạng tin nhắn

```json
{
  "customData": {
    "fromId": "user-456",
    "customChannel": "my-live-chat",
    "body": "Hello! How can I help you today?",
    "campaignId": "optional-campaign-id",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john@example.com"
  }
}
```

### Các trường bắt buộc

| Trường | Chức năng |
|---|---|
| `customData.fromId` | ID của liên hệ trên nền tảng của bạn |
| `customData.customChannel` | Tên kênh tùy chỉnh của bạn (ví dụ: "my-live-chat") |
| `customData.body` | Nội dung tin nhắn cần gửi |

Các trường tùy chọn (`campaignId`, `firstName`, `lastName`, `email`) hoạt động giống như trong tin nhắn đến — chúng giúp nền tảng tạo hoặc cập nhật hồ sơ liên hệ.

### Những gì bạn nhận lại

```json
{
  "success": true,
  "messageId": "generated-message-id",
  "contactId": "contact-id",
  "message": "Message sent successfully"
}
```

---

## Ghi lại các tin nhắn đã gửi từ hệ thống khác

Đôi khi bạn đã gửi tin nhắn cho một liên hệ từ một công cụ khác (ví dụ: quy trình làm việc trong một nền tảng khác) và bạn chỉ muốn nền tảng biết về điều đó để AI có đầy đủ ngữ cảnh. Điều này khác với việc gửi: nền tảng ghi lại tin nhắn nhưng **không** gửi lại cho liên hệ.

### Nơi gửi

```
POST https://api.youraiconnector.com/v1/sync_custom_channel_message?apiKey=YOUR_API_KEY
```

Bao gồm `customData.fromId` (ID của liên hệ trên nền tảng của bạn) và `customData.body` (nội dung tin nhắn đã được gửi trước đó).

### Cách thức hoạt động

- **Tin nhắn được ghi lại, không gửi lại.** Nền tảng lưu trữ nó trong cuộc hội thoại chỉ để làm ngữ cảnh.
- **AI bị tạm dừng trên liên hệ đó theo mặc định.** Điều này tránh việc bot phản hồi đè lên tin nhắn mà con người đã xử lý. Để giữ cho bot hoạt động, hãy truyền `customData.pauseAi: false`.
- **Liên hệ mới có thể được tạo tự động.** Bao gồm `customData.customChannel` và liên hệ sẽ được tạo nếu nó chưa tồn tại.
- **Các bản sao bị bỏ qua.** Nếu bạn sử dụng lại cùng một `messageSid`, nền tảng sẽ nhận ra tin nhắn đã được ghi lại và không thực hiện thay đổi nào.

> **Yêu cầu về gói dịch vụ.** Giống như việc gửi tin nhắn, việc ghi lại tin nhắn thông qua API yêu cầu một gói dịch vụ bao gồm quyền truy cập API và ít nhất một kênh nhắn tin. Lỗi `403` "permission denied / feature not enabled" (từ chối quyền / tính năng chưa được bật) có nghĩa là gói dịch vụ hiện tại của bạn không bao gồm tính năng này.

---

## Các ví dụ thực tế

### Trò chuyện trực tiếp trên trang web

Kết nối tiện ích trò chuyện trực tiếp trên trang web của bạn với nền tảng để Tác nhân AI của bạn có thể trả lời các câu hỏi của khách truy cập:

1. Khách truy cập nhập tin nhắn vào tiện ích trò chuyện trên trang web của bạn.
2. Tiện ích trò chuyện của bạn gửi tin nhắn đó đến nền tảng.
3. AI Agent tạo phản hồi.
4. Phản hồi được gửi lại cho tiện ích trò chuyện của bạn, tiện ích này sẽ hiển thị phản hồi đó cho khách truy cập.

**Tại sao điều này hữu ích:** Khách truy cập trang web của bạn nhận được câu trả lời tức thì từ AI cho các câu hỏi của họ mà bạn không cần phải trực tuyến.

### Email

Định tuyến các cuộc hội thoại qua email thông qua nền tảng để AI Agent của bạn có thể trả lời email:

1. Thiết lập một hệ thống chuyển tiếp các email đến nền tảng (sử dụng địa chỉ của người gửi email làm `fromId`, chủ đề và nội dung email làm `body`, và `"email"` làm `channel`).
2. AI Agent đọc email và tạo phản hồi.
3. Phản hồi được gửi lại hệ thống email của bạn, hệ thống này sẽ gửi nó dưới dạng một phản hồi email thông thường.

**Tại sao điều này hữu ích:** Các câu hỏi thường gặp qua email (giá cả, giờ làm việc, tình trạng sẵn có) sẽ được AI Agent của bạn trả lời ngay lập tức.

> Nếu hệ thống email của bạn hỗ trợ IMAP/SMTP hoặc OAuth, [kênh Email](email.md) tích hợp sẵn có thể đơn giản hơn so với việc tích hợp tùy chỉnh.

### Tích hợp CRM

Kết nối hệ thống CRM (quản lý quan hệ khách hàng) hiện tại của bạn với nền tảng:

1. Khi một khách hàng tiềm năng gửi tin nhắn qua CRM của bạn, hãy chuyển tiếp tin nhắn đó đến nền tảng.
2. AI Agent phản hồi và theo dõi cuộc hội thoại.
3. Phản hồi của AI được gửi lại CRM của bạn để phân phối.
4. Toàn bộ lịch sử cuộc hội thoại đều có sẵn trên cả nền tảng và CRM của bạn.

**Tại sao điều này hữu ích:** Đội ngũ bán hàng của bạn nhận được các phản hồi hỗ trợ bởi AI cho khách hàng tiềm năng mà không cần rời khỏi CRM của họ.

### Hệ thống Phiếu hỗ trợ

Sử dụng nền tảng như một người phản hồi đầu tiên được hỗ trợ bởi AI cho dịch vụ khách hàng:

1. Hệ thống quản lý phiếu hỗ trợ (ticketing system) của bạn chuyển tiếp các phiếu hỗ trợ mới đến nền tảng.
2. AI Agent gửi phản hồi ban đầu (ví dụ: xác nhận đã nhận phiếu và đặt các câu hỏi làm rõ).
3. Phản hồi được đính kèm vào phiếu hỗ trợ trong hệ thống hỗ trợ của bạn.
4. Nhóm hỗ trợ của bạn có thể xem lại những gì AI đã nói và tiếp quản khi cần.

**Tại sao điều này hữu ích:** Khách hàng nhận được sự xác nhận và trợ giúp ban đầu ngay lập tức, ngay cả ngoài giờ làm việc.

---

## Khắc phục sự cố

### Tin nhắn không được nền tảng nhận

- Xác minh khóa API của bạn là chính xác và đang hoạt động (kiểm tra **Cài đặt → Tích hợp → Khóa API**).
- Đảm bảo bạn đang gửi yêu cầu POST (không phải GET). Nhà phát triển của bạn sẽ biết sự khác biệt này.
- Kiểm tra để đảm bảo trường `customData.body` không để trống hoặc chỉ chứa khoảng trắng.
- Xác minh rằng trường `customData.fromId` đã được bao gồm.
- Đọc thông báo phản hồi để biết chi tiết lỗi cụ thể.

### Phản hồi không đến được nền tảng của bạn

- Đảm bảo bạn đã nhập URL nền tảng của mình vào thẻ **Kênh tùy chỉnh** trên trang Kênh. Nếu không có URL nào được lưu, các phản hồi sẽ được tạo và lưu trữ nhưng không bao giờ được gửi đi — và chúng sẽ **không** được đánh dấu là "Thất bại", vì vậy hãy kiểm tra điều này trước tiên.
- Xác minh rằng URL có thể truy cập công khai (không nằm sau đăng nhập hoặc tường lửa) và trả về phản hồi thành công.
- Chỉ các phản hồi (tin nhắn gửi đi) mới được gửi đến URL của bạn — tin nhắn gửi đến sẽ không kích hoạt điều này.
- Kiểm tra chi tiết lỗi trên tin nhắn trong hộp thư đến của bạn.

### Liên hệ không được tạo

- Đảm bảo giá trị `fromId` nhất quán cho cùng một người dùng trên tất cả các tin nhắn của họ. Nền tảng sử dụng giá trị này để xác định danh bạ — nếu giá trị này thay đổi giữa các tin nhắn, nền tảng sẽ tạo một danh bạ mới mỗi lần.
- Bao gồm `firstName`, `lastName` và `email` trong tin nhắn đầu tiên từ một liên hệ mới để tạo hồ sơ liên hệ đầy đủ.

### Tệp đính kèm phương tiện không hoạt động

- Đối với các liên kết tệp (URL), hãy đảm bảo tệp có thể truy cập công khai (không cần đăng nhập để truy cập).
- Luôn bao gồm `mediaContentType` khi bạn bao gồm `mediaUrl`.
- Đối với các tệp nhúng (base64), hãy xác minh định dạng là `data:MIME_TYPE;base64,ENCODED_DATA`.
- Đảm bảo loại tệp bạn chỉ định khớp với nội dung tệp thực tế.

---

## Các phương pháp hay nhất

- **Sử dụng các giá trị `fromId` nhất quán.** Mỗi người dùng trên nền tảng của bạn phải luôn có cùng một `fromId`. Điều này đảm bảo nền tảng nhóm tất cả tin nhắn của họ vào một cuộc hội thoại duy nhất thay vì tạo các liên hệ trùng lặp.
- **Chọn tên `channel` rõ ràng.** Chọn một cái tên mang tính mô tả như `"website-chat"`, `"email"` hoặc `"zendesk"` để bạn có thể dễ dàng biết tin nhắn đến từ đâu khi xem hộp thư đến.
- **Bao gồm thông tin liên hệ** (`firstName`, `lastName`, `email`) trong tin nhắn đầu tiên từ một liên hệ mới. Điều này tạo ra một hồ sơ liên hệ đầy đủ và hữu ích ngay lập tức.
- **Xây dựng logic thử lại.** Hãy để nền tảng của bạn thử gửi lại tin nhắn nếu nền tảng không phản hồi trong lần thử đầu tiên (sự cố mạng có thể xảy ra).
- **Sử dụng các giá trị `messageSid` duy nhất** cho mọi tin nhắn. Điều này ngăn chặn việc cùng một tin nhắn bị xử lý hai lần nếu hệ thống của bạn gửi nó nhiều hơn một lần.
- **Sử dụng `campaignId`** để định tuyến tin nhắn đến các AI Agent khác nhau khi bạn có nhiều trường hợp sử dụng (ví dụ: yêu cầu bán hàng so với câu hỏi hỗ trợ).
- **Kiểm tra trước khi khởi chạy.** Gửi tin nhắn thử nghiệm theo cả hai chiều và xác minh rằng danh bạ, cuộc hội thoại và phản hồi của AI đều hoạt động chính xác trước khi ra mắt cho người dùng thực.
