VI | EN
Nhắn Messenger
Dành cho developer

Lấy tin nhắn của một hội thoại Pancake — API Pancake Chat

get /pages/{page_id}/conversations/{conversation_id}/messages · gọi qua Quantri360 bằng một API key cho chính tài khoản / tài sản bạn đã kết nối và ủy quyền — 360 lo việc ký request và làm mới phiên đăng nhập bạn đã cấp.

get /pages/{page_id}/conversations/{conversation_id}/messages

GET/public_api/v1/pages/{page_id}/conversations/{conversation_id}/messagesGọi qua 360: GET https://partner.quantri360.com/v1/pancake_chat/public_api/v1/pages/{page_id}/conversations/{conversation_id}/messages
Sắp mở. API này đã chạy thật qua 360 và đang được chốt giá — bạn có thể đọc tài liệu và chuẩn bị tích hợp trước.
Mô tả API

Tin nhắn của MỘT hội thoại (inbox hoặc bình luận) kèm hồ sơ khách: nội dung, người gửi (khách hay nhân viên nào), tệp đính kèm, SĐT bắt được, quảng cáo khách đã bấm, ghi chú nội bộ. Mỗi lần 30 tin; tăng current_count để lấy tin CŨ hơn. Dùng để đọc lại nội dung tư vấn, chấm lý do chốt / không chốt, nối SĐT về đơn hàng.

  • Thứ tự: current_count=0 lấy 30 tin MỚI nhất nhưng trong mảng chúng xếp CŨ → MỚI; lô current_count=30 là 30 tin cũ hơn nữa, cũng xếp cũ → mới. Muốn cả hội thoại theo thời gian: lấy các lô rồi ghép lô sau lên TRƯỚC.
  • inserted_at ở API này là giờ UTC, trong khi export_data trả giờ VN cho cùng hội thoại — đổi múi giờ trước khi ghép hai nguồn.
  • Phân biệt tin của trang và của khách bằng from.id = page_id.
  • Mã hội thoại sai / không thuộc trang → HTTP 200 với {"message":"conversation_id not found","success":false,"error_code":120}.
  • Phản hồi chứa dữ liệu cá nhân (tên, SĐT, nội dung chat) — chỉ lưu ở nơi có kiểm soát quyền. Pancake giới hạn 5 lượt / giây / trang.

Request

Địa chỉ

GET https://partner.quantri360.com/v1/pancake_chat/public_api/v1/pages/{page_id}/conversations/{conversation_id}/messages

Xác thực & gian hàng

TênVị tríKiểuMẫuMô tả
AuthorizationheaderheaderBearer q360_live_ab12cd34_…Khóa API của brand (tạo ở mục API key). Bắt buộc với mọi request. Brand suy từ key — không truyền mã brand.
platform_shop_idquerystring107896751234567page_id đã nối — có thể bỏ (lấy từ đường dẫn).

Tham số request

TênVị tríKiểuBắt buộcMẫuMô tả
page_idpathstringCó107896751234567Mã trang đã nối với 360 (khác trang đã nối → 404).
conversation_idpathstringCó107896751234567_7712345678901234Mã hội thoại — id ở danh sách hội thoại (v2 /conversations) hoặc data[].id của export_data.
current_countqueryintKhông0Số tin đã lấy. Bỏ trống / 0 = 30 tin MỚI nhất; 30 = 30 tin cũ hơn tiếp theo; cứ thế cộng 30.

Phân trang

Gọi current_count = 0, 30, 60… — trả < 30 tin (hoặc 0) là hết. Ví dụ thật: hội thoại có 78 tin → 0 → 30 tin, 30 → 30 tin, 60 → 18 tin, 90 → 0 tin.

Ví dụ request

curl -s "https://partner.quantri360.com/v1/pancake_chat/public_api/v1/pages/107896751234567/conversations/107896751234567_7712345678901234/messages?current_count=0" \
  -H "Authorization: Bearer $KEY"
Python
import requests

KEY = "q360_live_..."  # khóa API của brand
r = requests.get(
    "https://partner.quantri360.com/v1/pancake_chat/public_api/v1/pages/107896751234567/conversations/107896751234567_7712345678901234/messages",
    params={
        "current_count": 0
    },
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=60,
)
print(r.status_code)
print(r.json())
Node.js
const KEY = 'q360_live_...'; // khóa API của brand
const url = new URL('https://partner.quantri360.com/v1/pancake_chat/public_api/v1/pages/107896751234567/conversations/107896751234567_7712345678901234/messages');
for (const [k, v] of Object.entries({"current_count":0})) url.searchParams.set(k, typeof v === 'object' ? JSON.stringify(v) : String(v));
const r = await fetch(url, {
  method: 'GET',
  headers: { Authorization: `Bearer ${KEY}` },
});
console.log(r.status, await r.json());
PHP
<?php
$key = 'q360_live_...'; // khóa API của brand
$url = 'https://partner.quantri360.com/v1/pancake_chat/public_api/v1/pages/107896751234567/conversations/107896751234567_7712345678901234/messages' . '?' . http_build_query(['current_count' => 0]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $key]);
$res = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, "\n", $res;

Response

Tham số phản hồi (nguyên của Pancake Chat)

