Chuyển tới nội dung chính

4. Chat & Tin Nhắn

4.1 Lấy Số Lượng Cuộc Trò Chuyện

GET /api/v1/conversations/counts

Lấy số lượng cuộc trò chuyện chưa đọc và chưa trả lời.

Phản hồi:

{
"total": 150,
"unread": 25,
"unreplied": 12,
"archived": 8
}

4.2 Liệt Kê Cuộc Trò Chuyện

GET /api/v1/conversations

Liệt kê các cuộc trò chuyện/luồng với phân trang.

Tham Số Truy Vấn:

  • page - Số trang (mặc định: 1)
  • limit - Mục trên mỗi trang (mặc định: 50, tối đa: 100)
  • status - Lọc: active, archived, closed
  • type - Lọc: user, group
  • search - Tìm kiếm theo tên liên hệ
  • sortBy - Trường sắp xếp: lastMessage, createdAt (mặc định: lastMessage)
  • direction - Hướng sắp xếp: asc, desc

Phản hồi:

{
"data": [
{
"id": "conv-001",
"contactId": "contact-123",
"contactName": "Nguyễn Văn A",
"contactAvatar": "https://...",
"type": "user",
"zaloAccountId": "acc-001",
"messageCount": 45,
"unreadCount": 3,
"lastMessage": {
"id": "msg-999",
"content": "Xin chào!",
"contentType": "text",
"senderName": "Nguyễn Văn A",
"sentAt": "2026-06-05T17:20:00Z"
},
"status": "active",
"createdAt": "2026-03-10T08:00:00Z",
"lastActivityAt": "2026-06-05T17:20:00Z"
}
],
"pagination": {
"total": 150,
"page": 1,
"limit": 50,
"pages": 3
}
}

4.3 Lấy Chi Tiết Cuộc Trò Chuyện

GET /api/v1/conversations/:id

Lấy cuộc trò chuyện đầy đủ với các tin nhắn.

Tham Số Truy Vấn:

  • page - Trang tin nhắn (mặc định: 1)
  • limit - Tin nhắn mỗi trang (mặc định: 30)

Phản hồi:

{
"conversation": {
"id": "conv-001",
"contactId": "contact-123",
"contactName": "Nguyễn Văn A",
"type": "user",
"zaloAccountId": "acc-001",
"status": "active",
"createdAt": "2026-03-10T08:00:00Z"
},
"messages": [
{
"id": "msg-001",
"conversationId": "conv-001",
"content": "Bạn khỏe không?",
"contentType": "text",
"senderUid": "1234567890",
"senderName": "Nguyễn Văn A",
"isFromZalo": true,
"isRead": true,
"isReplied": true,
"sentAt": "2026-06-05T10:00:00Z"
}
],
"pagination": {
"total": 45,
"page": 1,
"limit": 30
}
}

4.4 Gửi Tin Nhắn

POST /api/v1/conversations/:id/messages

Gửi tin nhắn đến cuộc trò chuyện.

Thân Yêu Cầu:

{
"content": "Cảm ơn vì đã liên hệ!",
"contentType": "text",
"attachments": []
}

Phản hồi: 201

{
"id": "msg-1000",
"conversationId": "conv-001",
"content": "Cảm ơn vì đã liên hệ!",
"contentType": "text",
"senderName": "Nguyễn Văn B",
"sentAt": "2026-06-05T17:35:00Z",
"status": "sent"
}

4.5 Lưu Trữ Cuộc Trò Chuyện

POST /api/v1/conversations/:id/archive

Lưu trữ cuộc trò chuyện.

Phản hồi:

{
"message": "Cuộc trò chuyện đã được lưu trữ"
}

4.6 Tạo Thư Mục Chat

POST /api/v1/chat/folders

Tạo thư mục để tổ chức các cuộc trò chuyện.

Thân Yêu Cầu:

{
"name": "Lead Nóng",
"color": "#FF5722"
}

Phản hồi: 201

{
"id": "folder-001",
"name": "Lead Nóng",
"color": "#FF5722",
"conversationCount": 0,
"createdAt": "2026-06-05T17:35:00Z"
}

4.7 Liệt Kê Cài Đặt Chat

GET /api/v1/chat/presets

Liệt kê các mẫu tin nhắn được lưu.

Phản hồi:

[
{
"id": "preset-001",
"name": "Lời Chào",
"content": "Xin chào! Cảm ơn vì đã liên hệ với chúng tôi 👋",
"category": "greetings",
"createdAt": "2026-05-01T10:00:00Z"
}
]

4.8 Tải Lên Tệp Đính Kèm

POST /api/v1/chat/attachments

Tải lên tệp/hình ảnh/video để gửi.

Yêu Cầu: Form-data với trường file

Phản hồi: 201

{
"id": "attach-001",
"filename": "document.pdf",
"size": 1024000,
"contentType": "application/pdf",
"url": "https://api.domaincrm.com/attachments/attach-001",
"uploadedAt": "2026-06-05T17:35:00Z"
}