Module 01: Chatbot Service (API)1.5 GraphQL API & Code Examples
Module 01 • API Gateway
1.5.5 Chi Tiết Phiên Chat (MyChatSessionDetail)
QUERY
Yêu cầu Bearer Token
MyChatSessionDetail.gql
Variables
Response 200 OK
fetchChatSessionDetail.ts
Truy vấn toàn bộ tin nhắn thuộc về một phiên làm việc cụ thể (chatSessionId). Thường dùng khi ứng dụng có màn hình danh sách các phiên tư vấn cũ và người dùng chọn bấm vào xem lại chi tiết một phiên làm việc độc lập.
💻 Chi Tiết Truy Vấn & Mã Nguồn Mẫu
GraphQL Query & Payload:
GraphQL Query
query MyChatSessionDetail($request: ChatSessionDetailRequestDtoInput!) {
myChatSessionDetail(request: $request) {
chatSessionId
channel
messages {
id
chatSessionId
senderType
senderId
senderName
message
sentAt
status
attachments
}
}
}Variables (JSON)
{
"request": {
"chatSessionId": "6a7d45b5aa2c04f1151bee2b",
"beforeAt": null,
"limit": 50,
"sort": [{ "field": "sentAt", "direction": "desc" }]
}
}Phản Hồi Thành Công (JSON Response)
{
"data": {
"myChatSessionDetail": {
"chatSessionId": "6a7d45b5aa2c04f1151bee2b",
"channel": "WEB_APP",
"messages": [
{
"id": "6a8913448201e708713c6e48",
"chatSessionId": "6a7d45b5aa2c04f1151bee2b",
"senderType": "ASSISTANT",
"senderId": "bot-buddy",
"senderName": "V-Buddy Assistant",
"message": "Dạ, VUS hiện có các khóa học tiếng Anh mầm non SmartKids...",
"sentAt": 1740200015000,
"status": "COMPLETED",
"attachments": null
}
]
}
}
}TypeScript / Axios:
import axios from 'axios';
export interface ChatSessionMessage {
id: string;
chatSessionId: string;
senderType: 'USER' | 'ASSISTANT' | 'SYSTEM';
senderId: string;
senderName: string;
message: string;
sentAt: number;
status: string;
attachments?: any;
}
/**
* Tải danh sách tin nhắn theo Session ID chỉ định
*/
export async function fetchChatSessionDetail(
apiUrl: string = process.env.VITE_API_URL!,
token: string,
sessionId: string,
beforeAt?: number | null,
limit: number = 50
): Promise<ChatSessionMessage[]> {
const query = `
query MyChatSessionDetail($request: ChatSessionDetailRequestDtoInput!) {
myChatSessionDetail(request: $request) {
chatSessionId
channel
messages {
id
chatSessionId
senderType
senderId
senderName
message
sentAt
status
attachments
}
}
}
`;
const response = await axios.post(
apiUrl,
{
query,
variables: {
request: {
chatSessionId: sessionId,
beforeAt: beforeAt || null,
limit,
sort: [{ field: 'sentAt', direction: 'desc' }],
},
},
operationName: 'MyChatSessionDetail',
},
{
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`,
'orgId': process.env.VITE_ORG_ID,
'x-org-id': process.env.VITE_ORG_ID,
'x-client-type': 'app',
'x-external-private-key': process.env.VITE_EXTERNAL_PRIVATE_KEY,
},
}
);
return response.data?.data?.myChatSessionDetail?.messages || [];
}