TênKiểuMẫuMô tả
successbooltrue`false` + `message` + `error_code` khi lỗi (HTTP vẫn 200).
conversation_idstring107896751234567_7712345678901234
messagesobject[]Tối đa 30 tin / lần, TRONG MỖI LẦN xếp từ CŨ đến MỚI (phần tử cuối là tin mới nhất của lô).
idstringm_USqS7zkMVsgOX8…Mã tin (bình luận: `<mã bài>_<mã bình luận>`).
typestringINBOX`INBOX` · `COMMENT`.
messagestringDạ chị cho em xin SĐT ạNội dung đã dựng (có thể chứa HTML).
original_messagestringDạ chị cho em xin SĐT ạVăn bản gốc — nên dùng trường này; rỗng với tin chỉ có ảnh / sticker / mẫu.
fromobjectNgười gửi.
idstring107896751234567Trùng page_id → TRANG gửi (nhân viên / tự động); khác → khách (PSID).
namestringKhách hàng ATên hiển thị.
admin_namestringNhân viên BTên nhân viên gửi (tin của trang).
uidstring2152700b-5b77-…UUID nhân viên gửi — khớp `users[].id` của /users; tin cũ hoặc tin tự động có thể không có.
admin_idstringMã tài khoản quản trị gửi.
ai_generatedboolfalseTin do AI soạn.
is_automatedboolfalseTin gửi tự động.
inserted_atstring2026-10-27T11:00:10.000000Thời điểm gửi — giờ UTC (cộng 7 giờ ra giờ VN).
seenbooltrueĐã xem.
has_phoneboolfalseTin có SĐT.
phone_infoobject[][]SĐT phát hiện trong tin này.
attachmentsobject[][]Tệp đính kèm: type (`photo` · `video` · `sticker` · `template` · `system_message`), url, title, payload (với `template`)…
is_hidden / is_removedboolfalseBình luận bị ẩn / bị xóa.
parent_idstringnullBình luận cha (với bình luận trả lời).
…Còn: show_info, can_hide, can_like, can_remove, can_reply_privately, private_reply_conversation, message_tags, edit_history, rich_message…
conv_fromobjectKhách sở hữu hội thoại: id (PSID), name, email.
customersobject[]Hồ sơ khách: id, customer_id, fb_id, global_id, name, can_inbox, recent_phone_numbers, ad_clicks[{ ad_id, post_id, inserted_at }], web_sources, personal_info…
activitiesobject[]Nguồn mở hội thoại: type (vd `OPEN_THREAD`), source (vd `ADS`), ad_id, ads_context_data{ ad_title, post_id, photo_url }, inserted_at.
ad_clicksobjectKhóa = mã khách; giá trị = mảng { ad_id, post_id, inserted_at } các lần bấm quảng cáo.
conv_phone_numbersstring[][]SĐT phát hiện trong hội thoại.
conv_recent_phone_numbersobject[][]SĐT kèm vị trí: phone_number, captured, m_id, offset, length.
can_inboxbooltrueTrang còn nhắn được cho khách.
notesobject[]nullGhi chú nội bộ về khách (`null` khi chưa có).
read_watermarksobject[]Mốc đã đọc: psid, message_id, watermark (Unix GIÂY).
postobjectnullBài viết của hội thoại bình luận; `null` với inbox.
…Còn: gender, birthday, lives_in, global_id, is_banned, banned_count, reported_count, recent_orders, recent_phone_numbers, extra_info, profile_updated_at…

Mẫu phản hồi

{
  "success": true,
  "conversation_id": "107896751234567_7712345678901234",
  "messages": [
    {
      "id": "m_USqS7zkM…",
      "type": "INBOX",
      "message": "Dạ shop gửi chị mẫu mới ạ",
      "original_message": "Dạ shop gửi chị mẫu mới ạ",
      "from": {
        "id": "107896751234567",
        "name": "Trang ABC",
        "admin_name": "Nhân viên B",
        "uid": "2152700b-5b77-…",
        "ai_generated": false
      },
      "inserted_at": "2026-10-27T11:00:10.000000",
      "page_id": "107896751234567",
      "conversation_id": "107896751234567_7712345678901234",
      "seen": true,
      "has_phone": false,
      "attachments": [],
      "is_hidden": false,
      "is_removed": false,
      "parent_id": null
    },
    {
      "id": "m_PN19myjn…",
      "type": "INBOX",
      "message": "",
      "original_message": "",
      "from": {
        "id": "107896751234567",
        "name": "Trang ABC"
      },
      "inserted_at": "2026-10-29T11:22:34.000000",
      "seen": true,
      "has_phone": false,
      "attachments": [
        {
          "type": "template",
          "title": "Ưu đãi & thông báo",
          "payload": {
            "template_type": "generic",
            "elements": [
              "…"
            ]
          }
        }
      ]
    }
  ],
  "conv_from": {
    "id": "7712345678901234",
    "name": "Khách hàng A",
    "email": "7712345678901234@facebook.com"
  },
  "activities": [
    {
      "type": "OPEN_THREAD",
      "source": "ADS",
      "ad_id": "23853767528900251",
      "psid": "7712345678901234",
      "ref": "",
      "inserted_at": "2023-04-12T23:02:04",
      "ads_context_data": {
        "ad_title": "ad",
        "post_id": "1861299050895911",
        "photo_url": "…"
      }
    }
  ],
  "read_watermarks": [
    {
      "psid": "7712345678901234",
      "message_id": "m_USqS7zkM…",
      "watermark": 1793098810,
      "is_group_conv": null
    }
  ],
  "conv_phone_numbers": [],
  "conv_recent_phone_numbers": [],
  "can_inbox": true,
  "notes": null,
  "post": null,
  "gender": "female",
  "is_banned": false
}

Bắt đầu dùng

  1. Đăng ký tài khoản Partner
  2. Mở loại dữ liệu thuộc nhóm Hội thoại & tin nhắn ở trang nền tảng
  3. Tạo API key (tick kênh Pancake Chat)
  4. Gọi theo ví dụ ở trên