Tham chiếu: Hội thoại
Trang chat, hội thoại, tin nhắn, thẻ và bình luận. Mọi đường dẫn dưới https://danix.. Đặc tả máy đọc: openapi.json.
Các trang chat được dùng
GET /pages
Chỉ liệt kê những trang mà ứng dụng kết nối được chọn lúc tạo.
Quyền cần có: khoá có quyền social..
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/pages" \
-H "Authorization: Bearer dnx_live_…"
Phản hồi mẫu (200)
{
"data": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000001301",
"providerPageId": "1090000000000001",
"provider": "facebook_page",
"pageName": "Shop Mẫu",
"avatarUrl": null,
"status": "active"
}
]
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data |
array<object> | có | Các trang. |
data[]. |
string (uuid) | có | Mã trang trong DANIX. Đây là giá trị dùng làm pageId ở mọi chỗ khác của API. |
data[]. |
string | có | Mã trang ở kênh gốc (Facebook, Zalo…). Chỉ để đối chiếu, không dùng làm tham số. |
data[]. |
"facebook_page" | "zalo_oa" | "zalo_personal" | có | Kênh: facebook_page, zalo_oa hoặc zalo_personal. |
data[]. |
string | có | Tên trang. |
data[]. |
string hoặc null | có | Ảnh đại diện của trang, lưu trên kho của DANIX. null khi chưa có bản lưu. |
data[]. |
"active" | "token_expired" | "banned" | có | Tình trạng kết nối: active, token_expired hoặc banned. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Liệt kê hội thoại
GET /conversations
Phân trang theo con trỏ, hội thoại có tin mới nhất trước. Lọc theo trang bằng pageId (mã trang trong DANIX, id của GET /pages); trang ngoài danh sách của ứng dụng bị từ chối not-found. Hội thoại chưa có tin nào không được liệt kê (vẫn đọc được theo id).
Quyền cần có: khoá có ít nhất một trong các quyền social., social. và quyền social..
Tham số query
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
limit |
integer | không | Số dòng mỗi trang, từ 1 đến 100. Mặc định 50. |
cursor |
string | không | Con trỏ lấy từ nextCursor của trang trước, để lật trang trong CÙNG một lượt đọc (giữ nguyên các tham số khác). Không tự dựng, không lưu để nối lượt đồng bộ sau. |
updatedSince |
string (date-time) | không | Chỉ lấy hội thoại có lastMessageAt từ thời điểm này (ISO 8601 UTC), tính cả mốc. lastMessageAt là giờ của tin mới nhất theo kênh (Facebook, Zalo), không phải mốc sửa: tin tới muộn hay lịch sử đồng bộ về sau có thể mang giờ trước mốc đã đọc, còn đổi thẻ, đánh dấu đã đọc hay đổi tên khách không làm hội thoại hiện lại. Không dùng để đồng bộ tăng dần. |
pageId |
string (uuid) | không | Chỉ lấy hội thoại của trang này: mã trang trong DANIX (id của GET /pages). |
unread |
"true" | không | true chỉ lấy hội thoại còn tin chưa đọc. |
tagId |
string (uuid) | không | Chỉ lấy hội thoại có thẻ này. |
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/conversations" \
-H "Authorization: Bearer dnx_live_…"
Phản hồi mẫu (200)
{
"data": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000001201",
"pageId": "018f3b8e-1c2d-7a4b-9c3d-000000001301",
"providerPageId": "1090000000000001",
"provider": "facebook_page",
"type": "INBOX",
"customerName": "Nguyễn Văn An",
"customerAvatarUrl": null,
"unreadCount": 1,
"lastMessageText": "Shop ơi áo này còn size M không?",
"lastMessageAt": "2026-10-02T03:15:00.000Z",
"lastMessageBy": "customer",
"tags": [],
"createdAt": "2026-10-01T03:15:00.000Z"
}
],
"nextCursor": null
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data |
array<object> | có | Các bản ghi của trang này. |
data[]. |
string (uuid) | có | Mã hội thoại. |
data[]. |
string (uuid) | có | Mã trang trong DANIX (id của GET /pages). |
data[]. |
string | có | Mã trang ở kênh gốc. |
data[]. |
"facebook_page" | "zalo_oa" | "zalo_personal" | có | Kênh của hội thoại. |
data[]. |
"INBOX" | "COMMENT" | "GROUP" | có | Loại: INBOX tin nhắn, COMMENT bình luận, GROUP nhóm. |
data[]. |
string hoặc null | có | Tên khách ở kênh gốc. |
data[]. |
string hoặc null | có | Ảnh đại diện của khách, lưu trên kho của DANIX. null khi chưa có bản lưu. |
data[]. |
integer | có | Số tin khách chưa được đọc. |
data[]. |
string hoặc null | có | Nội dung tin gần nhất. |
data[]. |
string (date-time) hoặc null | có | Thời điểm tin gần nhất. ISO 8601 UTC hoặc null. |
data[]. |
"customer" | "page" hoặc null | có | Ai gửi tin gần nhất. |
data[]. |
array<object> | có | Các thẻ gắn vào hội thoại. |
data[]. |
string (uuid) | có | Mã thẻ. |
data[]. |
string | có | Tên thẻ. |
data[]. |
string (date-time) | có | Thời điểm tạo hội thoại. ISO 8601, múi giờ UTC. |
nextCursor |
string hoặc null | có | Con trỏ của trang kế; null khi đã hết dữ liệu. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 400 | invalid-cursor |
Con trỏ phân trang không hợp lệ |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Chi tiết một hội thoại
GET /conversations/{id}
Trả hội thoại kèm thẻ và số tin chưa đọc.
Quyền cần có: khoá có ít nhất một trong các quyền social., social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/conversations/{id}" \
-H "Authorization: Bearer dnx_live_…"
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000001201",
"pageId": "018f3b8e-1c2d-7a4b-9c3d-000000001301",
"providerPageId": "1090000000000001",
"provider": "facebook_page",
"type": "INBOX",
"customerName": "Nguyễn Văn An",
"customerAvatarUrl": null,
"unreadCount": 0,
"lastMessageText": "Dạ còn ạ",
"lastMessageAt": "2026-10-02T03:16:00.000Z",
"lastMessageBy": "page",
"tags": [],
"createdAt": "2026-10-01T03:15:00.000Z"
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã hội thoại. |
pageId |
string (uuid) | có | Mã trang trong DANIX (id của GET /pages). |
providerPageId |
string | có | Mã trang ở kênh gốc. |
provider |
"facebook_page" | "zalo_oa" | "zalo_personal" | có | Kênh của hội thoại. |
type |
"INBOX" | "COMMENT" | "GROUP" | có | Loại: INBOX tin nhắn, COMMENT bình luận, GROUP nhóm. |
customerName |
string hoặc null | có | Tên khách ở kênh gốc. |
customerAvatarUrl |
string hoặc null | có | Ảnh đại diện của khách, lưu trên kho của DANIX. null khi chưa có bản lưu. |
unreadCount |
integer | có | Số tin khách chưa được đọc. |
lastMessageText |
string hoặc null | có | Nội dung tin gần nhất. |
lastMessageAt |
string (date-time) hoặc null | có | Thời điểm tin gần nhất. ISO 8601 UTC hoặc null. |
lastMessageBy |
"customer" | "page" hoặc null | có | Ai gửi tin gần nhất. |
tags |
array<object> | có | Các thẻ gắn vào hội thoại. |
tags[]. |
string (uuid) | có | Mã thẻ. |
tags[]. |
string | có | Tên thẻ. |
createdAt |
string (date-time) | có | Thời điểm tạo hội thoại. ISO 8601, múi giờ UTC. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Đánh dấu hội thoại đã đọc
POST /conversations/{id}/read
Đặt số tin chưa đọc về 0.
Quyền cần có: khoá có ít nhất một trong các quyền social., social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/conversations/{id}/read" \
-H "Authorization: Bearer dnx_live_…"
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"ok": true
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
ok |
true | có | Luôn true khi thao tác thành công. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Tin nhắn của hội thoại
GET /conversations/{id}/messages
Phân trang theo con trỏ, tin mới nhất trước.
Quyền cần có: khoá có ít nhất một trong các quyền social., social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Tham số query
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
cursor |
string | không | Con trỏ lấy từ nextCursor của trang trước. |
limit |
integer | không | Số tin mỗi trang, 1 đến 100. |
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/conversations/{id}/messages" \
-H "Authorization: Bearer dnx_live_…"
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"data": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000001101",
"conversationId": "018f3b8e-1c2d-7a4b-9c3d-000000001201",
"pageId": "018f3b8e-1c2d-7a4b-9c3d-000000001301",
"providerPageId": "1090000000000001",
"provider": "facebook_page",
"direction": "outbound",
"type": "text",
"text": "Dạ còn ạ, anh chị cần mấy cái ạ?",
"status": "sent",
"isDeleted": false,
"sentByName": "Trần Thị Bình",
"sentByIsIntegration": false,
"customerName": "Nguyễn Văn An",
"attachments": [],
"createdAt": "2026-10-02T03:15:00.000Z"
}
],
"nextCursor": null
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data |
array<object> | có | Các bản ghi của trang này. |
data[]. |
string (uuid) | có | Mã tin nhắn. |
data[]. |
string (uuid) | có | Hội thoại chứa tin. |
data[]. |
string (uuid) | có | Mã trang trong DANIX (id của GET /pages). |
data[]. |
string | có | Mã trang ở kênh gốc. |
data[]. |
"facebook_page" | "zalo_oa" | "zalo_personal" | có | Kênh của tin nhắn. |
data[]. |
"inbound" | "outbound" | có | inbound khách gửi, outbound shop gửi. |
data[]. |
"text" | "image" | "video" | "audio" | "file" | "sticker" | "location" | "reel" | "share" | "like" | "postback" | "order" | "referral" | có | Loại tin nhắn. |
data[]. |
string hoặc null | có | Nội dung chữ. |
data[]. |
"pending" | "sent" | "delivered" | "read" | "failed" | có | Trạng thái gửi. |
data[]. |
boolean | có | Tin đã bị thu hồi. |
data[]. |
string hoặc null | có | Tên nhân viên hay ứng dụng đã gửi; rỗng với tin của khách. |
data[]. |
boolean | có | true khi tin do một ứng dụng kết nối gửi. |
data[]. |
string hoặc null | có | Tên khách của hội thoại; với nhóm (GROUP) là người gửi tin. |
data[]. |
array<object> | có | Tệp đính kèm. |
data[]. |
string (uuid) | có | Mã tệp đính kèm. |
data[]. |
"image" | "video" | "audio" | "file" | "link" | "button" | có | Loại: bốn loại đầu là tệp; link và button là nút của tin mẫu. |
data[]. |
string hoặc null | có | Tệp: bản GỐC trên kho của DANIX, null khi chưa lưu về (xem originalState). Loại link: địa chỉ nút trỏ tới. Không bao giờ là đường dẫn của Facebook hay Zalo. |
data[]. |
string hoặc null | có | Bản xem trước (ảnh thu nhỏ, ảnh bìa video) trên kho của DANIX; null khi không có. |
data[]. |
"pending" | "stored" | "gone" | có | stored: bản gốc có ở url. pending: chưa có bản gốc trên kho của DANIX. Tệp của hội thoại lâu không hoạt động đã được cất đi; lượt đọc trang ĐẦU tin nhắn (GET /conversations/{id}/messages không cursor) hay lượt nhân viên mở hội thoại kéo nó về ở nền trong ít phút — đọc lại sau để nhận url. Tệp chưa từng lưu bản gốc thì được lưu khi nhân viên mở xem. gone: nguồn không còn, sẽ không bao giờ có. |
data[]. |
string hoặc null | có | Tên tệp. |
data[]. |
string hoặc null | có | Loại nội dung (MIME). |
data[]. |
string (date-time) | có | Thời điểm tin được ghi nhận. ISO 8601, múi giờ UTC. |
nextCursor |
string hoặc null | có | Con trỏ của trang kế; null khi đã hết dữ liệu. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 404 | not-found |
Không tìm thấy tài nguyên |
| 400 | invalid-cursor |
Con trỏ phân trang không hợp lệ |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Gửi tin nhắn
POST /conversations/{id}/messages
Gửi một tin nhắn chữ trong hội thoại. Gửi kèm Idempotency-Key: cùng khoá trong CÙNG hội thoại không gửi hai lần (cùng khoá ở hội thoại khác là một tin mới). Ngoài khung thời gian cho phép của kênh trả messaging-window-closed.
Quyền cần có: khoá có quyền social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Header
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
Idempotency-Key |
string | không | Khoá chống trùng do client đặt (khuyến nghị UUID). Gửi lại cùng khoá trong 24 giờ trả đúng kết quả lần đầu và header Idempotent-Replayed: true. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
text |
string | có | Nội dung tin nhắn. |
replyToMessageId |
string (uuid) | không | Trả lời một tin có sẵn của hội thoại. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/conversations/{id}/messages" \
-H "Authorization: Bearer dnx_live_…" \
-H "Idempotency-Key: a58738ee-0d77-444d-96c4-c547752c5c17" \
-H "Content-Type: application/json" \
-d '{
"text": "Dạ còn ạ, anh chị cần mấy cái ạ?"
}'
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (201)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000001101",
"conversationId": "018f3b8e-1c2d-7a4b-9c3d-000000001201",
"pageId": "018f3b8e-1c2d-7a4b-9c3d-000000001301",
"providerPageId": "1090000000000001",
"provider": "facebook_page",
"direction": "outbound",
"type": "text",
"text": "Dạ còn ạ, anh chị cần mấy cái ạ?",
"status": "sent",
"isDeleted": false,
"sentByName": "Trần Thị Bình",
"sentByIsIntegration": false,
"customerName": "Nguyễn Văn An",
"attachments": [],
"createdAt": "2026-10-02T03:15:00.000Z"
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã tin nhắn. |
conversationId |
string (uuid) | có | Hội thoại chứa tin. |
pageId |
string (uuid) | có | Mã trang trong DANIX (id của GET /pages). |
providerPageId |
string | có | Mã trang ở kênh gốc. |
provider |
"facebook_page" | "zalo_oa" | "zalo_personal" | có | Kênh của tin nhắn. |
direction |
"inbound" | "outbound" | có | inbound khách gửi, outbound shop gửi. |
type |
"text" | "image" | "video" | "audio" | "file" | "sticker" | "location" | "reel" | "share" | "like" | "postback" | "order" | "referral" | có | Loại tin nhắn. |
text |
string hoặc null | có | Nội dung chữ. |
status |
"pending" | "sent" | "delivered" | "read" | "failed" | có | Trạng thái gửi. |
isDeleted |
boolean | có | Tin đã bị thu hồi. |
sentByName |
string hoặc null | có | Tên nhân viên hay ứng dụng đã gửi; rỗng với tin của khách. |
sentByIsIntegration |
boolean | có | true khi tin do một ứng dụng kết nối gửi. |
customerName |
string hoặc null | có | Tên khách của hội thoại; với nhóm (GROUP) là người gửi tin. |
attachments |
array<object> | có | Tệp đính kèm. |
attachments[]. |
string (uuid) | có | Mã tệp đính kèm. |
attachments[]. |
"image" | "video" | "audio" | "file" | "link" | "button" | có | Loại: bốn loại đầu là tệp; link và button là nút của tin mẫu. |
attachments[]. |
string hoặc null | có | Tệp: bản GỐC trên kho của DANIX, null khi chưa lưu về (xem originalState). Loại link: địa chỉ nút trỏ tới. Không bao giờ là đường dẫn của Facebook hay Zalo. |
attachments[]. |
string hoặc null | có | Bản xem trước (ảnh thu nhỏ, ảnh bìa video) trên kho của DANIX; null khi không có. |
attachments[]. |
"pending" | "stored" | "gone" | có | stored: bản gốc có ở url. pending: chưa có bản gốc trên kho của DANIX. Tệp của hội thoại lâu không hoạt động đã được cất đi; lượt đọc trang ĐẦU tin nhắn (GET /conversations/{id}/messages không cursor) hay lượt nhân viên mở hội thoại kéo nó về ở nền trong ít phút — đọc lại sau để nhận url. Tệp chưa từng lưu bản gốc thì được lưu khi nhân viên mở xem. gone: nguồn không còn, sẽ không bao giờ có. |
attachments[]. |
string hoặc null | có | Tên tệp. |
attachments[]. |
string hoặc null | có | Loại nội dung (MIME). |
createdAt |
string (date-time) | có | Thời điểm tin được ghi nhận. ISO 8601, múi giờ UTC. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
| 409 | idempotency-key-in-progress |
Yêu cầu với cùng Idempotency-Key đang được xử lý |
| 422 | idempotency-key-reused |
Idempotency-Key đã dùng cho một yêu cầu có nội dung khác |
| 422 | messaging-window-closed |
Đã quá khung thời gian được phép nhắn cho khách này |
| 422 | page-not-connected |
Trang chat không còn kết nối |
| 422 | conversation-not-replyable |
Hội thoại này không trả lời được |
| 503 | channel-unavailable |
Kênh chat tạm thời không phản hồi, hãy thử lại sau |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Các thẻ hội thoại
GET /tags
Thẻ hội thoại của các trang ứng dụng được dùng. Thẻ là của từng trang (pageId): chỉ gắn được vào hội thoại cùng trang.
Quyền cần có: khoá có ít nhất một trong các quyền social., social. và quyền social..
Ví dụ yêu cầu
curl -X GET "https://danix.vn/api/open/v1/tags" \
-H "Authorization: Bearer dnx_live_…"
Phản hồi mẫu (200)
{
"data": [
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000001401",
"name": "Khách quen",
"color": "blue",
"pageId": "018f3b8e-1c2d-7a4b-9c3d-000000001301"
}
]
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data |
array<object> | có | Các thẻ. |
data[]. |
string (uuid) | có | Mã thẻ. |
data[]. |
string | có | Tên thẻ. |
data[]. |
"red" | "orange" | "amber" | "green" | "teal" | "cyan" | "blue" | "indigo" | "purple" | "pink" | có | Màu của thẻ. |
data[]. |
string (uuid) | có | Trang sở hữu thẻ. Thẻ là của TỪNG trang: chỉ gắn được vào hội thoại cùng trang, và hai trang có thể có thẻ trùng tên. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Gắn thẻ vào hội thoại
POST /conversations/{id}/tags
Gắn một thẻ có sẵn vào hội thoại. Gắn lại thẻ đã có là thành công.
Quyền cần có: khoá có quyền social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
tagId |
string (uuid) | có | Mã thẻ cần gắn. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/conversations/{id}/tags" \
-H "Authorization: Bearer dnx_live_…" \
-H "Content-Type: application/json" \
-d '{
"tagId": "018f3b8e-1c2d-7a4b-9c3d-000000001401"
}'
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"ok": true
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
ok |
true | có | Luôn true khi thao tác thành công. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Gỡ thẻ khỏi hội thoại
DELETE /conversations/{id}/tags/{tagId}
Gỡ một thẻ khỏi hội thoại.
Quyền cần có: khoá có quyền social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
tagId |
string (uuid) | có | Mã thẻ. |
Ví dụ yêu cầu
curl -X DELETE "https://danix.vn/api/open/v1/conversations/{id}/tags/{tagId}" \
-H "Authorization: Bearer dnx_live_…"
Thay {id}, {tagId} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"ok": true
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
ok |
true | có | Luôn true khi thao tác thành công. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 404 | not-found |
Không tìm thấy tài nguyên |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Ẩn hoặc hiện một bình luận
POST /comments/{id}/hidden
Chỉ áp dụng cho bình luận (type = COMMENT) của trang Facebook.
Quyền cần có: khoá có quyền social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
hidden |
boolean | có | true ẩn bình luận, false hiện lại. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/comments/{id}/hidden" \
-H "Authorization: Bearer dnx_live_…" \
-H "Content-Type: application/json" \
-d '{
"hidden": true
}'
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (200)
{
"ok": true
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
ok |
true | có | Luôn true khi thao tác thành công. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
| 422 | page-not-connected |
Trang chat không còn kết nối |
| 422 | conversation-not-replyable |
Hội thoại này không trả lời được |
| 503 | channel-unavailable |
Kênh chat tạm thời không phản hồi, hãy thử lại sau |
Định dạng lỗi và bảng mọi mã code: Lỗi.
Nhắn riêng cho người bình luận
POST /comments/{id}/private-reply
Gửi một tin nhắn riêng đáp lại bình luận. Mỗi bình luận chỉ nhắn riêng được một lần.
Quyền cần có: khoá có quyền social. và quyền social..
Tham số đường dẫn
| Tên | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã định danh (UUID) của tài nguyên. |
Thân yêu cầu (JSON)
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
text |
string | có | Nội dung tin nhắn riêng gửi cho người bình luận. |
Ví dụ yêu cầu
curl -X POST "https://danix.vn/api/open/v1/comments/{id}/private-reply" \
-H "Authorization: Bearer dnx_live_…" \
-H "Content-Type: application/json" \
-d '{
"text": "Cảm ơn bạn đã quan tâm, shop nhắn riêng nhé"
}'
Thay {id} trong địa chỉ bằng mã thật của bản ghi, và dnx_live_… bằng khoá của bạn.
Phản hồi mẫu (201)
{
"id": "018f3b8e-1c2d-7a4b-9c3d-000000001101",
"conversationId": "018f3b8e-1c2d-7a4b-9c3d-000000001201",
"pageId": "018f3b8e-1c2d-7a4b-9c3d-000000001301",
"providerPageId": "1090000000000001",
"provider": "facebook_page",
"direction": "outbound",
"type": "text",
"text": "Dạ còn ạ, anh chị cần mấy cái ạ?",
"status": "sent",
"isDeleted": false,
"sentByName": "Trần Thị Bình",
"sentByIsIntegration": false,
"customerName": "Nguyễn Văn An",
"attachments": [],
"createdAt": "2026-10-02T03:15:00.000Z"
}
Trường của phản hồi
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id |
string (uuid) | có | Mã tin nhắn. |
conversationId |
string (uuid) | có | Hội thoại chứa tin. |
pageId |
string (uuid) | có | Mã trang trong DANIX (id của GET /pages). |
providerPageId |
string | có | Mã trang ở kênh gốc. |
provider |
"facebook_page" | "zalo_oa" | "zalo_personal" | có | Kênh của tin nhắn. |
direction |
"inbound" | "outbound" | có | inbound khách gửi, outbound shop gửi. |
type |
"text" | "image" | "video" | "audio" | "file" | "sticker" | "location" | "reel" | "share" | "like" | "postback" | "order" | "referral" | có | Loại tin nhắn. |
text |
string hoặc null | có | Nội dung chữ. |
status |
"pending" | "sent" | "delivered" | "read" | "failed" | có | Trạng thái gửi. |
isDeleted |
boolean | có | Tin đã bị thu hồi. |
sentByName |
string hoặc null | có | Tên nhân viên hay ứng dụng đã gửi; rỗng với tin của khách. |
sentByIsIntegration |
boolean | có | true khi tin do một ứng dụng kết nối gửi. |
customerName |
string hoặc null | có | Tên khách của hội thoại; với nhóm (GROUP) là người gửi tin. |
attachments |
array<object> | có | Tệp đính kèm. |
attachments[]. |
string (uuid) | có | Mã tệp đính kèm. |
attachments[]. |
"image" | "video" | "audio" | "file" | "link" | "button" | có | Loại: bốn loại đầu là tệp; link và button là nút của tin mẫu. |
attachments[]. |
string hoặc null | có | Tệp: bản GỐC trên kho của DANIX, null khi chưa lưu về (xem originalState). Loại link: địa chỉ nút trỏ tới. Không bao giờ là đường dẫn của Facebook hay Zalo. |
attachments[]. |
string hoặc null | có | Bản xem trước (ảnh thu nhỏ, ảnh bìa video) trên kho của DANIX; null khi không có. |
attachments[]. |
"pending" | "stored" | "gone" | có | stored: bản gốc có ở url. pending: chưa có bản gốc trên kho của DANIX. Tệp của hội thoại lâu không hoạt động đã được cất đi; lượt đọc trang ĐẦU tin nhắn (GET /conversations/{id}/messages không cursor) hay lượt nhân viên mở hội thoại kéo nó về ở nền trong ít phút — đọc lại sau để nhận url. Tệp chưa từng lưu bản gốc thì được lưu khi nhân viên mở xem. gone: nguồn không còn, sẽ không bao giờ có. |
attachments[]. |
string hoặc null | có | Tên tệp. |
attachments[]. |
string hoặc null | có | Loại nội dung (MIME). |
createdAt |
string (date-time) | có | Thời điểm tin được ghi nhận. ISO 8601, múi giờ UTC. |
Lỗi
| Trạng thái | Mã code |
Ý nghĩa |
|---|---|---|
| 401 | invalid-api-key |
Khoá API thiếu, sai hoặc đã bị thu hồi |
| 403 | insufficient-permission |
Khoá API không có quyền thực hiện thao tác này |
| 403 | shop-suspended |
Shop đang bị đình chỉ |
| 403 | automation-not-active |
Shop chưa bật tính năng Tự động hoá |
| 429 | rate-limited |
Vượt hạn mức gọi API, hãy chờ rồi thử lại |
| 500 | internal-error |
Lỗi hệ thống |
| 402 | subscription-expired |
Gói cước của shop đã hết hạn, chỉ còn quyền đọc |
| 400 | validation-failed |
Dữ liệu gửi lên không hợp lệ |
| 413 | payload-too-large |
Thân yêu cầu vượt quá dung lượng cho phép |
| 415 | unsupported-media-type |
Thân yêu cầu phải là JSON (Content-Type: application/json) |
| 404 | not-found |
Không tìm thấy tài nguyên |
| 409 | conflict |
Thao tác xung đột với trạng thái hiện tại |
| 422 | messaging-window-closed |
Đã quá khung thời gian được phép nhắn cho khách này |
| 422 | page-not-connected |
Trang chat không còn kết nối |
| 422 | conversation-not-replyable |
Hội thoại này không trả lời được |
| 503 | channel-unavailable |
Kênh chat tạm thời không phản hồi, hãy thử lại sau |
Định dạng lỗi và bảng mọi mã code: Lỗi.