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 | необязательно | Учитывать только текст, написанный пользователем с этим ID в Discord. Сочетается с q. |
| participants | string[] | необязательно | До 5 пользователей, писавших в тикете, каждый как ID Discord или часть имени пользователя. В GET — через запятую, в POST — массивом. |
| participants_mode | string | необязательно | all (по умолчанию) требует, чтобы все указанные участники писали в одном и том же тикете, any находит тикеты, где писал хотя бы один. |
| include_bots | boolean | необязательно | Учитывать сообщения ботов и самих ботов как участников. По умолчанию отключено. |
| opened_by | string | необязательно | Создатель тикета, как ID Discord или часть имени пользователя. |
| closed_by | string | необязательно | ID пользователя Discord, который закрыл тикет. |
| channel_id | string | необязательно | ID канала или ветки Discord, где находился тикет. |
| panel_id | number | необязательно | Только тикеты, открытые из этой панели. |
| opened_from | number | необязательно | Unix-время: только тикеты, открытые в этот момент или позже. |
| opened_to | number | необязательно | Unix-время: только тикеты, открытые в этот момент или раньше. |
| closed_from | number | необязательно | Unix-время: только тикеты, закрытые в этот момент или позже. |
| closed_to | number | необязательно | Unix-время: только тикеты, закрытые в этот момент или раньше. |
| rating_min | number | необязательно | Минимальная оценка, 1-5. |
| rating_max | number | необязательно | Максимальная оценка, 1-5. |
| limit | number | необязательно | Результатов на страницу, 1-50 (по умолчанию 25). |
| offset | number | необязательно | Сколько результатов пропустить при постраничном выводе, до 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"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 }
}