Tài liệu nhà phát triểnBản Markdownopenapi.jsonllms.txt

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.vn/api/open/v1. Đặ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.pages.read.

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[].id 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[].providerPageId string có Mã trang ở kênh gốc (Facebook, Zalo…). Chỉ để đối chiếu, không dùng làm tham số.
data[].provider "facebook_page" | "zalo_oa" | "zalo_personal" có Kênh: facebook_page, zalo_oa hoặc zalo_personal.
data[].pageName string có Tên trang.
data[].avatarUrl 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[].status "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.conversations.read, social.conversations.reply và quyền social.pages.read.

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[].id string (uuid) có Mã hội thoại.
data[].pageId string (uuid) có Mã trang trong DANIX (id của GET /pages).
data[].providerPageId string có Mã trang ở kênh gốc.
data[].provider "facebook_page" | "zalo_oa" | "zalo_personal" có Kênh của hội thoại.
data[].type "INBOX" | "COMMENT" | "GROUP" có Loại: INBOX tin nhắn, COMMENT bình luận, GROUP nhóm.
data[].customerName string hoặc null có Tên khách ở kênh gốc.
data[].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.
data[].unreadCount integer có Số tin khách chưa được đọc.
data[].lastMessageText string hoặc null có Nội dung tin gần nhất.
data[].lastMessageAt string (date-time) hoặc null có Thời điểm tin gần nhất. ISO 8601 UTC hoặc null.
data[].lastMessageBy "customer" | "page" hoặc null có Ai gửi tin gần nhất.
data[].tags array<object> có Các thẻ gắn vào hội thoại.
data[].tags[].id string (uuid) có Mã thẻ.
data[].tags[].name string có Tên thẻ.
data[].createdAt 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.conversations.read, social.conversations.reply và quyền social.pages.read.

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[].id string (uuid) có Mã thẻ.
tags[].name 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.conversations.read, social.conversations.reply và quyền social.pages.read.

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.conversations.read, social.conversations.reply và quyền social.pages.read.

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[].id string (uuid) có Mã tin nhắn.
data[].conversationId string (uuid) có Hội thoại chứa tin.
data[].pageId string (uuid) có Mã trang trong DANIX (id của GET /pages).
data[].providerPageId string có Mã trang ở kênh gốc.
data[].provider "facebook_page" | "zalo_oa" | "zalo_personal" có Kênh của tin nhắn.
data[].direction "inbound" | "outbound" có inbound khách gửi, outbound shop gửi.
data[].type "text" | "image" | "video" | "audio" | "file" | "sticker" | "location" | "reel" | "share" | "like" | "postback" | "order" | "referral" có Loại tin nhắn.
data[].text string hoặc null có Nội dung chữ.
data[].status "pending" | "sent" | "delivered" | "read" | "failed" có Trạng thái gửi.
data[].isDeleted boolean có Tin đã bị thu hồi.
data[].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.
data[].sentByIsIntegration boolean có true khi tin do một ứng dụng kết nối gửi.
data[].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.
data[].attachments array<object> có Tệp đính kèm.
data[].attachments[].id string (uuid) có Mã tệp đính kèm.
data[].attachments[].type "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[].attachments[].url 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[].attachments[].previewUrl 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[].attachments[].originalState "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[].attachments[].fileName string hoặc null có Tên tệp.
data[].attachments[].mimeType string hoặc null có Loại nội dung (MIME).
data[].createdAt 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.conversations.reply và quyền social.pages.read.

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[].id string (uuid) có Mã tệp đính kèm.
attachments[].type "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[].url 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[].previewUrl 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[].originalState "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[].fileName string hoặc null có Tên tệp.
attachments[].mimeType 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.conversations.read, social.conversations.reply và quyền social.pages.read.

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[].id string (uuid) có Mã thẻ.
data[].name string có Tên thẻ.
data[].color "red" | "orange" | "amber" | "green" | "teal" | "cyan" | "blue" | "indigo" | "purple" | "pink" có Màu của thẻ.
data[].pageId 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.conversations.reply và quyền social.pages.read.

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.conversations.reply và quyền social.pages.read.

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.conversations.reply và quyền social.pages.read.

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.conversations.reply và quyền social.pages.read.

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[].id string (uuid) có Mã tệp đính kèm.
attachments[].type "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[].url 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[].previewUrl 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[].originalState "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[].fileName string hoặc null có Tên tệp.
attachments[].mimeType 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.