Документация

Научи 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
по избор
Времева отметка Unix: само тикетите, отворени в този момент или след него.
opened_tonumber
по избор
Времева отметка Unix: само тикетите, отворени в този момент или преди него.
closed_fromnumber
по избор
Времева отметка Unix: само тикетите, затворени в този момент или след него.
closed_tonumber
по избор
Времева отметка Unix: само тикетите, затворени в този момент или преди него.
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 }
}