對話與訊息
發送訊息 (串流)
POST /api/chatbots/{chatbotId}/completions/
參數
chatbotId
✅
string
請求內容
請求參數
conversation
string (uuid)
否
對話的唯一識別碼,如果為空則會建立新對話(可選)
message
object (含 5 個屬性: content, contentPayload, queryMetadata...)
是
要發送的訊息內容
message.content
string
是
訊息的文字內容
message.contentPayload
object
否
訊息的額外內容負載,JSON 格式(可選)
message.queryMetadata
object
否
查詢元數據,JSON 格式(可選)
message.attachments
array[AttachmentInput]
否
訊息的附件列表(可選)
message.sender
string (uuid)
否
發送者的 Contact ID(可選)
isStreaming
boolean
否
是否使用串流模式回應,預設為 false(可選)
請求結構範例
{
"conversation"?: string (uuid) // 對話的唯一識別碼,如果為空則會建立新對話(可選) (非必填)
"message": // 要發送的訊息內容
{
"content": string // 訊息的文字內容
"contentPayload"?: object // 訊息的額外內容負載,JSON 格式(可選) (非必填)
"queryMetadata"?: object // 查詢元數據,JSON 格式(可選) (非必填)
"attachments"?: [ // 訊息的附件列表(可選) (非必填)
{
"id": string (uuid) // 附件的唯一識別碼
"type": // 附件類型,可選值:image(圖片)、video(影片,開發中,尚未支援)、audio(音訊)、sticker(貼圖,開發中,尚未支援)、other(其他)
* `image` - Image
* `video` - Video
* `audio` - Audio
* `sticker` - Sticker
* `other` - Other
{
}
"filename": string // 附件的檔案名稱
"file": string (uri) // 附件檔案的 URL 位址
}
]
"sender"?: string (uuid) // 發送者的 Contact ID(可選) (非必填)
}
"isStreaming"?: boolean // 是否使用串流模式回應,預設為 false(可選) (非必填)
}請求範例值
{
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"message": {
"content": "您好!我想了解產品資訊。",
"contentPayload": null,
"queryMetadata": null,
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "document.pdf",
"file": "https://example.com/file.jpg"
}
],
"sender": "550e8400-e29b-41d4-a716-446655440000"
},
"isStreaming": true
}程式碼範例
# 呼叫 API 示例 (Shell)
curl -X POST --no-buffer "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/completions/" \
-H "Authorization: Api-Key YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"message": {
"content": "您好!我想了解產品資訊。",
"contentPayload": null,
"queryMetadata": null,
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "document.pdf",
"file": "https://example.com/file.jpg"
}
],
"sender": "550e8400-e29b-41d4-a716-446655440000"
},
"isStreaming": true
}'
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。
# 註意: 此API返回的是串流數據,可以通過以下方式處理:
# 方法1: 使用jq處理每個JSON數據塊
# 例如: curl -X POST --no-buffer "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/completions/" \
-H "Authorization: Api-Key YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"message": {
"content": "您好!我想了解產品資訊。",
"contentPayload": null,
"queryMetadata": null,
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "document.pdf",
"file": "https://example.com/file.jpg"
}
],
"sender": "550e8400-e29b-41d4-a716-446655440000"
},
"isStreaming": true
}' | jq -r .
# 方法2: 使用管道將輸出寫入文件
# 例如: curl -X POST --no-buffer "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/completions/" \
-H "Authorization: Api-Key YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"message": {
"content": "您好!我想了解產品資訊。",
"contentPayload": null,
"queryMetadata": null,
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "document.pdf",
"file": "https://example.com/file.jpg"
}
],
"sender": "550e8400-e29b-41d4-a716-446655440000"
},
"isStreaming": true
}' > response.jsonconst axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY',
'Content-Type': 'application/json'
},
responseType: 'stream' // 設置為串流回應模式
};
// 請求內容 (payload)
const data = {
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"message": {
"content": "您好!我想了解產品資訊。",
"contentPayload": null,
"queryMetadata": null,
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "document.pdf",
"file": "https://example.com/file.jpg"
}
],
"sender": "550e8400-e29b-41d4-a716-446655440000"
},
"isStreaming": true
};
axios.post("https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/completions/", data, config)
.then(response => {
console.log('串流回應開始接收:');
let completeResponse = '';
// 監聽數據塊
response.data.on('data', (chunk) => {
// 將 Buffer 轉換為字串
const chunkText = chunk.toString('utf8');
console.log(`接收到塊: ${chunkText}`);
completeResponse += chunkText;
// 嘗試解析 JSON 數據塊
try {
// 檢查是否為完整的 JSON 物件
if (chunkText.trim().startsWith('{') && chunkText.trim().endsWith('}')) {
const chunkData = JSON.parse(chunkText);
console.log('解析後的塊數據:', JSON.stringify(chunkData, null, 2));
}
} catch (err) {
// 這可能是部分塊,無法解析為 JSON
}
});
// 處理串流結束事件
response.data.on('end', () => {
console.log('\n完整累積的回應:');
console.log(completeResponse);
});
})
.catch(error => {
console.error('串流請求發生錯誤:');
console.error(error.message);
});import requests
import json
url = "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/completions/"
headers = {
"Authorization": "Api-Key YOUR_API_KEY",
"Content-Type": "application/json"
}
# 請求內容 (payload)
data = {
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"message": {
"content": "您好!我想了解產品資訊。",
"contentPayload": null,
"queryMetadata": null,
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "document.pdf",
"file": "https://example.com/file.jpg"
}
],
"sender": "550e8400-e29b-41d4-a716-446655440000"
},
"isStreaming": True # 啟用串流模式
}
# 使用串流方式處理回應
try:
with requests.post(url, json=data, headers=headers, stream=True) as response:
print("串流回應開始接收:")
# 用於累積完整回應的變數
complete_response = ""
# 逐塊接收數據
for chunk in response.iter_content(chunk_size=1024):
if chunk: # 過濾掉保持連接活躍的空塊
# 嘗試解碼
chunk_text = chunk.decode('utf-8', errors='replace')
print(f"接收到塊: {chunk_text}")
complete_response += chunk_text
# 嘗試解析 JSON 數據塊
try:
# 檢查是否為完整的 JSON 物件
if chunk_text.strip().startswith('{') and chunk_text.strip().endswith('}'):
chunk_data = json.loads(chunk_text)
print(f"解析後的塊數據: {json.dumps(chunk_data, indent=2, ensure_ascii=False)}")
except json.JSONDecodeError:
# 這是部分塊,無法單獨解析為JSON
pass
print("\n完整累積的回應:")
print(complete_response)
except Exception as e:
print("串流請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
// 使用串流選項
$response = $client->post("https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/completions/", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY',
'Content-Type' => 'application/json'
],
'json' => {
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"message": {
"content": "您好!我想了解產品資訊。",
"contentPayload": null,
"queryMetadata": null,
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "document.pdf",
"file": "https://example.com/file.jpg"
}
],
"sender": "550e8400-e29b-41d4-a716-446655440000"
},
"isStreaming": true
},
'stream' => true // 啟用串流處理
]);
echo "串流回應開始接收:\n";
// 用於累積完整回應的變數
$completeResponse = "";
// 獲取響應體作為流
$body = $response->getBody();
// 逐塊讀取串流資料
while (!$body->eof()) {
$chunk = $body->read(1024); // 讀取1KB的數據
if ($chunk) {
echo "接收到塊: " . $chunk . "\n";
$completeResponse .= $chunk;
// 嘗試解析 JSON 數據塊
if (preg_match('/^\s*{.*}\s*$/', $chunk)) {
try {
// 嘗試解析為 JSON
$chunkData = json_decode($chunk, true);
if (json_last_error() === JSON_ERROR_NONE) {
echo "解析後的塊數據:\n";
print_r($chunkData);
}
} catch (Exception $parseError) {
// 無法解析為 JSON,可能是部分塊
}
}
}
}
echo "\n完整累積的回應:\n";
echo $completeResponse;
} catch (Exception $e) {
echo '串流請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
200
對話回應內容,若是串流則為事件流
400
請求參數錯誤,可能原因包括:Contact ID 不屬於該組織
發送訊息 (建立)
POST /api/messages/
請求內容
請求參數
conversation
string (uuid)
是
type
string
否
content
string
否
contentPayload
object
否
attachments
array[AttachmentCreateInput]
否
canvas
object
否
canvas.name
string
是
canvas.canvasType
object
是
canvas.title
string
是
canvas.content
string
是
queryMetadata
object
否
請求結構範例
{
"conversation": string (uuid)
"type"?: string // 非必填
"content"?: string // 非必填
"contentPayload"?: object // 非必填
"attachments"?: [ // 非必填
{
"type"?: // 非必填
{
}
"filename": string
"file": string (uri)
"conversation"?: string (uuid) // 非必填
}
]
"canvas"?: { // 非必填
{
"name": string
"canvasType":
{
}
"title": string
"content": string
}
}
"queryMetadata"?: object // 非必填
}請求範例值
{
"conversation": "c96a0fb9-d106-4b16-8706-3906533bafa2",
"sender": {
"id": 2.992461161002561e+38,
"name": "jessiekuo",
"avatar": "https://autox-media-dev.playma.app/static/images/default-user-avatar.png"
},
"type": "incoming",
"content": "這是一條測試訊息",
"contentPayload": {
"content": "這是一條測試訊息",
"items": [
{
"type": "text",
"text": "這是一條測試訊息",
"startTimestamp": null,
"citations": []
}
],
"metadata": null
},
"feedback": "like",
"createdAt": "1748314926000",
"attachments": [],
"citations": [],
"citationNodes": [],
"canvas": {
"id": "034eecd7-e0f4-46e9-88cb-4fefdb5b7ddd",
"name": "system-architecture-diagram",
"canvasType": "markdown",
"title": "系統架構圖",
"content": "```mermaid\ngraph TD\n A[用戶] --> B[前端界面]\n B --> C[API層]\n C --> D[數據庫]\n```",
"createdAt": "1748314926000"
}
}程式碼範例
# 呼叫 API 示例 (Shell)
curl -X POST "https://api.maiagent.ai/api/messages/" \
-H "Authorization: Api-Key YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"conversation": "c96a0fb9-d106-4b16-8706-3906533bafa2",
"sender": {
"id": 2.992461161002561e+38,
"name": "jessiekuo",
"avatar": "https://autox-media-dev.playma.app/static/images/default-user-avatar.png"
},
"type": "incoming",
"content": "這是一條測試訊息",
"contentPayload": {
"content": "這是一條測試訊息",
"items": [
{
"type": "text",
"text": "這是一條測試訊息",
"startTimestamp": null,
"citations": []
}
],
"metadata": null
},
"feedback": "like",
"createdAt": "1748314926000",
"attachments": [],
"citations": [],
"citationNodes": [],
"canvas": {
"id": "034eecd7-e0f4-46e9-88cb-4fefdb5b7ddd",
"name": "system-architecture-diagram",
"canvasType": "markdown",
"title": "系統架構圖",
"content": "```mermaid\ngraph TD\n A[用戶] --> B[前端界面]\n B --> C[API層]\n C --> D[數據庫]\n```",
"createdAt": "1748314926000"
}
}'
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY',
'Content-Type': 'application/json'
}
};
// 請求內容 (payload)
const data = {
"conversation": "c96a0fb9-d106-4b16-8706-3906533bafa2",
"sender": {
"id": 2.992461161002561e+38,
"name": "jessiekuo",
"avatar": "https://autox-media-dev.playma.app/static/images/default-user-avatar.png"
},
"type": "incoming",
"content": "這是一條測試訊息",
"contentPayload": {
"content": "這是一條測試訊息",
"items": [
{
"type": "text",
"text": "這是一條測試訊息",
"startTimestamp": null,
"citations": []
}
],
"metadata": null
},
"feedback": "like",
"createdAt": "1748314926000",
"attachments": [],
"citations": [],
"citationNodes": [],
"canvas": {
"id": "034eecd7-e0f4-46e9-88cb-4fefdb5b7ddd",
"name": "system-architecture-diagram",
"canvasType": "markdown",
"title": "系統架構圖",
"content": "```mermaid\ngraph TD\n A[用戶] --> B[前端界面]\n B --> C[API層]\n C --> D[數據庫]\n```",
"createdAt": "1748314926000"
}
};
axios.post("https://api.maiagent.ai/api/messages/", data, config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/messages/"
headers = {
"Authorization": "Api-Key YOUR_API_KEY",
"Content-Type": "application/json"
}
# 請求內容 (payload)
data = {
"conversation": "c96a0fb9-d106-4b16-8706-3906533bafa2",
"sender": {
"id": 2.992461161002561e+38,
"name": "jessiekuo",
"avatar": "https://autox-media-dev.playma.app/static/images/default-user-avatar.png"
},
"type": "incoming",
"content": "這是一條測試訊息",
"contentPayload": {
"content": "這是一條測試訊息",
"items": [
{
"type": "text",
"text": "這是一條測試訊息",
"startTimestamp": null,
"citations": []
}
],
"metadata": null
},
"feedback": "like",
"createdAt": "1748314926000",
"attachments": [],
"citations": [],
"citationNodes": [],
"canvas": {
"id": "034eecd7-e0f4-46e9-88cb-4fefdb5b7ddd",
"name": "system-architecture-diagram",
"canvasType": "markdown",
"title": "系統架構圖",
"content": "```mermaid\ngraph TD\n A[用戶] --> B[前端界面]\n B --> C[API層]\n C --> D[數據庫]\n```",
"createdAt": "1748314926000"
}
}
response = requests.post(url, json=data, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->post("https://api.maiagent.ai/api/messages/", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY',
'Content-Type' => 'application/json'
],
'json' => {
"conversation": "c96a0fb9-d106-4b16-8706-3906533bafa2",
"sender": {
"id": 2.992461161002561e+38,
"name": "jessiekuo",
"avatar": "https://autox-media-dev.playma.app/static/images/default-user-avatar.png"
},
"type": "incoming",
"content": "這是一條測試訊息",
"contentPayload": {
"content": "這是一條測試訊息",
"items": [
{
"type": "text",
"text": "這是一條測試訊息",
"startTimestamp": null,
"citations": []
}
],
"metadata": null
},
"feedback": "like",
"createdAt": "1748314926000",
"attachments": [],
"citations": [],
"citationNodes": [],
"canvas": {
"id": "034eecd7-e0f4-46e9-88cb-4fefdb5b7ddd",
"name": "system-architecture-diagram",
"canvasType": "markdown",
"title": "系統架構圖",
"content": "```mermaid\ngraph TD\n A[用戶] --> B[前端界面]\n B --> C[API層]\n C --> D[數據庫]\n```",
"createdAt": "1748314926000"
}
}
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
狀態碼: 201
回應結構範例
{
"id": string (uuid)
"conversation": string (uuid)
"sender":
{
"id": string (uuid)
"name": string
"avatar": string
"email"?: string (email) // 非必填
"phoneNumber"?: string // 非必填
}
"type"?: string // 非必填
"content"?: string // 非必填
"contentPayload"?: object // 非必填
"feedback":
{
"id": string (uuid)
"type":
{
}
"suggestion"?: string // 非必填
"updatedAt": string (timestamp)
}
"createdAt": string (timestamp)
"attachments"?: [ // 非必填
{
"id": string (uuid)
"type"?: // 非必填
{
}
"filename": string
"file": string (uri)
"conversation"?: string (uuid) // 非必填
}
]
"citations": [
{
"id": string (uuid)
"filename": string // 檔案名稱
"file": string (uri) // 要上傳的檔案
"fileType": string
"knowledgeBase"?: // 非必填
{
"id": string (uuid)
"name": string
}
"size": integer
"status":
{
}
"parser": {
{
"id": string (uuid)
"name": string
"provider":
{
}
"order"?: integer // 非必填
}
}
"labels"?: [ // 非必填
{
"id": string (uuid)
"name": string
}
]
"rawUserDefineMetadata"?: object // 非必填
"createdAt": string (timestamp)
}
]
"citationNodes": [
{
"chatbotTextNode": {
{
"id": string (uuid)
"charactersCount": integer
"hitsCount": integer
"text": string
"updatedAt": string (timestamp)
"filename": string
"chatbotFile": string (uuid)
"pageNumber": integer
}
}
"score"?: number (double) // 非必填
"displayScore": integer
}
]
"canvas"?: { // 非必填
{
"id": string (uuid)
"name": string
"canvasType":
{
}
"title": string
"content": string
"createdAt": string (timestamp)
}
}
"queryMetadata"?: object // 非必填
}回應範例值
{
"conversation": "c96a0fb9-d106-4b16-8706-3906533bafa2",
"sender": {
"id": 2.992461161002561e+38,
"name": "jessiekuo",
"avatar": "https://autox-media-dev.playma.app/static/images/default-user-avatar.png"
},
"type": "incoming",
"content": "這是一條測試訊息",
"contentPayload": {
"content": "這是一條測試訊息",
"items": [
{
"type": "text",
"text": "這是一條測試訊息",
"startTimestamp": null,
"citations": []
}
],
"metadata": null
},
"feedback": "like",
"createdAt": "1748314926000",
"attachments": [],
"citations": [],
"citationNodes": [],
"canvas": {
"id": "034eecd7-e0f4-46e9-88cb-4fefdb5b7ddd",
"name": "system-architecture-diagram",
"canvasType": "markdown",
"title": "系統架構圖",
"content": "```mermaid\ngraph TD\n A[用戶] --> B[前端界面]\n B --> C[API層]\n C --> D[數據庫]\n```",
"createdAt": "1748314926000"
}
}建立新的對話
POST /api/conversations/
請求內容
請求參數
webChat
string (uuid)
是
請求結構範例
{
"webChat": string (uuid)
}請求範例值
{
"webChat": "550e8400-e29b-41d4-a716-446655440000"
}程式碼範例
# 呼叫 API 示例 (Shell)
curl -X POST "https://api.maiagent.ai/api/conversations/" \
-H "Authorization: Api-Key YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webChat": "550e8400-e29b-41d4-a716-446655440000"
}'
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY',
'Content-Type': 'application/json'
}
};
// 請求內容 (payload)
const data = {
"webChat": "550e8400-e29b-41d4-a716-446655440000"
};
axios.post("https://api.maiagent.ai/api/conversations/", data, config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/conversations/"
headers = {
"Authorization": "Api-Key YOUR_API_KEY",
"Content-Type": "application/json"
}
# 請求內容 (payload)
data = {
"webChat": "550e8400-e29b-41d4-a716-446655440000"
}
response = requests.post(url, json=data, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->post("https://api.maiagent.ai/api/conversations/", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY',
'Content-Type' => 'application/json'
],
'json' => {
"webChat": "550e8400-e29b-41d4-a716-446655440000"
}
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
狀態碼: 201
回應結構範例
{
"id": string (uuid)
"contact": { // 輕量級 Contact Serializer,用於 Conversation List view
只包含 List view 必要的欄位,移除 inboxes 和 mcp_credentials
以避免 N+1 查詢問題
{
"id": string (uuid)
"name": string
"avatar"?: string (uri) // 非必填
"sourceId"?: string // 非必填
}
}
"inbox": {
{
"id": string (uuid)
"name": string
"channelType": string (enum: line, telegram, web, messenger) // * `line` - LINE
* `telegram` - Telegram
* `web` - Web
* `messenger` - Messenger
"unreadConversationsCount"?: integer // 非必填
"signAuth"?: // 非必填
{
"id": string (uuid)
"signSource": string (uuid)
"signParams": {
{
"keycloak":
{
"clientId": string
"url": string
"realm": string
}
"line":
{
"liffId": string
}
"ad":
{
"saml": string
}
}
}
}
}
}
"title": string
"lastMessage"?: { // 非必填
{
"id": string (uuid)
"type"?: string // 非必填
"content"?: string // 非必填
"contentPayload"?: object // 非必填
"feedback":
{
"id": string (uuid)
"type":
{
}
"suggestion"?: string // 非必填
"updatedAt": string (timestamp)
}
"createdAt": string (timestamp)
"queryMetadata"?: object // 非必填
}
}
"lastMessageCreatedAt": string (timestamp)
"unreadMessagesCount": integer
"autoReplyEnabled": boolean
"isAutoReplyNow": boolean
"lastReadAt": string (timestamp)
"createdAt": string (timestamp)
"isGroupChat": boolean
"enableGroupMention"?: boolean // 非必填
"enableLoadingAnimation"?: boolean // 非必填
"queryMetadata"?: object // 非必填
"toolMask"?: object // 記錄每個工具的啟用/停用狀態 {tool_id: bool} (非必填)
"llm": string (uuid)
"ipAddress": string
"ipRecordedAt": string (timestamp)
}回應範例值
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"contact": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"avatar": "https://example.com/file.jpg",
"sourceId": "回應字串"
},
"inbox": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"channelType": "line",
"unreadConversationsCount": 456,
"signAuth": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"signSource": "550e8400-e29b-41d4-a716-446655440000",
"signParams": {
"keycloak": {
"clientId": "回應字串",
"url": "回應字串",
"realm": "回應字串"
},
"line": {
"liffId": "回應字串"
},
"ad": {
"saml": "回應字串"
}
}
}
},
"title": "回應字串",
"lastMessage": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "回應字串",
"content": "回應字串",
"contentPayload": null,
"feedback": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"suggestion": "回應字串",
"updatedAt": "回應字串"
},
"createdAt": "回應字串",
"queryMetadata": null
},
"lastMessageCreatedAt": "回應字串",
"unreadMessagesCount": 456,
"autoReplyEnabled": false,
"isAutoReplyNow": false,
"lastReadAt": "回應字串",
"createdAt": "回應字串",
"isGroupChat": false,
"enableGroupMention": false,
"enableLoadingAnimation": false,
"queryMetadata": null,
"toolMask": null,
"llm": "550e8400-e29b-41d4-a716-446655440000",
"ipAddress": "回應字串",
"ipRecordedAt": "回應字串"
}取得訊息列表
GET /api/messages/
參數
conversation
✅
string
對話 ID
cursor
❌
string
The pagination cursor value.
pageSize
❌
integer
Number of results to return per page.
程式碼範例
# 呼叫 API 示例 (Shell)
curl -X GET "https://api.maiagent.ai/api/messages/?conversation=example&cursor=example&pageSize=1" \
-H "Authorization: Api-Key YOUR_API_KEY"
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY'
}
};
axios.get("https://api.maiagent.ai/api/messages/?conversation=example&cursor=example&pageSize=1", config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/messages/?conversation=example&cursor=example&pageSize=1"
headers = {
"Authorization": "Api-Key YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->get("https://api.maiagent.ai/api/messages/?conversation=example&cursor=example&pageSize=1", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY'
]
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
狀態碼: 200
回應結構範例
{
"count": integer
"next"?: string (uri) // 非必填
"previous"?: string (uri) // 非必填
"results": [
{
"id": string (uuid)
"conversation": string (uuid)
"sender":
{
"id": string (uuid)
"name": string
"avatar": string
"email"?: string (email) // 非必填
"phoneNumber"?: string // 非必填
}
"type"?: string // 非必填
"content"?: string // 非必填
"contentPayload"?: object // 非必填
"feedback":
{
"id": string (uuid)
"type":
{
}
"suggestion"?: string // 非必填
"updatedAt": string (timestamp)
}
"createdAt": string (timestamp)
"attachments"?: [ // 非必填
{
"id": string (uuid)
"type"?: // 非必填
{
}
"filename": string
"file": string (uri)
"conversation"?: string (uuid) // 非必填
}
]
"citations": [
{
"id": string (uuid)
"filename": string // 檔案名稱
"file": string (uri) // 要上傳的檔案
"fileType": string
"knowledgeBase"?: // 非必填
{
"id": string (uuid)
"name": string
}
"size": integer
"status":
{
}
"parser": {
{
"id": string (uuid)
"name": string
"provider":
{
}
"order"?: integer // 非必填
}
}
"labels"?: [ // 非必填
{
"id": string (uuid)
"name": string
}
]
"rawUserDefineMetadata"?: object // 非必填
"createdAt": string (timestamp)
}
]
"citationNodes": [
{
"chatbotTextNode": {
{
"id": string (uuid)
"charactersCount": integer
"hitsCount": integer
"text": string
"updatedAt": string (timestamp)
"filename": string
"chatbotFile": string (uuid)
"pageNumber": integer
}
}
"score"?: number (double) // 非必填
"displayScore": integer
}
]
"canvas"?: { // 非必填
{
"id": string (uuid)
"name": string
"canvasType":
{
}
"title": string
"content": string
"createdAt": string (timestamp)
}
}
"queryMetadata"?: object // 非必填
}
]
}回應範例值
{
"count": 123,
"next": "http://api.example.org/accounts/?page=4",
"previous": "http://api.example.org/accounts/?page=2",
"results": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"sender": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"avatar": "回應字串",
"email": "[email protected]",
"phoneNumber": "回應字串"
},
"type": "回應字串",
"content": "回應字串",
"contentPayload": null,
"feedback": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"suggestion": "回應字串",
"updatedAt": "回應字串"
},
"createdAt": "回應字串",
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "回應字串",
"file": "https://example.com/file.jpg",
"conversation": "550e8400-e29b-41d4-a716-446655440000"
}
],
"citations": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"filename": "回應字串",
"file": "https://example.com/file.jpg",
"fileType": "回應字串",
"knowledgeBase": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串"
},
"size": 456,
"status": {},
"parser": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"provider": {},
"order": 456
},
"labels": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串"
}
],
"rawUserDefineMetadata": null,
"createdAt": "回應字串"
}
],
"citationNodes": [
{
"chatbotTextNode": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"charactersCount": 456,
"hitsCount": 456,
"text": "回應字串",
"updatedAt": "回應字串",
"filename": "回應字串",
"chatbotFile": "550e8400-e29b-41d4-a716-446655440000",
"pageNumber": 456
},
"score": 456,
"displayScore": 456
}
],
"canvas": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"canvasType": {},
"title": "回應字串",
"content": "回應字串",
"createdAt": "回應字串"
},
"queryMetadata": null
}
]
}取得特定訊息
GET /api/messages/{id}/
參數
id
✅
string
A UUID string identifying this 訊息.
conversation
✅
string
對話 ID
程式碼範例
# 呼叫 API 示例 (Shell)
curl -X GET "https://api.maiagent.ai/api/messages/550e8400-e29b-41d4-a716-446655440000/?conversation=example" \
-H "Authorization: Api-Key YOUR_API_KEY"
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY'
}
};
axios.get("https://api.maiagent.ai/api/messages/550e8400-e29b-41d4-a716-446655440000/?conversation=example", config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/messages/550e8400-e29b-41d4-a716-446655440000/?conversation=example"
headers = {
"Authorization": "Api-Key YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->get("https://api.maiagent.ai/api/messages/550e8400-e29b-41d4-a716-446655440000/?conversation=example", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY'
]
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
狀態碼: 200
回應結構範例
{
"id": string (uuid)
"conversation": string (uuid)
"sender":
{
"id": string (uuid)
"name": string
"avatar": string
"email"?: string (email) // 非必填
"phoneNumber"?: string // 非必填
}
"type"?: string // 非必填
"content"?: string // 非必填
"contentPayload"?: object // 非必填
"feedback":
{
"id": string (uuid)
"type":
{
}
"suggestion"?: string // 非必填
"updatedAt": string (timestamp)
}
"createdAt": string (timestamp)
"attachments"?: [ // 非必填
{
"id": string (uuid)
"type"?: // 非必填
{
}
"filename": string
"file": string (uri)
"conversation"?: string (uuid) // 非必填
}
]
"citations": [
{
"id": string (uuid)
"filename": string // 檔案名稱
"file": string (uri) // 要上傳的檔案
"fileType": string
"knowledgeBase"?: // 非必填
{
"id": string (uuid)
"name": string
}
"size": integer
"status":
{
}
"parser": {
{
"id": string (uuid)
"name": string
"provider":
{
}
"order"?: integer // 非必填
}
}
"labels"?: [ // 非必填
{
"id": string (uuid)
"name": string
}
]
"rawUserDefineMetadata"?: object // 非必填
"createdAt": string (timestamp)
}
]
"citationNodes": [
{
"chatbotTextNode": {
{
"id": string (uuid)
"charactersCount": integer
"hitsCount": integer
"text": string
"updatedAt": string (timestamp)
"filename": string
"chatbotFile": string (uuid)
"pageNumber": integer
}
}
"score"?: number (double) // 非必填
"displayScore": integer
}
]
"canvas"?: { // 非必填
{
"id": string (uuid)
"name": string
"canvasType":
{
}
"title": string
"content": string
"createdAt": string (timestamp)
}
}
"queryMetadata"?: object // 非必填
}回應範例值
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"conversation": "550e8400-e29b-41d4-a716-446655440000",
"sender": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"avatar": "回應字串",
"email": "[email protected]",
"phoneNumber": "回應字串"
},
"type": "回應字串",
"content": "回應字串",
"contentPayload": null,
"feedback": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"suggestion": "回應字串",
"updatedAt": "回應字串"
},
"createdAt": "回應字串",
"attachments": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"filename": "回應字串",
"file": "https://example.com/file.jpg",
"conversation": "550e8400-e29b-41d4-a716-446655440000"
}
],
"citations": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"filename": "回應字串",
"file": "https://example.com/file.jpg",
"fileType": "回應字串",
"knowledgeBase": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串"
},
"size": 456,
"status": {},
"parser": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"provider": {},
"order": 456
},
"labels": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串"
}
],
"rawUserDefineMetadata": null,
"createdAt": "回應字串"
}
],
"citationNodes": [
{
"chatbotTextNode": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"charactersCount": 456,
"hitsCount": 456,
"text": "回應字串",
"updatedAt": "回應字串",
"filename": "回應字串",
"chatbotFile": "550e8400-e29b-41d4-a716-446655440000",
"pageNumber": 456
},
"score": 456,
"displayScore": 456
}
],
"canvas": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"canvasType": {},
"title": "回應字串",
"content": "回應字串",
"createdAt": "回應字串"
},
"queryMetadata": null
}取得對話列表
GET /api/conversations/
參數
cursor
❌
string
The pagination cursor value.
inbox
✅
string
對話平台 ID
keyword
❌
string
關鍵字搜尋
pageSize
❌
integer
Number of results to return per page.
程式碼範例
# 呼叫 API 示例 (Shell)
curl -X GET "https://api.maiagent.ai/api/conversations/?cursor=example&inbox=example&keyword=example&pageSize=1" \
-H "Authorization: Api-Key YOUR_API_KEY"
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY'
}
};
axios.get("https://api.maiagent.ai/api/conversations/?cursor=example&inbox=example&keyword=example&pageSize=1", config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/conversations/?cursor=example&inbox=example&keyword=example&pageSize=1"
headers = {
"Authorization": "Api-Key YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->get("https://api.maiagent.ai/api/conversations/?cursor=example&inbox=example&keyword=example&pageSize=1", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY'
]
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
狀態碼: 200
回應結構範例
{
"next"?: string (uri) // 非必填
"previous"?: string (uri) // 非必填
"results": [
{
"id": string (uuid)
"contact": { // 輕量級 Contact Serializer,用於 Conversation List view
只包含 List view 必要的欄位,移除 inboxes 和 mcp_credentials
以避免 N+1 查詢問題
{
"id": string (uuid)
"name": string
"avatar"?: string (uri) // 非必填
"sourceId"?: string // 非必填
}
}
"inbox": {
{
"id": string (uuid)
"name": string
"channelType": string (enum: line, telegram, web, messenger) // * `line` - LINE
* `telegram` - Telegram
* `web` - Web
* `messenger` - Messenger
"unreadConversationsCount"?: integer // 非必填
"signAuth"?: // 非必填
{
"id": string (uuid)
"signSource": string (uuid)
"signParams": {
{
"keycloak":
{
"clientId": string
"url": string
"realm": string
}
"line":
{
"liffId": string
}
"ad":
{
"saml": string
}
}
}
}
}
}
"title": string
"lastMessage"?: { // 非必填
{
"id": string (uuid)
"type"?: string // 非必填
"content"?: string // 非必填
"contentPayload"?: object // 非必填
"feedback":
{
"id": string (uuid)
"type":
{
}
"suggestion"?: string // 非必填
"updatedAt": string (timestamp)
}
"createdAt": string (timestamp)
"queryMetadata"?: object // 非必填
}
}
"lastMessageCreatedAt": string (timestamp)
"unreadMessagesCount": integer
"autoReplyEnabled": boolean
"isAutoReplyNow": boolean
"lastReadAt": string (timestamp)
"createdAt": string (timestamp)
"isGroupChat": boolean
"enableGroupMention"?: boolean // 非必填
"enableLoadingAnimation"?: boolean // 非必填
"queryMetadata"?: object // 非必填
"toolMask"?: object // 記錄每個工具的啟用/停用狀態 {tool_id: bool} (非必填)
"llm": string (uuid)
"ipAddress": string
"ipRecordedAt": string (timestamp)
}
]
}回應範例值
{
"next": "http://api.example.org/accounts/?cursor=cD00ODY%3D\"",
"previous": "http://api.example.org/accounts/?cursor=cj0xJnA9NDg3",
"results": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"contact": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"avatar": "https://example.com/file.jpg",
"sourceId": "回應字串"
},
"inbox": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"channelType": "line",
"unreadConversationsCount": 456,
"signAuth": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"signSource": "550e8400-e29b-41d4-a716-446655440000",
"signParams": {
"keycloak": {
"clientId": "回應字串",
"url": "回應字串",
"realm": "回應字串"
},
"line": {
"liffId": "回應字串"
},
"ad": {
"saml": "回應字串"
}
}
}
},
"title": "回應字串",
"lastMessage": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "回應字串",
"content": "回應字串",
"contentPayload": null,
"feedback": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"suggestion": "回應字串",
"updatedAt": "回應字串"
},
"createdAt": "回應字串",
"queryMetadata": null
},
"lastMessageCreatedAt": "回應字串",
"unreadMessagesCount": 456,
"autoReplyEnabled": false,
"isAutoReplyNow": false,
"lastReadAt": "回應字串",
"createdAt": "回應字串",
"isGroupChat": false,
"enableGroupMention": false,
"enableLoadingAnimation": false,
"queryMetadata": null,
"toolMask": null,
"llm": "550e8400-e29b-41d4-a716-446655440000",
"ipAddress": "回應字串",
"ipRecordedAt": "回應字串"
}
]
}取得特定對話
GET /api/conversations/{id}/
參數
id
✅
string
A UUID string identifying this 對話.
程式碼範例
# 呼叫 API 示例 (Shell)
curl -X GET "https://api.maiagent.ai/api/conversations/550e8400-e29b-41d4-a716-446655440000/" \
-H "Authorization: Api-Key YOUR_API_KEY"
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY'
}
};
axios.get("https://api.maiagent.ai/api/conversations/550e8400-e29b-41d4-a716-446655440000/", config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/conversations/550e8400-e29b-41d4-a716-446655440000/"
headers = {
"Authorization": "Api-Key YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->get("https://api.maiagent.ai/api/conversations/550e8400-e29b-41d4-a716-446655440000/", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY'
]
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
狀態碼: 200
回應結構範例
{
"id": string (uuid)
"contact": { // 輕量級 Contact Serializer,用於 Conversation List view
只包含 List view 必要的欄位,移除 inboxes 和 mcp_credentials
以避免 N+1 查詢問題
{
"id": string (uuid)
"name": string
"avatar"?: string (uri) // 非必填
"sourceId"?: string // 非必填
}
}
"inbox": {
{
"id": string (uuid)
"name": string
"channelType": string (enum: line, telegram, web, messenger) // * `line` - LINE
* `telegram` - Telegram
* `web` - Web
* `messenger` - Messenger
"unreadConversationsCount"?: integer // 非必填
"signAuth"?: // 非必填
{
"id": string (uuid)
"signSource": string (uuid)
"signParams": {
{
"keycloak":
{
"clientId": string
"url": string
"realm": string
}
"line":
{
"liffId": string
}
"ad":
{
"saml": string
}
}
}
}
}
}
"title": string
"lastMessage"?: { // 非必填
{
"id": string (uuid)
"type"?: string // 非必填
"content"?: string // 非必填
"contentPayload"?: object // 非必填
"feedback":
{
"id": string (uuid)
"type":
{
}
"suggestion"?: string // 非必填
"updatedAt": string (timestamp)
}
"createdAt": string (timestamp)
"queryMetadata"?: object // 非必填
}
}
"lastMessageCreatedAt": string (timestamp)
"unreadMessagesCount": integer
"autoReplyEnabled": boolean
"isAutoReplyNow": boolean
"lastReadAt": string (timestamp)
"createdAt": string (timestamp)
"isGroupChat": boolean
"enableGroupMention"?: boolean // 非必填
"enableLoadingAnimation"?: boolean // 非必填
"queryMetadata"?: object // 非必填
"toolMask"?: object // 記錄每個工具的啟用/停用狀態 {tool_id: bool} (非必填)
"llm": string (uuid)
"ipAddress": string
"ipRecordedAt": string (timestamp)
}回應範例值
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"contact": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"avatar": "https://example.com/file.jpg",
"sourceId": "回應字串"
},
"inbox": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應字串",
"channelType": "line",
"unreadConversationsCount": 456,
"signAuth": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"signSource": "550e8400-e29b-41d4-a716-446655440000",
"signParams": {
"keycloak": {
"clientId": "回應字串",
"url": "回應字串",
"realm": "回應字串"
},
"line": {
"liffId": "回應字串"
},
"ad": {
"saml": "回應字串"
}
}
}
},
"title": "回應字串",
"lastMessage": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "回應字串",
"content": "回應字串",
"contentPayload": null,
"feedback": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"suggestion": "回應字串",
"updatedAt": "回應字串"
},
"createdAt": "回應字串",
"queryMetadata": null
},
"lastMessageCreatedAt": "回應字串",
"unreadMessagesCount": 456,
"autoReplyEnabled": false,
"isAutoReplyNow": false,
"lastReadAt": "回應字串",
"createdAt": "回應字串",
"isGroupChat": false,
"enableGroupMention": false,
"enableLoadingAnimation": false,
"queryMetadata": null,
"toolMask": null,
"llm": "550e8400-e29b-41d4-a716-446655440000",
"ipAddress": "回應字串",
"ipRecordedAt": "回應字串"
}取得 AI 助理對話紀錄
GET /api/chatbots/{chatbotPk}/records/
參數
chatbotPk
✅
string
A UUID string identifying this Chatbot ID
botMessage
❌
string
過濾包含特定內容的機器人回覆
endDate
✅
string
結束日期 (必填,格式:YYYY-MM-DD,如:2025-01-31)
page
❌
integer
A page number within the paginated result set.
pageSize
❌
integer
Number of results to return per page.
startDate
✅
string
開始日期 (必填,格式:YYYY-MM-DD,如:2025-01-01)
userMessage
❌
string
過濾包含特定內容的用戶訊息
程式碼範例
# 呼叫 API 示例 (Shell)
curl -X GET "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/?botMessage=example&endDate=example&page=1&pageSize=1&startDate=example&userMessage=example" \
-H "Authorization: Api-Key YOUR_API_KEY"
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY'
}
};
axios.get("https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/?botMessage=example&endDate=example&page=1&pageSize=1&startDate=example&userMessage=example", config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/?botMessage=example&endDate=example&page=1&pageSize=1&startDate=example&userMessage=example"
headers = {
"Authorization": "Api-Key YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->get("https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/?botMessage=example&endDate=example&page=1&pageSize=1&startDate=example&userMessage=example", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY'
]
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
狀態碼: 200
回應結構範例
{
"count": integer
"next"?: string (uri) // 非必填
"previous"?: string (uri) // 非必填
"results": [
{
"id": string (uuid)
"senderName": string // 返回使用者訊息發送者的名稱
"feedback":
{
"id": string (uuid)
"type":
{
}
"suggestion"?: string // 非必填
"updatedAt": string (timestamp)
}
"inputMessage": string
"condenseMessage": string // 綜合聊天歷史與上下文後,修飾過後的使用者訊息
"outputMessage": string
"faithfulnessScore": number (double) // 判斷chatbot回覆是否符合資料庫內容,是否憑空想像
"displayFaithfulnessScore": integer
"answerRelevancyScore": number (double) // 判斷chatbot回覆是否與使用者問題相關
"displayAnswerRelevancyScore": integer
"contextPrecisionScore": number (double) // 判斷chatbot回覆是否與參考資料相關
"displayContextPrecisionScore": integer
"answerCorrectnessScore": number (double) // 判斷chatbot回覆是否正確(需要有標準答案)
"displayAnswerCorrectnessScore": integer
"answerSimilarityScore": number (double) // 判斷chatbot回覆是否與標準答案相似
"displayAnswerSimilarityScore": integer
"contextRecallScore": number (double) // 判斷chatbot回覆是否能夠從參考資料中召回相關資料
"displayContextRecallScore": integer
"replyTime": string
"createdAt": string (timestamp)
"error": string // 儲存執行過程中的錯誤訊息
"processingTime": object // 回傳各個處理階段的時間統計
"usage": object // 回傳使用量統計,包含字數和 token 數
"citationNodes": [
{
"id": string
"text": string
}
]
"context": string
}
]
}回應範例值
{
"count": 123,
"next": "http://api.example.org/accounts/?page=4",
"previous": "http://api.example.org/accounts/?page=2",
"results": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"senderName": "回應字串",
"feedback": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": {},
"suggestion": "回應字串",
"updatedAt": "回應字串"
},
"inputMessage": "回應字串",
"condenseMessage": "回應字串",
"outputMessage": "回應字串",
"faithfulnessScore": 456,
"displayFaithfulnessScore": 456,
"answerRelevancyScore": 456,
"displayAnswerRelevancyScore": 456,
"contextPrecisionScore": 456,
"displayContextPrecisionScore": 456,
"answerCorrectnessScore": 456,
"displayAnswerCorrectnessScore": 456,
"answerSimilarityScore": 456,
"displayAnswerSimilarityScore": 456,
"contextRecallScore": 456,
"displayContextRecallScore": 456,
"replyTime": "回應字串",
"createdAt": "回應字串",
"error": "回應字串",
"processingTime": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應範例名稱",
"description": "回應範例描述"
},
"usage": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "回應範例名稱",
"description": "回應範例描述"
},
"citationNodes": [
{
"id": "回應字串",
"text": "回應字串"
}
],
"context": "回應字串"
}
]
}對話紀錄匯出為 Excel 檔案
GET /api/chatbots/{chatbotPk}/records/export-excel/
參數
chatbotPk
✅
string
A UUID string identifying this Chatbot ID
botMessage
❌
string
過濾包含特定內容的機器人回覆
endDate
✅
string
結束日期 (必填,格式:YYYY-MM-DD,如:2025-01-31)
startDate
✅
string
開始日期 (必填,格式:YYYY-MM-DD,如:2025-01-01)
userMessage
❌
string
過濾包含特定內容的用戶訊息
程式碼範例
# 呼叫 API 示例 (Shell)
curl -X GET "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/export-excel/?botMessage=example&endDate=example&startDate=example&userMessage=example" \
-H "Authorization: Api-Key YOUR_API_KEY"
# 請確認在執行前替換 YOUR_API_KEY 並核對請求資料。const axios = require('axios');
// 設定請求標頭
const config = {
headers: {
'Authorization': 'Api-Key YOUR_API_KEY'
}
};
axios.get("https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/export-excel/?botMessage=example&endDate=example&startDate=example&userMessage=example", config)
.then(response => {
console.log('成功取得回應:');
console.log(response.data);
})
.catch(error => {
console.error('請求發生錯誤:');
console.error(error.response?.data || error.message);
});import requests
url = "https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/export-excel/?botMessage=example&endDate=example&startDate=example&userMessage=example"
headers = {
"Authorization": "Api-Key YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
try:
print("成功取得回應:")
print(response.json())
except Exception as e:
print("請求發生錯誤:", e)<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
try {
$response = $client->get("https://api.maiagent.ai/api/chatbots/550e8400-e29b-41d4-a716-446655440000/records/export-excel/?botMessage=example&endDate=example&startDate=example&userMessage=example", [
'headers' => [
'Authorization' => 'Api-Key YOUR_API_KEY'
]
]);
$data = json_decode($response->getBody(), true);
echo "成功取得回應:\n";
print_r($data);
} catch (Exception $e) {
echo '請求發生錯誤: ' . $e->getMessage();
}
?>回應內容
200
Excel 檔案下載
Last updated
Was this helpful?
