Tham khảo API
Tích hợp enuchat vào hệ thống của bạn dùng Tenant API. Quản lý cuộc trò chuyện, gửi tin nhắn và truy cập dữ liệu thanh toán bằng mã.
Xác thực
Tất cả yêu cầu API được xác thực bằng khoá API gửi trong header X-Api-Key.
Lấy khoá API
- Đi đến Cài đặt → Khoá API trong bảng điều khiển
- Nhấn Tạo Khoá API và đặt tên
- Sao chép khoá ngay — chỉ hiển thị một lần
- Lưu an toàn (biến môi trường, trình quản lý bí mật)
Thực hiện yêu cầu
Bao gồm khoá trong mỗi yêu cầu:
curl -H "X-Api-Key: tak_your_key_here" \
https://api.enuchat.com/api/v1/tenant-api/widgetsTất cả phản hồi là JSON. Phản hồi thành công có trường data. Lỗi có trường error với code và message.
Bảo mật: Khoá API được hash (SHA-256) trong cơ sở dữ liệu. Chúng tôi không bao giờ lưu khoá thô. Đối xử với khoá như mật khẩu — không commit vào mã hay chia sẻ công khai.
URL Cơ sở
https://api.enuchat.com/api/v1/tenant-apiTất cả các endpoint bên dưới tương đối với URL cơ sở này.
Endpoint
GET /widgets
Liệt kê tất cả widget cho tài khoản.
Phản hồi
{'{'}
"data": [
{'{'}
"id": "019d19c6-7e0b-...",
"name": "Main Website Chat",
"isActive": true,
"aiEnabled": true,
"translationEnabled": true,
"primaryColor": "#2563eb",
"position": "bottom-right"
}
]
}GET /conversations
Liệt kê các cuộc trò chuyện, sắp xếp theo tin nhắn gần đây nhất.
Tham số Truy vấn
| Tham số | Kiểu | Mô tả |
|---|---|---|
status | string | Lọc theo trạng thái: open, pending, closed |
widgetId | string | Lọc theo UUID widget |
limit | integer | Số kết quả tối đa (mặc định 20, tối đa 100) |
offset | integer | Bỏ qua N kết quả |
Ví dụ
curl -H "X-Api-Key: tak_..." \
"https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"Phản hồi
{'{'}
"data": [
{'{'}
"id": "019d6724-000e-...",
"widgetId": "019d19c6-7e0b-...",
"visitorId": "v-abc123",
"visitorName": "John",
"visitorEmail": "john{'@'}example.com",
"visitorLanguage": "en",
"status": "open",
"assignedTo": null,
"lastMessageAt": "2026-04-11T14:30:00+00:00",
"startedAt": "2026-04-11T14:25:00+00:00"
}
]
}GET /conversations/{'{'}id}
Lấy cuộc trò chuyện với tất cả tin nhắn.
Tham số Truy vấn
| Tham số | Kiểu | Mô tả |
|---|---|---|
limit | integer | Số tin nhắn tối đa (mặc định 50, tối đa 200) |
Phản hồi
{'{'}
"data": {'{'}
"id": "019d6724-000e-...",
"visitorLanguage": "en",
"status": "open",
"messages": [
{'{'}
"id": "019d6724-1234-...",
"role": "visitor",
"content": "Hello, how much does it cost?",
"contentLanguage": "en",
"translatedContent": "Cześć, ile to kosztuje?",
"translatedLanguage": "pl",
"isAutoReply": false,
"createdAt": "2026-04-11T14:25:30+00:00"
},
{'{'}
"id": "019d6724-5678-...",
"role": "ai",
"content": "Our plans start at €19/month...",
"isAutoReply": true,
"createdAt": "2026-04-11T14:25:32+00:00"
}
]
}
}POST /conversations/{'{'}id}/messages
Gửi tin nhắn đến cuộc trò chuyện. Tin nhắn sẽ được gửi đến khách theo thời gian thực qua widget chat.
Nội dung Yêu cầu
{'{'}
"content": "Thanks for reaching out! We'll process your request.",
"role": "system"
}| Trường | Kiểu | Mô tả |
|---|---|---|
content | string | Bắt buộc. Văn bản tin nhắn. |
role | string | system (mặc định) hoặc operator |
Phản hồi (201 Created)
{'{'}
"data": {'{'}
"id": "019d6725-abcd-...",
"role": "system",
"content": "Thanks for reaching out!",
"createdAt": "2026-04-11T14:35:00+00:00"
}
}PATCH /conversations/{'{'}id}
Cập nhật trạng thái hoặc phân công cuộc trò chuyện.
Nội dung Yêu cầu
{'{'}
"status": "closed"
}| Trường | Kiểu | Mô tả |
|---|---|---|
status | string | open, pending, hoặc closed |
assignedTo | string|null | UUID nhân viên để giao, hoặc null để bỏ giao |
GET /billing/balance
Lấy gói hiện tại và số dư tín dụng.
Phản hồi
{'{'}
"data": {'{'}
"plan": "pro",
"creditBalance": 4500000,
"totalCreditsAdded": 10000000
}
}Xử lý Lỗi
Lỗi trả về mã trạng thái không phải 2xx kèm thân JSON:
{'{'}
"error": {'{'}
"code": "NOT_FOUND",
"message": "Conversation not found."
}
}| Trạng thái HTTP | Ý nghĩa |
|---|---|
401 | Khoá API không hợp lệ, hết hạn hoặc thiếu |
400 | Nội dung yêu cầu hoặc tham số không hợp lệ |
404 | Không tìm thấy tài nguyên (hoặc thuộc tenant khác) |
500 | Lỗi máy chủ |
Trường hợp Sử dụng Phổ biến
Tích hợp CRM
Poll cuộc trò chuyện mới và đồng bộ dữ liệu khách (tên, email, ngôn ngữ) vào CRM. Dùng ID cuộc trò chuyện làm tham chiếu bên ngoài.
Theo dõi Tự động
Sau khi cuộc trò chuyện đóng, gửi tin nhắn theo dõi qua API: "Cảm ơn đã chat! Còn điều gì chúng tôi có thể giúp không?"
Thay thế Webhook
Cho đến khi webhook đi có sẵn, poll endpoint cuộc trò chuyện định kỳ để phát hiện tin nhắn mới hoặc thay đổi trạng thái.
Thao tác Hàng loạt
Đóng tất cả cuộc trò chuyện hơn 7 ngày, phân công cuộc trò chuyện cho nhân viên dựa trên logic bên ngoài, hoặc xuất lịch sử cuộc trò chuyện để phân tích.
Giới hạn Tốc độ
API cho phép tối đa 60 yêu cầu mỗi phút cho mỗi khoá API. Nếu vượt giới hạn, bạn sẽ nhận phản hồi 429 Too Many Requests. Chờ và thử lại với backoff theo cấp số nhân.