13.19
การค้นหาบันทึกสนทนา
/<guild_id>/api/transcripts/searchค้นในทิกเก็ตที่ปิดแล้วทุกใบของเซิร์ฟเวอร์ ไม่ใช่แค่ข้อมูลกำกับ ทั้งสิ่งที่พูดกันข้างใน ใครเป็นคนพูด ใครร่วมสนทนา เปิดและปิดเมื่อไร มาจากแผงไหน ได้คะแนนเท่าไร หรือใช้รหัสช่อง Discord ใด นี่คือกลไกเดียวกับการค้นเชิงลึกในแดชบอร์ด ต้องมีสิทธิ์ `search_transcripts` (ปิดไว้เป็นค่าเริ่มต้น)
/<guild_id>/api/transcripts/searchเหมือนกันทุกอย่าง เพียงแต่ส่งตัวกรองมาเป็นเนื้อหา JSON แทนพารามิเตอร์การค้น สะดวกกว่าสำหรับคำค้นยาวและรายชื่อผู้ร่วมสนทนา ถ้าส่งมาทั้งสองแบบ ระบบจะยึดตามเนื้อหา
ผลลัพธ์แต่ละรายการจะมีข้อมูลกำกับของทิกเก็ต ผู้ร่วมสนทนาไม่เกิน 8 คน และถ้าคุณค้นตามเนื้อหา ก็จะมีข้อความที่ตรงกันไม่เกิน 3 ท่อนมาด้วย เพื่อให้เห็นว่า*ทำไม*ทิกเก็ตใบนั้นถึงถูกพบ นำค่า TicketId จากผลลัพธ์ใดก็ได้ไปใช้กับ การดึงบันทึกสนทนา เพื่อดูข้อความทั้งหมด หรือกับ การดึงบันทึกสนทนาเป็น HTML เพื่อเอาคลังที่จัดหน้าไว้แล้ว
ตัวกรอง (ไม่บังคับทั้งหมด จะใช้ร่วมกันกี่ตัวก็ได้)
| ชื่อ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
| q | string | ไม่บังคับ | ค้นข้อความอิสระในเนื้อหาข้อความ ไม่เกิน 200 อักขระ คำที่สั้นกว่า 3 อักขระจะถูกดัชนีมองข้าม |
| said_by | string | ไม่บังคับ | นับเฉพาะเนื้อหาที่รหัสผู้ใช้ Discord นี้เขียนไว้ ใช้ร่วมกับ q |
| participants | string[] | ไม่บังคับ | ผู้ใช้ที่เคยพิมพ์ในทิกเก็ตได้ไม่เกิน 5 คน แต่ละคนเป็นรหัสผู้ใช้ Discord หรือบางส่วนของชื่อผู้ใช้ ใน GET คั่นด้วยจุลภาค ส่วนใน POST ส่งเป็นอาเรย์ |
| participants_mode | string | ไม่บังคับ | all (ค่าเริ่มต้น) กำหนดให้ผู้ร่วมสนทนาที่ระบุไว้ต้องพิมพ์ในทิกเก็ตใบเดียวกันครบทุกคน ส่วน any จะหาทิกเก็ตที่มีอย่างน้อยหนึ่งคนพิมพ์ไว้ |
| include_bots | boolean | ไม่บังคับ | นับข้อความและผู้ร่วมสนทนาที่เป็นบอทเข้าไปด้วย ค่าเริ่มต้นคือ false |
| opened_by | string | ไม่บังคับ | คนที่เปิดทิกเก็ต เป็นรหัสผู้ใช้ Discord หรือบางส่วนของชื่อผู้ใช้ |
| closed_by | string | ไม่บังคับ | รหัสผู้ใช้ Discord ของคนที่ปิดทิกเก็ต |
| channel_id | string | ไม่บังคับ | รหัสช่องหรือรหัสเธรด Discord ที่ทิกเก็ตนั้นใช้ |
| panel_id | number | ไม่บังคับ | เฉพาะทิกเก็ตที่เปิดจากแผงนี้ |
| opened_from | number | ไม่บังคับ | เวลายูนิกซ์ เฉพาะทิกเก็ตที่เปิดตั้งแต่เวลานี้เป็นต้นไป |
| opened_to | number | ไม่บังคับ | เวลายูนิกซ์ เฉพาะทิกเก็ตที่เปิดไม่เกินเวลานี้ |
| closed_from | number | ไม่บังคับ | เวลายูนิกซ์ เฉพาะทิกเก็ตที่ปิดตั้งแต่เวลานี้เป็นต้นไป |
| closed_to | number | ไม่บังคับ | เวลายูนิกซ์ เฉพาะทิกเก็ตที่ปิดไม่เกินเวลานี้ |
| rating_min | number | ไม่บังคับ | คะแนนต่ำสุด 1-5 |
| rating_max | number | ไม่บังคับ | คะแนนสูงสุด 1-5 |
| limit | number | ไม่บังคับ | จำนวนผลลัพธ์ต่อหน้า 1-50 (ค่าเริ่มต้น 25) |
| offset | number | ไม่บังคับ | จำนวนผลลัพธ์ที่ข้ามไปเพื่อแบ่งหน้า ไม่เกิน 10000 (ค่าเริ่มต้น 0) |
การค้นถูกจำกัดไว้ที่ 10 คำขอต่อนาทีต่อโทเค็น แยกจากการอ่านอย่างอื่น และทำงานภายใต้เวลาที่จำกัดอย่างเข้มงวด การค้นที่ทำไม่เสร็จทันเวลาจะคืนค่า 504 ให้แคบตัวกรองลง (เพิ่มช่วงวันที่หรือระบุแผง) แล้วลองใหม่ แทนที่จะยิงคำค้นเดิมซ้ำ ค่าที่ตรวจแล้วไม่ผ่านจะถูกตัดทิ้งไปเฉยๆ ไม่ทำให้คำขอล้มเหลว ดังนั้นให้ดูอ็อบเจ็กต์ filters ที่ส่งกลับมาในการตอบกลับ เพื่อรู้ว่าใช้ตัวกรองใดไปบ้างจริงๆ
การค้นอ่านจากดัชนีบันทึกสนทนา ซึ่งถูกสร้างขึ้นระหว่างที่เซิร์ฟเวอร์มี Premium และจะไล่เก็บคลังเดิมของคุณเข้าดัชนีด้วยเมื่ออัปเกรดครั้งแรก อ็อบเจ็กต์ coverage ในทุกการตอบกลับจะบอกว่าบันทึกของคุณถูกจัดทำดัชนีไปแล้ว (indexed) กี่รายการจากทั้งหมดที่เก็บไว้ (total) หากการไล่เก็บยังทำงานอยู่ ตัวเลขสองค่านี้จะยังไม่ตรงกัน
curl -X GET \
-H "Authorization: Bearer <API_TOKEN>" \
"https://api.ticketsx.xyz/<guild_id>/api/transcripts/search?q=refund&participants=123456789,987654321&participants_mode=all&closed_from=1730000000&limit=25"curl -X POST \
-H "Authorization: Bearer <API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"q":"refund","participants":["123456789","987654321"],"participants_mode":"all","closed_from":1730000000,"limit":25}' \
https://api.ticketsx.xyz/<guild_id>/api/transcripts/search{
"transcripts": [
{
"TicketId": 42,
"AuthorId": "123456789",
"AuthorUsername": "jane",
"PanelId": 1,
"PanelName": "Support",
"Rating": 5,
"RatingCount": 1,
"CloseReason": "Resolved",
"CreatedAt": 1732200000,
"ClosedAt": 1732210000,
"ChannelId": "1122334455",
"ClosedBy": "987654321",
"Participants": [
{ "UserId": "123456789", "Username": "jane", "MessageCount": 12, "IsBot": false }
],
"Snippets": [
{ "AuthorId": "123456789", "AuthorUsername": "jane", "Content": "my refund never arrived", "CreatedAt": 1732200050 }
]
}
],
"pagination": { "total": 1, "limit": 25, "offset": 0, "returned": 1 },
"coverage": { "indexed": 480, "total": 480 },
"filters": { "q": "refund", "participants_mode": "all", "limit": 25 }
}