เอกสาร

เรียนรู้ TicketsX ได้เร็วขึ้น

คู่มือการตั้งค่า รายการคำสั่งทั้งหมด ฟีเจอร์ Premium และ REST API รวมอยู่ที่เดียว

13.19

การค้นหาบันทึกสนทนา

GET/<guild_id>/api/transcripts/search

ค้นในทิกเก็ตที่ปิดแล้วทุกใบของเซิร์ฟเวอร์ ไม่ใช่แค่ข้อมูลกำกับ ทั้งสิ่งที่พูดกันข้างใน ใครเป็นคนพูด ใครร่วมสนทนา เปิดและปิดเมื่อไร มาจากแผงไหน ได้คะแนนเท่าไร หรือใช้รหัสช่อง Discord ใด นี่คือกลไกเดียวกับการค้นเชิงลึกในแดชบอร์ด ต้องมีสิทธิ์ `search_transcripts` (ปิดไว้เป็นค่าเริ่มต้น)

POST/<guild_id>/api/transcripts/search

เหมือนกันทุกอย่าง เพียงแต่ส่งตัวกรองมาเป็นเนื้อหา JSON แทนพารามิเตอร์การค้น สะดวกกว่าสำหรับคำค้นยาวและรายชื่อผู้ร่วมสนทนา ถ้าส่งมาทั้งสองแบบ ระบบจะยึดตามเนื้อหา

ผลลัพธ์แต่ละรายการจะมีข้อมูลกำกับของทิกเก็ต ผู้ร่วมสนทนาไม่เกิน 8 คน และถ้าคุณค้นตามเนื้อหา ก็จะมีข้อความที่ตรงกันไม่เกิน 3 ท่อนมาด้วย เพื่อให้เห็นว่า*ทำไม*ทิกเก็ตใบนั้นถึงถูกพบ นำค่า TicketId จากผลลัพธ์ใดก็ได้ไปใช้กับ การดึงบันทึกสนทนา เพื่อดูข้อความทั้งหมด หรือกับ การดึงบันทึกสนทนาเป็น HTML เพื่อเอาคลังที่จัดหน้าไว้แล้ว

ตัวกรอง (ไม่บังคับทั้งหมด จะใช้ร่วมกันกี่ตัวก็ได้)

ชื่อชนิดจำเป็นคำอธิบาย
qstring
ไม่บังคับ
ค้นข้อความอิสระในเนื้อหาข้อความ ไม่เกิน 200 อักขระ คำที่สั้นกว่า 3 อักขระจะถูกดัชนีมองข้าม
said_bystring
ไม่บังคับ
นับเฉพาะเนื้อหาที่รหัสผู้ใช้ Discord นี้เขียนไว้ ใช้ร่วมกับ q
participantsstring[]
ไม่บังคับ
ผู้ใช้ที่เคยพิมพ์ในทิกเก็ตได้ไม่เกิน 5 คน แต่ละคนเป็นรหัสผู้ใช้ Discord หรือบางส่วนของชื่อผู้ใช้ ใน GET คั่นด้วยจุลภาค ส่วนใน POST ส่งเป็นอาเรย์
participants_modestring
ไม่บังคับ
all (ค่าเริ่มต้น) กำหนดให้ผู้ร่วมสนทนาที่ระบุไว้ต้องพิมพ์ในทิกเก็ตใบเดียวกันครบทุกคน ส่วน any จะหาทิกเก็ตที่มีอย่างน้อยหนึ่งคนพิมพ์ไว้
include_botsboolean
ไม่บังคับ
นับข้อความและผู้ร่วมสนทนาที่เป็นบอทเข้าไปด้วย ค่าเริ่มต้นคือ false
opened_bystring
ไม่บังคับ
คนที่เปิดทิกเก็ต เป็นรหัสผู้ใช้ Discord หรือบางส่วนของชื่อผู้ใช้
closed_bystring
ไม่บังคับ
รหัสผู้ใช้ Discord ของคนที่ปิดทิกเก็ต
channel_idstring
ไม่บังคับ
รหัสช่องหรือรหัสเธรด Discord ที่ทิกเก็ตนั้นใช้
panel_idnumber
ไม่บังคับ
เฉพาะทิกเก็ตที่เปิดจากแผงนี้
opened_fromnumber
ไม่บังคับ
เวลายูนิกซ์ เฉพาะทิกเก็ตที่เปิดตั้งแต่เวลานี้เป็นต้นไป
opened_tonumber
ไม่บังคับ
เวลายูนิกซ์ เฉพาะทิกเก็ตที่เปิดไม่เกินเวลานี้
closed_fromnumber
ไม่บังคับ
เวลายูนิกซ์ เฉพาะทิกเก็ตที่ปิดตั้งแต่เวลานี้เป็นต้นไป
closed_tonumber
ไม่บังคับ
เวลายูนิกซ์ เฉพาะทิกเก็ตที่ปิดไม่เกินเวลานี้
rating_minnumber
ไม่บังคับ
คะแนนต่ำสุด 1-5
rating_maxnumber
ไม่บังคับ
คะแนนสูงสุด 1-5
limitnumber
ไม่บังคับ
จำนวนผลลัพธ์ต่อหน้า 1-50 (ค่าเริ่มต้น 25)
offsetnumber
ไม่บังคับ
จำนวนผลลัพธ์ที่ข้ามไปเพื่อแบ่งหน้า ไม่เกิน 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"
ตัวอย่างคำขอ การค้นแบบเดียวกันแต่ส่งเป็นเนื้อหา JSON
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 }
}