> ## Documentation Index
> Fetch the complete documentation index at: https://docs-agents.fpt.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Đọc lại lịch sử hội thoại

> Đường phục hồi cho những lượt trả lời bạn không nhận được qua callback

Đây là **đường phục hồi** cho lượt trả lời bạn không nhận được. Vì callback là cơ chế nhiều nhất một lần, sau 3 lần thất bại lượt trả lời nằm lại trong hàng đợi lỗi của chúng tôi. Nếu không có API này thì tin nhắn đó mất hẳn với bạn.

```http theme={null}
GET https://agents.fpt.ai/direct-bff/v1/conversations/7412/messages?after=9001&limit=30
Authorization: Bearer <khóa API của tổ chức>
```

| Tham số | Mô tả | Bắt buộc |
| - | - | - |
| `conversationId` | Lấy từ trường cùng tên trên callback. Là số nguyên dương. | Bắt buộc |
| `after` | Con trỏ phân trang: mã tin nhắn cuối cùng bạn đã có. Bỏ trống để đọc từ đầu hội thoại. | Tùy chọn |
| `limit` | Số tin nhắn mỗi trang. Mặc định 30, tối đa 100. Giá trị ngoài khoảng bị **kẹp lại chứ không bị từ chối**, và phản hồi trả về giá trị đã áp dụng. | Tùy chọn |

```json Phản hồi 200 theme={null}
{
  "conversationId": "7412",
  "messages": [
    {
      "id": "9001", "role": "user", "from": "customer",
      "text": "Đơn của tôi đâu?", "createdAt": "2026-09-14T10:30:00Z",
      "attachments": [
        { "name": "hoa-don.pdf", "type": "application/pdf", "size": 1024 }
      ]
    },
    {
      "id": "9002", "role": "assistant", "from": "bot",
      "text": "Để tôi kiểm tra giúp bạn.", "createdAt": "2026-09-14T10:30:04Z",
      "buttons": [
        { "type": "postback", "title": "Theo dõi đơn", "data": "track:SO-7781" }
      ]
    },
    {
      "id": "9003", "role": "assistant", "from": "operator",
      "text": "Đơn của anh đã xử lý xong ạ.", "createdAt": "2026-09-14T10:41:00Z"
    }
  ],
  "limit": 30,
  "hasMore": false
}
```

## Lưu ý

* **Dùng khóa API của tổ chức, không dùng khóa ký của kênh.** Xem cách tạo tại [Khóa API và hạn mức](/tich-hop/live-chat-api/kenh-api/khoa-api-va-han-muc). `visitorToken` của Live Chat cũng đọc được đúng phiên của chính nó, dùng để giao diện tự dựng lấy lại hội thoại sau khi khách tải lại trang. Đọc phiên khác trả về `403 SESSION_FORBIDDEN`.
* **Phân trang bằng con trỏ, tin cũ nhất trước.** Truyền `after` bằng mã tin nhắn cuối cùng bạn đang giữ; `hasMore` cho biết còn trang tiếp theo hay không.
* **Mã tin nhắn là chuỗi** (vượt ngưỡng số nguyên an toàn của JavaScript) nhưng vẫn sắp xếp theo thứ tự số.
* **Hãy đọc `from`, đừng đọc `role`.** Lượt trả lời của nhân viên được lưu với cùng `role` như của Agent. Ở đây `from` có ba giá trị: `customer`, `bot`, `operator`.
* Giá trị `operator` hiện chưa phát sinh, vì nền tảng chưa có tính năng cho nhân viên trả lời thay Agent trên kênh này. Hãy coi nó là giá trị hợp lệ nhưng đừng chờ nó xuất hiện.
* Mỗi dòng trả về là một lượt nói thật sự, chỉ xuất hiện khi có text, nút bấm, quick reply, carousel, thẻ trích dẫn hoặc tệp đính kèm. Bạn không cần tự lọc bong bóng trống.
* **`after` sai định dạng trả về 400**, không bị âm thầm bỏ qua.
* **Một mã 404 cho ba trường hợp**: hội thoại không tồn tại, thuộc tổ chức khác, hoặc là hội thoại nội bộ của nhân viên.
* **Tệp đính kèm chỉ nêu tên, kiểu và kích thước**, không kèm khóa đối tượng, vì đây là tệp do chính người gửi tải lên.
* **Đọc lịch sử không tiêu tốn hạn mức lượt chạy.** Nó có hạn mức riêng, mặc định 120 lần mỗi phút cho mỗi khóa API. Khi vượt, phản hồi 429 chỉ kèm header `Retry-After`.

<Warning>
  Đây là đường phục hồi, **không phải kho lưu trữ**. Khi một khách hàng được xóa theo chính sách lưu giữ dữ liệu, toàn bộ tin nhắn của họ bị xóa hẳn. Hãy đồng bộ những gì bạn cần giữ về hệ thống của mình.
</Warning>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.