13.19
Rechercher des transcriptions
/<guild_id>/api/transcripts/searchCherche dans chaque ticket fermé du serveur, pas seulement dans ses métadonnées : ce qui y a été dit, qui l'a dit, qui a participé, quand il a été ouvert ou fermé, son panneau, sa note ou son identifiant de salon Discord. C'est le même moteur que la recherche approfondie du tableau de bord. Nécessite la permission `search_transcripts` (désactivée par défaut).
/<guild_id>/api/transcripts/searchIdentique, avec les filtres envoyés dans un corps JSON plutôt qu'en paramètres de requête. Plus pratique pour les requêtes longues et les listes de participants. Si tu envoies les deux, le corps l'emporte.
Chaque résultat porte les métadonnées du ticket, jusqu'à 8 participants et, si tu as cherché par contenu, jusqu'à 3 extraits de messages correspondants pour que tu voies *pourquoi* il correspond. Reprends le TicketId d'un résultat directement dans Récupérer une transcription pour la liste complète des messages, ou dans Récupérer le HTML d'une transcription pour l'archive rendue.
Filtres (tous facultatifs, à combiner à volonté)
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
| q | string | facultatif | Recherche en texte libre dans le contenu des messages, 200 caractères max. Les mots de moins de 3 caractères sont ignorés par l'index. |
| said_by | string | facultatif | Ne retient que le contenu écrit par cet identifiant d'utilisateur Discord. À combiner avec q. |
| participants | string[] | facultatif | Jusqu'à 5 utilisateurs ayant écrit dans le ticket, chacun sous forme d'identifiant Discord ou de fragment de nom d'utilisateur. Séparés par des virgules en GET, en tableau en POST. |
| participants_mode | string | facultatif | all (par défaut) exige que tous les participants listés aient écrit dans le même ticket ; any retient les tickets où au moins un l'a fait. |
| include_bots | boolean | facultatif | Inclut les messages de bots et les bots comme participants dans la correspondance. Faux par défaut. |
| opened_by | string | facultatif | Créateur du ticket, sous forme d'identifiant Discord ou de fragment de nom d'utilisateur. |
| closed_by | string | facultatif | Identifiant Discord de la personne qui a fermé le ticket. |
| channel_id | string | facultatif | Identifiant du salon ou du fil Discord qu'utilisait le ticket. |
| panel_id | number | facultatif | Uniquement les tickets ouverts depuis ce panneau. |
| opened_from | number | facultatif | Horodatage Unix : uniquement les tickets ouverts à partir de ce moment. |
| opened_to | number | facultatif | Horodatage Unix : uniquement les tickets ouverts jusqu'à ce moment. |
| closed_from | number | facultatif | Horodatage Unix : uniquement les tickets fermés à partir de ce moment. |
| closed_to | number | facultatif | Horodatage Unix : uniquement les tickets fermés jusqu'à ce moment. |
| rating_min | number | facultatif | Note minimale, 1-5. |
| rating_max | number | facultatif | Note maximale, 1-5. |
| limit | number | facultatif | Résultats par page, 1-50 (25 par défaut). |
| offset | number | facultatif | Résultats à ignorer pour la pagination, 10000 max (0 par défaut). |
La recherche est limitée à 10 requêtes par minute et par jeton, indépendamment des autres lectures, et s'exécute avec un budget de temps strict. Une recherche qui n'aboutit pas à temps renvoie 504. Resserre les filtres (ajoute une période ou un panneau) et réessaie plutôt que de relancer la même requête. Les valeurs qui ne passent pas la validation sont ignorées plutôt que rejetées : regarde donc l'objet filters renvoyé dans la réponse pour voir ce qui a réellement été appliqué.
La recherche s'appuie sur l'index des transcriptions, construit tant que le serveur a Premium et repris sur ton archive existante lors de ton premier passage à Premium. L'objet coverage de chaque réponse t'indique combien de tes transcriptions sont indexées (indexed) par rapport au total stocké (total). Si une reprise est encore en cours, les deux valeurs ne coïncident pas encore.
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 }
}