Documentation

Prends TicketsX en main plus vite

Guides d'installation, référence complète des commandes, fonctionnalités Premium et API REST au même endroit.

13.19

Rechercher des transcriptions

GET/<guild_id>/api/transcripts/search

Cherche 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).

POST/<guild_id>/api/transcripts/search

Identique, 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é)

NomTypeObligatoireDescription
qstring
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_bystring
facultatif
Ne retient que le contenu écrit par cet identifiant d'utilisateur Discord. À combiner avec q.
participantsstring[]
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_modestring
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_botsboolean
facultatif
Inclut les messages de bots et les bots comme participants dans la correspondance. Faux par défaut.
opened_bystring
facultatif
Créateur du ticket, sous forme d'identifiant Discord ou de fragment de nom d'utilisateur.
closed_bystring
facultatif
Identifiant Discord de la personne qui a fermé le ticket.
channel_idstring
facultatif
Identifiant du salon ou du fil Discord qu'utilisait le ticket.
panel_idnumber
facultatif
Uniquement les tickets ouverts depuis ce panneau.
opened_fromnumber
facultatif
Horodatage Unix : uniquement les tickets ouverts à partir de ce moment.
opened_tonumber
facultatif
Horodatage Unix : uniquement les tickets ouverts jusqu'à ce moment.
closed_fromnumber
facultatif
Horodatage Unix : uniquement les tickets fermés à partir de ce moment.
closed_tonumber
facultatif
Horodatage Unix : uniquement les tickets fermés jusqu'à ce moment.
rating_minnumber
facultatif
Note minimale, 1-5.
rating_maxnumber
facultatif
Note maximale, 1-5.
limitnumber
facultatif
Résultats par page, 1-50 (25 par défaut).
offsetnumber
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.

Exemple de requête : ce qu'a dit un utilisateur, dans des tickets où un membre de l'équipe est aussi intervenu
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"
Exemple de requête : la même recherche en corps 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
Exemple de réponse
{
  "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 }
}