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 | προαιρετικό | Μετράει μόνο το περιεχόμενο που έγραψε αυτό το αναγνωριστικό χρήστη Discord. Χρησιμοποίησέ το μαζί με το q. |
| participants | string[] | προαιρετικό | Έως 5 χρήστες που έγραψαν στο αίτημα, ο καθένας ως αναγνωριστικό Discord ή ως μέρος ονόματος χρήστη. Χωρισμένοι με κόμμα στο GET, ως πίνακας στο POST. |
| participants_mode | string | προαιρετικό | Το all (προεπιλογή) ζητά να έχουν γράψει όλοι οι συμμετέχοντες που ορίζεις στο ίδιο αίτημα· το any βρίσκει τα αιτήματα όπου έγραψε τουλάχιστον ένας. |
| include_bots | boolean | προαιρετικό | Συμπεριλαμβάνει στα αποτελέσματα μηνύματα και συμμετέχοντες που είναι bot. Προεπιλογή false. |
| opened_by | string | προαιρετικό | Αυτός που άνοιξε το αίτημα, ως αναγνωριστικό Discord ή ως μέρος ονόματος χρήστη. |
| closed_by | string | προαιρετικό | Το αναγνωριστικό Discord αυτού που έκλεισε το αίτημα. |
| channel_id | string | προαιρετικό | Το αναγνωριστικό του καναλιού ή του νήματος 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 και συμπληρώνεται και στο παλιό σου αρχείο με την πρώτη αναβάθμιση. Το αντικείμενο 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 }
}