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

Освой 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
необязательно
Учитывать только текст, написанный пользователем с этим ID в Discord. Сочетается с q.
participantsstring[]
необязательно
До 5 пользователей, писавших в тикете, каждый как ID Discord или часть имени пользователя. В GET — через запятую, в POST — массивом.
participants_modestring
необязательно
all (по умолчанию) требует, чтобы все указанные участники писали в одном и том же тикете, any находит тикеты, где писал хотя бы один.
include_botsboolean
необязательно
Учитывать сообщения ботов и самих ботов как участников. По умолчанию отключено.
opened_bystring
необязательно
Создатель тикета, как ID Discord или часть имени пользователя.
closed_bystring
необязательно
ID пользователя Discord, который закрыл тикет.
channel_idstring
необязательно
ID канала или ветки 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, и дополняется по прежнему архиву при первом подключении 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 }
}