Κέντρο βοήθειας
Chat API

Management API

Τελευταία ενημέρωση:

Επισκόπηση του Management API

Το Management API προορίζεται για εργασίες διαχείρισης (back-office) που δεν περιλαμβάνουν την αποστολή μηνυμάτων συνομιλίας:

  • δημιουργία bot μέσω προγραμματισμού με POST /v1/management/bots
  • ανάγνωση συγκεκριμένου bot που σας ανήκει με GET /v1/management/bots/{bot_id}
  • ενημέρωση συγκεκριμένου bot με PATCH /v1/management/bots/{bot_id}
  • ανάγνωση χρήσης συνδρομής με GET /v1/usage

Τα κλειδιά Management συνδέονται με τον λογαριασμό σας και όχι με κάποιο συγκεκριμένο bot. Διατηρούνται σκόπιμα ξεχωριστά από τα κλειδιά Bot Talk, ώστε ένα παραβιασμένο κλειδί συνομιλίας να μην μπορεί να τροποποιήσει τα bot σας ή να διαβάσει τα δεδομένα χρέωσής σας.

Base URL

https://api.chatlab.com/aichat

Όλα τα endpoints σε αυτό το άρθρο είναι σχετικά με αυτό το base URL.

Ξεκινώντας

  1. Ανοίξτε την εφαρμογή διαχείρισης και μεταβείτε στο Account Settings > Management API (Ρυθμίσεις λογαριασμού > Management API).
  2. Κάντε κλικ στο Create Management Key (Δημιουργία κλειδιού Management), δώστε του ένα όνομα, προαιρετικά ορίστε IP whitelist και όριο ρυθμού (rate limit) και υποβάλετε τη φόρμα.
  3. Αντιγράψτε ολόκληρο το κλειδί από το παράθυρο επιτυχίας. Το κείμενο εμφανίζεται μόνο μία φορά.

Ένα κλειδί έχει τη μορφή mk_abcdefghijklmnopqrstuvwxyz012345. Το πρόθεμα mk_ το διακρίνει από τα κλειδιά Bot Talk (ck_).

Έλεγχος ταυτότητας (Authentication)

Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345

Η αποστολή ενός κλειδιού mk_ στο /v1/chat (ή σε οποιοδήποτε άλλο endpoint του Bot Talk) επιστρέφει 403 key_type_not_allowed. Η αποστολή ενός κλειδιού ck_ στο /v1/management/* επιστρέφει το ίδιο σφάλμα.

Όρια

  • Έως 5 ενεργά κλειδιά Management API ανά χρήστη
  • Έως 10 αιτήματα ανά λεπτό ανά κλειδί (token bucket, χωρητικότητα 10, ομαλή αναπλήρωση με ρυθμό ~1 token κάθε 6 δευτερόλεπτα). Δυνατότητα διαμόρφωσης προς τα κάτω κατά τη δημιουργία - ορίστε ένα χαμηλότερο rateLimitPerMinute και το ανώτατο όριο μειώνεται, ενώ ο ρυθμός αναπλήρωσης προσαρμόζεται ανάλογα.

Δικαιώματα (Permissions)

Κάθε κλειδί Management φέρει οποιοδήποτε υποσύνολο από τα τρία παρακάτω δικαιώματα. Τουλάχιστον ένα πρέπει να επιλεγεί κατά τη δημιουργία, διαφορετικά το αίτημα απορρίπτεται με 400 invalid_request_error. Η κλήση ενός endpoint με κλειδί που δεν διαθέτει το απαιτούμενο δικαίωμα επιστρέφει 403 insufficient_permissions.

  • bot_read - απαιτείται για το GET /v1/management/bots/{bot_id}
  • bot_management - απαιτείται για τα POST /v1/management/bots και PATCH /v1/management/bots/{bot_id}
  • usage - απαιτείται για το GET /v1/usage

Δομή σώματος αιτήματος: ένθετες ενότητες που αντιστοιχούν στις καρτέλες του περιβάλλοντος διαχείρισης

Τα POST και PATCH δέχονται ένα JSON σώμα ομαδοποιημένο σε 13 ενότητες. Κάθε ενότητα αντιστοιχεί σε μια υποκαρτέλα στην πλαϊνή γραμμή Bot Settings της εφαρμογής διαχείρισης, ώστε τα κλειδιά JSON και οι ορατές καρτέλες να ευθυγραμμίζονται: αν αλλάξετε το consent.humanSupportRequirePolicyAccept μέσω του API, θα δείτε τον αντίστοιχο διακόπτη να αλλάζει στην καρτέλα Consent & Privacy (Συγκατάθεση & Απόρρητο) στην εφαρμογή διαχείρισης.

  • role - persona του bot, ανεπεξέργαστο prompt, μήκος απάντησης, γλώσσα, περιβάλλον ιστότοπου / εταιρείας (καρτέλα Role & Behavior)
  • conversation - μήνυμα καλωσορίσματος, βελτιστοποίηση ερωτήματος, συνέχεια συνομιλίας, διακόπτης αξιολόγησης + επεξηγήσεις εργαλείων (tooltips), περιεχόμενο προτεινόμενων ερωτήσεων + δυναμικές συμπληρωματικές ερωτήσεις (καρτέλα Chat Conversation)
  • chatMemory - διακόπτης μνήμης συνομιλίας, prompt σύνοψης, κατανομή context (καρτέλα Summaries & Memory)
  • appearance - χρώματα, κείμενα, διαστάσεις, προσαρμοσμένο CSS, οθόνη καλωσορίσματος, στυλ προτεινόμενων ερωτήσεων, συμπεριφορά αυτόματου ανοίγματος, προσομοίωση πληκτρολόγησης ανθρώπου, markdown υποσέλιδου (καρτέλα Appearance)
  • humanSupport - φόρμα επικοινωνίας με εκπρόσωπο (καρτέλα Human Contact Form)
  • leadCollection - φόρμα συλλογής δυνητικών πελατών (καρτέλα Lead Collection)
  • liveChat - μεταβίβαση σε ζωντανή συνομιλία (καρτέλα Live Chat)
  • consent - και οι τέσσερις διακόπτες συγκατάθεσης πολιτικής απορρήτου καθώς και το κείμενο της οθόνης συγκατάθεσης (καρτέλα Consent & Privacy)
  • whiteLabel - απόκρυψη λογότυπου, προσαρμοσμένος σύνδεσμος λογότυπου, φιλοξενία σε προσαρμοσμένο τομέα (καρτέλα Whitelabel)
  • security - επιτρεπόμενοι τομείς, φίλτρο ανεπιθύμητων μηνυμάτων (spam), όρια ρυθμού συνομιλίας (καρτέλα Security)
  • voice - φωνητική εισαγωγή και φωνητικές συνομιλίες: μοντέλο, φωνή, γλώσσες, prompt, όριο διάρκειας (καρτέλα Voice Conversation)
  • multilingual - πολυγλωσσική λειτουργία, βασική γλώσσα, προσφερόμενες γλώσσες, διαχείριση γλώσσας γνωσιακής βάσης (καρτέλα Languages)
  • advanced - μοντέλο LLM, temperature, μέγεθος context, όριο μηνυμάτων bot, εσωτερικό locale, Offer Cards (καρτέλα Model & Advanced)

Μόνο το name βρίσκεται στο ανώτατο επίπεδο, επειδή προσδιορίζει το bot αντί να ανήκει σε κάποια συγκεκριμένη καρτέλα.

Η πλαϊνή γραμμή Bot Settings διαθέτει επί του παρόντος 15 υποκαρτέλες και οι 13 από αυτές αντιστοιχούν στις παραπάνω ενότητες. Οι δύο υποκαρτέλες χωρίς αντίστοιχη ενότητα είναι οι Flow και Actions - οι οποίες καλύπτονται παρακάτω στην ενότητα "Εκτός πεδίου εφαρμογής API". Οι 13 που αντιστοιχούν είναι οι Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation και Languages.

Το σώμα αιτήματος και το σώμα απόκρισης μοιράζονται την ίδια δομή. Η απόκριση προσθέτει δύο επιπλέον στοιχεία:

  • meta - μόνο για ανάγνωση: αναγνωριστικό bot και χρονοσημάνσεις. Αφαιρέστε το για να μετατρέψετε μια απόκριση GET σε έγκυρο σώμα POST.
  • apiKey - υπάρχει μόνο κατά τη δημιουργία - το νέο κλειδί Bot Talk API για το καινούργιο bot.

Δύο πεδία μέσα στην κοινή δομή είναι μόνο για ανάγνωση - επιστρέφονται στην απόκριση, αγνοούνται εάν προσπαθήσετε να τα στείλετε σε POST/PATCH:

  • appearance.avatarUrl - πλήρως προσδιορισμένο δημόσιο URL της εικόνας avatar του bot (π.χ. https://api.chatlab.com/aichat/content/avatar_xyz.png). Κάντε απευθείας GET για να κατεβάσετε τα bytes. Για να το αλλάξετε, ανεβάστε ένα νέο αρχείο μέσω του multipart μέρους avatar (βλ. PATCH).
  • whiteLabel.whitelabelLogoUrl - πλήρως προσδιορισμένο δημόσιο URL του λογότυπου κεφαλίδας white-label. Ίδια διαδικασία όπως με το avatarUrl. Για να το αλλάξετε, ανεβάστε ένα νέο αρχείο μέσω του multipart μέρους whitelabel_logo (βλ. PATCH).

Και τα δύο URL χρησιμοποιούν το σχήμα + host + διαδρομή περιβάλλοντος του τρέχοντος αιτήματος, επομένως σε έναν προσαρμοσμένο τομέα white-label επιστρέφονται με ρίζα αυτόν τον τομέα (π.χ. https://api.acme.com/aichat/content/...).

Στείλτε null για μια ενότητα για να την παραλείψετε στο PATCH. Στείλτε null για ένα πεδίο εντός μιας ενότητας για να παραλείψετε αυτό το μεμονωμένο πεδίο. Το null σε επίπεδο πεδίου δεν διαγράφει ποτέ μια αποθηκευμένη τιμή - σημαίνει απλώς "μην τροποποιείς".

Ρόλος και σύνταξη prompt

Το prompt συστήματος που λαμβάνει στην πραγματικότητα το LLM δημιουργείται με έναν από δύο τρόπους ανάλογα με το role.role. Γνωρίζοντας σε ποιον κλάδο βρίσκεστε, κατανοείτε ποια πεδία έχουν σημασία και ποια αποθηκεύονται αλλά αγνοούνται.

Κλάδος A - το role.role είναι CUSTOMER_SUPPORT, SALES ή LEAD_COLLECTION_AGENT (βάσει προτύπου)

Το backend συνθέτει το prompt από ένα ενσωματωμένο πρότυπο και αγνοεί εντελώς το role.rawPrompt (η τιμή εξακολουθεί να αποθηκεύεται στο bot, απλώς δεν χρησιμοποιείται). Το πρότυπο ενσωματώνει:

  • role.role - ετικέτα ρόλου (π.χ. "Customer Support") και οδηγίες ειδικές για τον ρόλο που προσαρτώνται αυτόματα
  • name - όνομα bot, το οποίο εισάγεται στην εισαγωγική πρόταση
  • role.language - το "Auto Detect" ρυθμίζει το bot να ακολουθεί τη γλώσσα του χρήστη. Οποιαδήποτε άλλη τιμή (π.χ. "English", "Polish") μετατρέπεται σε "Output in {language}, unless user uses another language"
  • role.responseLength - αντιστοιχίζεται σε έναν επιθυμητό αριθμό λέξεων: Concise ≈ 50 λέξεις, Normal ≈ 100, Detailed ≈ 200
  • role.websiteAddress - προαιρετικό. Όταν δεν είναι κενό, προσαρτάται ως "for the users of the website {url}"
  • role.companyDescription - προαιρετικό. Όταν δεν είναι κενό, προστίθεται ως επιπλέον παράγραφος πριν από τις οδηγίες ρόλου

Αυτός είναι ο συνιστώμενος κλάδος για τα περισσότερα bot - αποκτάτε συμπεριφορά προσαρμοσμένη στον ρόλο και προστατευτικές δικλείδες ασφαλείας αυτόματα.

Κλάδος B - το role.role είναι CUSTOM (prompt που παρέχεται από τον χρήστη)

Το backend χρησιμοποιεί το role.rawPrompt κατά λέξη ως ολόκληρο το prompt συστήματος. Τα πεδία responseLength, language, websiteAddress, companyDescription αποθηκεύονται αλλά δεν εισάγονται στο prompt - αν θέλετε κάποιο από αυτά να αντικατοπτρίζεται στη συμπεριφορά του bot, πρέπει να το συμπεριλάβετε εσείς οι ίδιοι στο κείμενο του rawPrompt. Οι ειδικές οδηγίες ρόλου, ασφάλειας και ύφους επίσης δεν προστίθενται. Είστε υπεύθυνοι για ολόκληρο το prompt.

Χρησιμοποιήστε το CUSTOM μόνο όταν το prompt που βασίζεται σε πρότυπο δεν ταιριάζει στην περίπτωσή σας (π.χ. χρειάζεστε μια πολύ εξειδικευμένη persona για τον τομέα σας, δικούς σας περιορισμούς ασφαλείας, μια μη τυπική μορφή εξόδου).

Πεδία τύπου Enum / κλειστού συνόλου τιμών

Αρκετά πεδία δέχονται μόνο ένα σταθερό σύνολο τιμών συμβολοσειράς (string). Η αποστολή οτιδήποτε εκτός της λίστας απορρίπτεται με 400 validation_failed και τη διαδρομή του πεδίου στο error.param. Οι τιμές διακρίνουν πεζά από κεφαλαία (case-sensitive).

  • role.role - CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.language - πλήρες όνομα της γλώσσας στα αγγλικά από το αναπτυσσόμενο μενού διαχείρισης, π.χ. Auto Detect, English, Polish, Spanish, German, French, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Arabic, Hindi, και περίπου 80 άλλες. Η τιμή αποθηκεύεται αυτολεξεί και αντικαθίσταται στο πρότυπο prompt, επομένως οι διγράμματοι κωδικοί ISO (en, pl) και άλλες τιμές εκτός λίστας δεν απορρίπτονται από το API, αλλά παράγουν μια παραμορφωμένη οδηγία όπως "Output in en, unless...". Η προεπιλογή είναι Auto Detect όταν παραλείπεται κατά τη δημιουργία.
  • advanced.model - δείτε την ενότητα "Μοντέλα κειμένου AI" παρακάτω. Το διαθέσιμο σύνολο υπόκειται στα όρια του λογαριασμού σας και οποιαδήποτε τιμή δεν μπορεί να χρησιμοποιήσει ο λογαριασμός σας επιστρέφει 400 invalid_parameter
  • advanced.chatContextSize - 8000, 16000, 32000. Υπόκειται στα όρια του λογαριασμού σας. Οι υψηλότερες τιμές περικόπτονται σιωπηρά στο μέγιστο επιτρεπτό όριο
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - διακόπτης boolean. Το true υποχρεώνει τον χρήστη να συμπληρώσει τη φόρμα lead πριν ξεκινήσει μια συνομιλία. Το false επιτρέπει στο AI να αποφασίσει πότε θα εμφανίσει τη φόρμα (προεπιλογή).

Δομημένα πεδία και εύρη τιμών

Πεδία που μοιάζουν με απλές συμβολοσειρές ή αριθμούς, αλλά στην πραγματικότητα έχουν συγκεκριμένες δομές, εύρη τιμών ή ιδιαιτερότητες στο περιβάλλον διαχείρισης που αξίζει να γνωρίζετε.

  • advanced.temperature - το αποδεκτό εύρος είναι από 0.0 έως 1.0, που αντιστοιχεί στο ρυθμιστικό της διεπαφής διαχείρισης. Τιμές εκτός αυτού του εύρους απορρίπτονται με 400 validation_failed.

  • chatMemory.summariesToKnowledgeRatio - ακέραιο ποσοστό, 10-90 με βήμα 10. Ελέγχει πόσο μέρος του context συνομιλίας δεσμεύεται για ιστορικές συνόψεις πελάτη έναντι των υπολοίπων (γνωσιακή βάση, τρέχουσα συνομιλία, οδηγίες). Προεπιλογή 50. Τιμές εκτός του 10-90 απορρίπτονται με 400 validation_failed. Ισχύει μόνο όταν chatMemory.enabled=true ΚΑΙ chatMemory.summaryConversationsEnabled=true.

  • liveChat.schedule - JSON κωδικοποιημένο ως συμβολοσειρά (string), όχι ένθετο αντικείμενο JSON κατά τη μετάδοση. Ο διακομιστής αποθηκεύει την ανεπεξέργαστη συμβολοσειρά αυτούσια. Η διεπαφή διαχείρισης την αναλύει στην πλευρά του πελάτη κατά την εμφάνιση του προγράμματος επεξεργασίας ωραρίου. Μετά την ανάλυση, η συμβολοσειρά διαμορφώνεται ως μία καταχώριση ανά ημέρα της εβδομάδας συν ένα κλειδί timezone:

    • κάθε κλειδί ημέρας (monday-sunday) αντιστοιχεί σε {enabled: boolean, from: "H:MM", to: "H:MM"} σε 24ωρη μορφή
    • το timezone είναι ένα όνομα ζώνης IANA (π.χ. "Europe/Warsaw", "America/New_York")

    Παράδειγμα τιμής (προσέξτε τα εξωτερικά εισαγωγικά και τα διαφυγόντα εσωτερικά εισαγωγικά - πρόκειται για ένα ενιαίο πεδίο συμβολοσειράς, όχι για ένθετο αντικείμενο):

    "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}"
    

    Εκτός των αναγραφόμενων ωρών, το liveChat.outOfHoursMessage εμφανίζεται στον επισκέπτη και η μεταβίβαση σε ζωντανή συνομιλία αναστέλλεται. Η επικύρωση της εσωτερικής δομής εκτελείται μόνο στην πλευρά του πελάτη στη διεπαφή διαχείρισης - τυχόν κακοσχηματισμένο JSON ή μη αναγνωρισμένα κλειδιά γίνονται δεκτά από το API ως απλή συμβολοσειρά και θα εμφανιστούν ως σφάλμα απόδοσης όταν κάποιος ανοίξει αργότερα το bot στη διαχείριση. Επικυρώστε τη δομή από την πλευρά σας πριν από την αποστολή.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - σύντομες ετικέτες που εμφανίζονται στα κουμπιά 👍 / 👎 δίπλα σε κάθε απάντηση AI όταν conversation.conversationRatingEnabled=true. Το προεπιλεγμένο κείμενο είναι "I like the response" / "I don't like the response". Ορατό στους τελικούς χρήστες.

  • whiteLabel.hideRoboAssistLogo - δυνατότητα white-label, υπόκειται στα όρια του λογαριασμού σας. Αποκρύπτει τη γραμμή υποσέλιδου "Powered by ChatLab". Εάν ο λογαριασμός σας δεν περιλαμβάνει δυνατότητα white-label, η τιμή αποθηκεύεται αλλά αγνοείται και το υποσέλιδο εμφανίζεται πάντα.

  • whiteLabel.whitelabelLogoLink - δυνατότητα white-label, υπόκειται στα όρια του λογαριασμού σας. URL προορισμού κλικ για το προσαρμοσμένο λογότυπο όταν hideRoboAssistLogo=true και έχει μεταφορτωθεί ένα προσαρμοσμένο αρχείο λογότυπου μέσω του multipart μέρους whitelabel_logo.

  • appearance.simulateHumanTypingDelay - δευτερόλεπτα (όχι χιλιοστά του δευτερολέπτου), ακέραιος αριθμός 0-200. Παύση μεταξύ διαδοχικών μηνυμάτων του bot όταν simulateHumanTyping=true. Προεπιλογή 5.

  • appearance.autoOpenChatDelaySeconds - δευτερόλεπτα, ακέραιος αριθμός. Καθυστέρηση πριν το widget ανοίξει αυτόματα όταν autoOpenChat=true και autoOpenChatDelay=true.

  • advanced.internalLocale - κωδικός τοπικής ρύθμισης-περιοχής IETF σε μορφή ll_CC (με κάτω παύλα, ΟΧΙ ll-CC με ενωτικό). Οι αποδεκτές τιμές προέρχονται από μια σταθερή λίστα περίπου 95 τοπικών ρυθμίσεων: en_US, pl_PL, de_DE, fr_FR, es_ES, it_IT, pt_PT, nl_NL, ru_RU, zh_CN, zh_TW, ja_JP, ko_KR, ar_SA, hi_IN, tr_TR, cs_CZ, da_DK, fi_FI, sv_SE, no_NO, el_GR, he_IL, και πολλές άλλες. Η αποστολή μόνο ενός διγράμματου κωδικού ("en") ή BCP-47 ("en-US") δεν περιλαμβάνεται στην επιτρεπόμενη λίστα. Προεπιλογή en_US. Αυτό είναι το locale που χρησιμοποιείται για τη μορφοποίηση ημερομηνιών/αριθμών στα στοιχεία πλαισίου του widget, σε αντίθεση με το role.language (τη γλώσσα παραγωγής συνομιλίας του bot).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - ακέραιοι αριθμοί (αποστολή ως αριθμοί JSON, π.χ. 30, όχι "30"). Το 0 απενεργοποιεί το όριο ρυθμού ανά IP. Όταν είναι διάφορο του μηδενός, το widget επιβάλλει N μηνύματα ανά διάρκεια σε δευτερόλεπτα προτού εμφανίσει το security.talkMessagesRateLimitHitMessage στον επισκέπτη.

  • advanced.botMessagesLimit - ακέραιος αριθμός (αριθμός JSON, π.χ. 1000). Το 0 σημαίνει "χωρίς όριο", διαφορετικά πρέπει να είναι πολλαπλάσιο του 1000 (1000, 2000, 10000, ...). Τιμές όπως 100 ή 1500 απορρίπτονται με 400 validation_failed. Στη συνέχεια, περιορίζεται σιωπηρά στο ανώτατο όριο του λογαριασμού σας.

Μοντέλα κειμένου AI (advanced.model)

Στείλτε την ακριβή τιμή του API (αριστερή στήλη εντός κωδικού). Το όνομα εμφάνισης στη διεπαφή διαχείρισης βρίσκεται σε παρένθεση. Τα όρια του λογαριασμού σας καθορίζουν ποιο υποσύνολο είναι επιλέξιμο. Η αποστολή ενός μοντέλου που ο λογαριασμός σας δεν μπορεί να χρησιμοποιήσει επιστρέφει 400 invalid_parameter. Η προεπιλογή για νέα bot είναι 5-MINI.

  • 4-O-MINI (GPT 4-o mini)
  • 4-O (GPT 4-o)
  • 4.1-MINI (GPT 4.1-mini)
  • 4.1 (GPT 4.1)
  • 5-MINI (GPT 5-mini)
  • 5 (GPT 5)
  • 5.1 (GPT 5.1)
  • 5.4-MINI (GPT 5.4-mini)
  • 5.4 (GPT 5.4)
  • 5.5 (GPT 5.5)
  • GEMINI 2.5 PRO (Gemini 2.5 Pro)
  • GEMINI 3 Flash (Gemini 3 Flash)
  • GEMINI 3.5 Flash (Gemini 3.5 Flash)
  • GEMINI 3.7 Flash (Gemini 3.7 Flash)
  • GEMINI 3.8 Flash (Gemini 3.8 Flash)
  • GEMINI 3.1 Flash-Lite (Gemini 3.1 Flash-Lite)
  • GEMINI 3 PRO (Gemini 3 Pro)

Αναφορά πεδίων (πλήρες σχήμα αιτήματος)

Κάθε πεδίο στο wire, με τον τύπο του, τον περιορισμό του και μια μονολεκτική ή σύντομη περιγραφή. Σημασιολογία PATCH: οποιοδήποτε πεδίο παραληφθεί (ή σταλεί ως null) αφήνει την αποθηκευμένη τιμή ανέπαφη. Η ίδια μορφή χρησιμοποιείται και για την απόκριση (μείον το δυαδικό περιεχόμενο multipart, συν το μπλοκ μόνο για ανάγνωση meta σε κάθε απόκριση και το apiKey μόνο στην απόκριση δημιουργίας).

Ανώτατο επίπεδο

Πεδίο Τύπος Περιορισμός Περιγραφή
name string μέγιστο 150, απαιτείται κατά τη δημιουργία Όνομα εμφάνισης του bot
role object Δείτε § role
conversation object Δείτε § conversation
chatMemory object Δείτε § chatMemory
appearance object Δείτε § appearance
humanSupport object Δείτε § humanSupport
leadCollection object Δείτε § leadCollection
liveChat object Δείτε § liveChat
consent object Δείτε § consent
whiteLabel object Δείτε § whiteLabel
security object Δείτε § security
advanced object Δείτε § advanced

Προσθήκες μόνο στην απόκριση:

  • meta: { id, createdAt, updatedAt } - μόνο για ανάγνωση.
  • apiKey - string, υπάρχει μόνο στην απόκριση του POST /v1/management/bots - το νέο κλειδί Bot Talk για το νέο bot, το οποίο επιστρέφεται ακριβώς μία φορά.

§ role

Πεδίο Τύπος Περιορισμός Περιγραφή
role string (enum) CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM Προκαθορισμένη περσόνα - επιλέγει το πρότυπο prompt (δείτε "Ρόλος και κατασκευή prompt")
language string πλήρες αγγλικό όνομα γλώσσας (English, Polish, ...) ή Auto Detect Κύρια γλώσσα που τροφοδοτείται στο πρότυπο prompt
responseLength string ∈ {Concise, Normal, Detailed} Επιθυμητή λεπτομέρεια απαντήσεων του AI
websiteAddress string Ιστότοπος που χρησιμοποιείται για το πλαίσιο (context) του prompt
companyDescription string Περιγραφή της εταιρείας που χρησιμοποιείται για το πλαίσιο του prompt
rawPrompt string Προσαρμοσμένο system prompt - χρησιμοποιείται αυτολεξεί μόνο όταν role=CUSTOM

§ conversation

Πεδίο Τύπος Περιορισμός Περιγραφή
welcomeMessage string Πρώτο μήνυμα που εμφανίζεται στον επισκέπτη κατά το άνοιγμα
queryRefinementEnabled boolean Εάν είναι true, βελτιώνει την ερώτηση του επισκέπτη πριν από την ανάκτηση RAG
conversationContinuityEnabled boolean Εάν είναι true, οι επαναλαμβανόμενοι επισκέπτες συνεχίζουν την τελευταία τους συνομιλία
conversationRatingEnabled boolean Εάν είναι true, εμφανίζει αξιολόγηση με θετική/αρνητική ψήφο (thumbs up/down) στα μηνύματα του bot
positiveRatingTooltip string Επεξήγηση εργαλείου (tooltip) στο κουμπί θετικής αξιολόγησης
negativeRatingTooltip string Επεξήγηση εργαλείου στο κουμπί αρνητικής αξιολόγησης
suggestedQuestions string Προτεινόμενες ερωτήσεις διαχωρισμένες με νέα γραμμή / ενάρξεις συνομιλίας
dynamicSuggestedFollowups boolean Εάν είναι true, το AI προτείνει συμπληρωματικές ερωτήσεις μετά από κάθε απάντηση
dynamicFollowupsAutoIcons boolean Εάν είναι true, το AI επιλέγει αυτόματα εικονίδια emoji για τις δυναμικές συμπληρωματικές προτάσεις

§ chatMemory

Πεδίο Τύπος Περιορισμός Περιγραφή
enabled boolean Γενικός διακόπτης για τη λειτουργία μνήμης συνομιλίας
summaryConversationsEnabled boolean Διατήρηση περιλήψεων ανά συνομιλία
conversationSummaryPrompt string Προσαρμοσμένο prompt που χρησιμοποιείται για τη σύνοψη κάθε συνομιλίας
conversationSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Καθορίζει αν θα χρησιμοποιηθεί το προεπιλεγμένο ή το προσαρμοσμένο prompt σύνοψης
clientSummaryPrompt string Προσαρμοσμένο prompt που χρησιμοποιείται για τη σύνοψη του πελάτη σε όλες τις συνομιλίες
clientSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Προεπιλεγμένο έναντι προσαρμοσμένου prompt προφίλ πελάτη
summariesToKnowledgeRatio int 10-90, βήμα 10 % του παραθύρου πλαισίου (context window) της συνομιλίας που διατίθεται για περιλήψεις έναντι των γνώσεων RAG

§ appearance

Πεδίο Τύπος Περιορισμός Περιγραφή
launcherColor string (hex) Χρώμα φόντου του launcher (εικονίδιο συνομιλίας)
headerColor string (hex) Χρώμα φόντου κεφαλίδας της συνομιλίας
titleColor string (hex) Χρώμα τίτλου κεφαλίδας της συνομιλίας
subtitleColor string (hex) Χρώμα υπότιτλου κεφαλίδας της συνομιλίας
clientMessageBubbleColor string (hex) Χρώμα συννεφάκου μηνύματος επισκέπτη
clientMessageTextColor string (hex) Χρώμα κειμένου μηνύματος επισκέπτη
responseMessageBubbleColor string (hex) Χρώμα συννεφάκου απάντησης του bot
responseMessageTextColor string (hex) Χρώμα κειμένου απάντησης του bot
chatSubheader string Σύντομο κείμενο (tagline) που εμφανίζεται κάτω από τον τίτλο της συνομιλίας
senderPlaceholder string Κείμενο placeholder στο πεδίο εισαγωγής μηνύματος
resetConversationTooltip string Επεξήγηση εργαλείου στο κουμπί "επαναφορά συνομιλίας"
chatAlignment string (enum) ∈ {left, right} Σε ποια πλευρά της οθόνης αγκιστρώνεται η συνομιλία
launcherBottomMargin int 0-500 Απόσταση του launcher από το κάτω άκρο (px)
launcherSideMargin int 0-500 Απόσταση του launcher από το πλευρικό άκρο (px)
displayShadow boolean Σκιά (drop-shadow) κάτω από το widget
customCss string Ακατέργαστο CSS που εισάγεται στο iframe του widget
chatMessageLinkTarget string (enum) ∈ {_blank, _self} Πώς ανοίγουν οι σύνδεσμοι μέσα στα μηνύματα του bot
minimizedDisplayMode string (enum) ∈ {icon, minified} Κατάσταση ελαχιστοποίησης: εικονίδιο launcher ή συμπαγής γραμμή αποστολέα
chatDesktopWidthPx int Πλάτος του widget σε υπολογιστή
chatDesktopHeightPx int Ύψος του widget σε υπολογιστή
chatMobileSizePercent int Μέγεθος του widget σε κινητά ως % του viewport
messageFontSize int Μέγεθος γραμματοσειράς κειμένου μηνύματος (px)
showChatbotBubblesDesktop boolean Εμφάνιση αιωρούμενων συννεφάκων προεπισκόπησης σε υπολογιστή
showChatbotBubblesMobile boolean Εμφάνιση αιωρούμενων συννεφάκων προεπισκόπησης σε κινητά
chatbotBubblesDelaySeconds int Καθυστέρηση πριν εμφανιστούν τα συννεφάκια προεπισκόπησης (δευτερόλεπτα)
launcherIconFullSize boolean Απόδοση του προσαρμοσμένου εικονιδίου launcher από άκρη σε άκρη αντί με εσοχή
welcomeScreenEnabled boolean Εμφάνιση της Οθόνης Καλωσορίσματος αντί για απευθείας μετάβαση στη συνομιλία
welcomeScreenQuestionsLabel string Ετικέτα πάνω από τις προτεινόμενες ερωτήσεις στην οθόνη καλωσορίσματος
welcomeScreenHideHumanContactForm boolean Απόκρυψη της ενέργειας φόρμας επικοινωνίας με εκπρόσωπο στην κεφαλίδα κατά την εμφάνιση της Οθόνης Καλωσορίσματος. Επανεμφανίζεται μετά το πρώτο μήνυμα του επισκέπτη. Τα bot που δημιουργήθηκαν πριν από τις 02-09-2026 έχουν από προεπιλογή την τιμή true
welcomeScreenHideLiveChat boolean Απόκρυψη της ενέργειας Live Chat στην κεφαλίδα κατά την εμφάνιση της Οθόνης Καλωσορίσματος. Επανεμφανίζεται μετά το πρώτο μήνυμα του επισκέπτη. Τα bot που δημιουργήθηκαν πριν από τις 02-09-2026 έχουν από προεπιλογή την τιμή true
headerActionsLayout string DROPDOWN Πώς προσφέρονται το Live Chat και η φόρμα επικοινωνίας με εκπρόσωπο στην κεφαλίδα της συνομιλίας: ICONS (ξεχωριστό εικονίδιο για το καθένα) ή DROPDOWN (ομαδοποιημένα στο μενού κεφαλίδας). Τα bot που δημιουργήθηκαν πριν από τις 02-09-2026 έχουν από προεπιλογή την τιμή ICONS
stackSuggestedQuestions boolean Κατακόρυφη στοίβαξη των προτεινόμενων ερωτήσεων (αντί για δίπλα-δίπλα)
suggestedQuestionsFontSize int Μέγεθος γραμματοσειράς των κουμπιών προτεινόμενων ερωτήσεων (px)
suggestedQuestionsTextColor string (hex) Χρώμα κειμένου των κουμπιών προτεινόμενων ερωτήσεων
suggestedQuestionsBackgroundColor string (hex) Χρώμα φόντου των κουμπιών προτεινόμενων ερωτήσεων
autoOpenChat boolean Αυτόματο άνοιγμα της συνομιλίας σε υπολογιστή
autoOpenChatOnMobiles boolean Αυτόματο άνοιγμα της συνομιλίας σε κινητά
autoOpenChatDelay boolean Χρήση καθυστέρησης πριν από το αυτόματο άνοιγμα
autoOpenChatDelaySeconds int Καθυστέρηση αυτόματου ανοίγματος (δευτερόλεπτα)
simulateHumanTyping boolean Διαχωρισμός της απάντησης του bot σε συννεφάκια με εφέ πληκτρολόγησης
simulateHumanTypingDelay int 0-200 Καθυστέρηση μεταξύ των διαδοχικών μηνυμάτων (δευτερόλεπτα)
footerMarkdown string μέγιστο 255 Προσαρμοσμένο markdown υποσέλιδου που εμφανίζεται κάτω από τη συνομιλία
avatarUrl string μόνο για ανάγνωση Πλήρες δημόσιο URL του avatar. Για να το αλλάξετε, ανεβάστε το μέσω του τμήματος αρχείου avatar στο multipart

Multipart σε POST/PATCH: avatar (τμήμα αρχείου). Τα σώματα GET / απόκρισης παραλείπουν το περιεχόμενο του αρχείου - μόνο το URL μεταδίδεται.

§ humanSupport

Πεδίο Τύπος Περιορισμός Περιγραφή
enabled boolean Διακόπτης ροής υποστήριξης από εκπρόσωπο
email string απαιτείται (αυστηρός έλεγχος δημιουργίας) όταν enabled=true Διεύθυνση που λαμβάνει τα email υποστήριξης από εκπρόσωπο
dialogMessage string Μήνυμα παρότρυνσης που εμφανίζεται πάνω από τη φόρμα
thankYouMessage string Επιβεβαίωση που εμφανίζεται μετά την υποβολή
emailMessageSubjectTemplate string Πρότυπο θέματος για το email που αποστέλλεται στον εκπρόσωπο
emailMessageContentTemplate string Πρότυπο κύριου μέρους για το email που αποστέλλεται στον εκπρόσωπο
emailPlaceholder string Placeholder στο πεδίο εισαγωγής email
messagePlaceholder string Placeholder στην περιοχή κειμένου μηνύματος
emailWithConversationContent boolean Εάν είναι true, περιλαμβάνει το αντίγραφο της συνομιλίας στο σώμα του email
customFormId long αναγνωριστικό (id) υπάρχουσας προσαρμοσμένης φόρμας Αντικατάσταση της ενσωματωμένης φόρμας επικοινωνίας με προσαρμοσμένη φόρμα. Η τιμή null διατηρεί την ενσωματωμένη φόρμα
customFormMapping string συμβολοσειρά κωδικοποιημένη σε JSON Αντιστοιχίζει τα πεδία της προσαρμοσμένης φόρμας στα πεδία email της υποστήριξης από εκπρόσωπο

Το requirePolicyAccept βρίσκεται στο consent.humanSupportRequirePolicyAccept, όχι εδώ.

§ leadCollection

Πεδίο Τύπος Περιορισμός Περιγραφή
enabled boolean Διακόπτης φόρμας δυνητικών πελατών (lead form)
nameEnabled boolean Συλλογή ονόματος
nameLabel string Ετικέτα στο πεδίο εισαγωγής ονόματος
emailEnabled boolean Συλλογή email
emailLabel string απαιτείται (αυστηρός έλεγχος δημιουργίας) όταν enabled=true ΚΑΙ emailEnabled=true Ετικέτα στο πεδίο εισαγωγής email
phoneEnabled boolean Συλλογή τηλεφώνου
phoneLabel string απαιτείται (αυστηρός έλεγχος δημιουργίας) όταν enabled=true ΚΑΙ phoneEnabled=true Ετικέτα στο πεδίο εισαγωγής τηλεφώνου
leaveDetailsMessage string απαιτείται (αυστηρός έλεγχος δημιουργίας) όταν enabled=true Μήνυμα που ενθαρρύνει τον επισκέπτη να αφήσει τα στοιχεία του
thankYouMessage string απαιτείται (αυστηρός έλεγχος δημιουργίας) όταν enabled=true Επιβεβαίωση που εμφανίζεται μετά την υποβολή
requireBeforeNewConversation boolean Εάν είναι true, η φόρμα πρέπει να υποβληθεί πριν ξεκινήσει η συνομιλία. Εάν είναι false, το AI αποφασίζει πότε θα εμφανίσει τη φόρμα
emailNotificationEnabled boolean Αποστολή email στον κάτοχο κάθε φορά που συλλέγεται ένα lead
emailNotificationAddress string Παραλήπτης ειδοποίησης (από προεπιλογή το email του λογαριασμού)
emailWithConversationContent boolean Εάν είναι true, περιλαμβάνει το αντίγραφο της συνομιλίας στην ειδοποίηση

Κανόνας αυστηρού ελέγχου δημιουργίας μεταξύ πεδίων: το enabled=true απαιτεί τουλάχιστον ένα από τα emailEnabled ή phoneEnabled. Το requirePolicyAccept βρίσκεται στο consent.leadCollectionRequirePolicyAccept, όχι εδώ.

| customFormId | long | αναγνωριστικό υπάρχουσας προσαρμοσμένης φόρμας | Αντικατάσταση της ενσωματωμένης φόρμας υποψηφίων πελατών με προσαρμοσμένη φόρμα. Η τιμή null διατηρεί την ενσωματωμένη φόρμα | | customFormMapping | string | συμβολοσειρά κωδικοποιημένη σε JSON | Αντιστοιχίζει τα πεδία της προσαρμοσμένης φόρμας σε όνομα / email / τηλέφωνο |

§ liveChat

Πεδίο Τύπος Περιορισμός Περιγραφή
enabled boolean Διακόπτης λειτουργίας Live Chat
infoMessage string Επεξηγηματικό μήνυμα πριν από την παράδοση σε εκπρόσωπο
startMessage string Μήνυμα που εμφανίζεται κατά την έναρξη της ζωντανής συνεδρίας
endMessage string Μήνυμα που εμφανίζεται κατά τη λήξη της ζωντανής συνεδρίας
nameLabel string Ετικέτα στο πεδίο εισαγωγής ονόματος στην προκαταρκτική φόρμα του live chat
emailLabel string Ετικέτα στο πεδίο εισαγωγής email στην προκαταρκτική φόρμα του live chat
schedule string συμβολοσειρά κωδικοποιημένη σε JSON (διακόπτες ημερών + from/to + timezone) Πρόγραμμα λειτουργίας live chat - δείτε "Δομημένα πεδία και εύρη" για την ακριβή μορφή
outOfHoursMessage string Μήνυμα που εμφανίζεται όταν το πρόγραμμα δείχνει ότι είστε εκτός ωραρίου
closeModalMessage string Τίτλος του παραθύρου διαλόγου "κλείσιμο live chat;"
closeModalConfirmLabel string Ετικέτα κουμπιού επιβεβαίωσης στο παράθυρο κλεισίματος
closeModalCancelLabel string Ετικέτα κουμπιού ακύρωσης στο παράθυρο κλεισίματος
closeModalTooltipText string Επεξήγηση εργαλείου στο στοιχείο τερματισμού συνομιλίας
operatorHasJoinedLabel string Ετικέτα που εμφανίζεται όταν συνδέεται ένας εκπρόσωπος
operatorDidNotJoinInTimeLabel string Ετικέτα που εμφανίζεται όταν κανένας εκπρόσωπος δεν συνδέεται εντός του χρονικού ορίου
waitingForOperatorToJoinLabel string Ετικέτα που εμφανίζεται κατά την αναμονή για σύνδεση εκπροσώπου
waitingForOperatorSeconds int Χρονικό όριο αναμονής ανάληψης από εκπρόσωπο (δευτερόλεπτα)
redirectToHumanSupportForm boolean Εάν είναι true, γίνεται ανακατεύθυνση στη φόρμα υποστήριξης από εκπρόσωπο όταν δεν απαντήσει κανένας εκπρόσωπος
missedEmailEnabled boolean προεπιλογή true Αποστολή email στον κάτοχο του bot όταν ένα αίτημα live chat έμεινε αναπάντητο. Σε παλαιότερα bots παραμένει μη ορισμένο, κάτι που ερμηνεύεται ως ενεργοποιημένο

Το requirePolicyAccept βρίσκεται στο consent.liveChatRequirePolicyAccept, όχι εδώ.

§ consent

Πεδίο Τύπος Περιορισμός Περιγραφή
newConversationRequirePolicyAccept boolean Απαίτηση αποδοχής της πολιτικής απορρήτου πριν από την έναρξη νέας συνομιλίας
humanSupportRequirePolicyAccept boolean Απαίτηση αποδοχής της πολιτικής απορρήτου πριν από την υποβολή της φόρμας υποστήριξης από εκπρόσωπο
leadCollectionRequirePolicyAccept boolean Απαίτηση αποδοχής της πολιτικής απορρήτου πριν από την υποβολή της φόρμας συλλογής lead
liveChatRequirePolicyAccept boolean Απαίτηση αποδοχής της πολιτικής απορρήτου πριν από την έναρξη συνεδρίας live chat
newConversationConsentDescription string Εισαγωγικό κείμενο για την οθόνη συγκατάθεσης στην έναρξη της συνομιλίας
privacyPolicyConsentCheckboxLabel string Ετικέτα δίπλα στο πλαίσιο επιλογής συγκατάθεσης (συνήθως περιέχει σύνδεσμο προς την πολιτική απορρήτου)

§ whiteLabel

Πεδίο Τύπος Περιορισμός Περιγραφή
hideRoboAssistLogo boolean δυνατότητα White Label, υπόκειται στα όρια του λογαριασμού Απόκρυψη του προεπιλεγμένου λογότυπου ChatLab στο υποσέλιδο
whitelabelLogoLink string δυνατότητα White Label, υπόκειται στα όρια του λογαριασμού URL στο οποίο οδηγεί το προσαρμοσμένο λογότυπο του υποσέλιδου
assignToCustomDomain boolean ελέγχεται από τη λειτουργία CUSTOM_DOMAIN Φιλοξενία της συνομιλίας στον διαμορφωμένο προσαρμοσμένο τομέα (custom domain)
whitelabelLogoUrl string μόνο για ανάγνωση Πλήρες δημόσιο URL του λογότυπου white-label. Για να το αλλάξετε, ανεβάστε το μέσω του τμήματος αρχείου whitelabel_logo στο multipart

Multipart σε POST/PATCH: whitelabel_logo (τμήμα αρχείου). Τα σώματα GET / απόκρισης παραλείπουν το περιεχόμενο του αρχείου - μόνο το URL μεταδίδεται.

§ security

Πεδίο Τύπος Περιορισμός Περιγραφή
allowedDomains string Λίστα διαχωρισμένη με κόμματα τομέων στους οποίους επιτρέπεται η ενσωμάτωση του widget (κενό = καμία λίστα επιτρεπόμενων)
spamFilterEnabled boolean Ενεργοποίηση του φίλτρου ανεπιθύμητων μηνυμάτων (spam) ανά bot για τα εισερχόμενα μηνύματα
countryFilterMode string BLACKLIST ή WHITELIST Ο τρόπος ερμηνείας των λιστών χωρών. Οι ίδιες οι λίστες παραμένουν προσβάσιμες μόνο από διαχειριστές
talkMessagesRateLimit int >= 0, το 0 απενεργοποιεί Μέγιστος αριθμός μηνυμάτων χρήστη που επιτρέπονται στο παράθυρο ορίου ρυθμού
talkMessagesRateLimitDurationSeconds int >= 0 Διάρκεια παραθύρου ορίου ρυθμού (δευτερόλεπτα)
talkMessagesRateLimitHitMessage string Μήνυμα που εμφανίζεται στον επισκέπτη όταν συμπληρωθεί το όριο ρυθμού

§ voice

Πεδίο Τύπος Περιορισμός Περιγραφή
inputEnabled boolean Δυνατότητα υπαγόρευσης μηνυμάτων από τον επισκέπτη (ομιλία σε κείμενο)
conversationEnabled boolean απαιτεί τη λειτουργία φωνής στο πρόγραμμα Ενεργοποίηση πλήρων φωνητικών συνομιλιών
voiceId string αναγνωριστικό φωνής ειδικό για τον πάροχο (π.χ. alloy) Ποια συνθετική φωνή ομιλεί
model string π.χ. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* Φωνητικό μοντέλο. Χρεώνεται ανά λεπτό, οι τιμές διαφέρουν ανά μοντέλο
turnDetection string ειδικό για τον πάροχο Λειτουργία εναλλαγής ομιλητή
audioPrompt string Πρόσθετο system prompt που χρησιμοποιείται μόνο για φωνητικές αποκρίσεις
welcomeMessage string Εκφωνούμενη αρχική ατάκα
language string κωδικός γλώσσας Κύρια γλώσσα φωνής
additionalLanguages string κωδικοί γλωσσών διαχωρισμένοι με κόμμα Πρόσθετες γλώσσες που δέχεται ο φωνητικός πράκτορας
maxDurationSeconds int Αυστηρό ανώτατο όριο διάρκειας για μία μεμονωμένη φωνητική συνομιλία
maxDurationMessage string Μήνυμα που εμφανίζεται κατά την επίτευξη του ανώτατου ορίου

§ multilingual

Πεδίο Τύπος Περιορισμός Περιγραφή
enabled boolean Διακόπτης πολύγλωσσης λειτουργίας
mode string AUTODETECT ή λειτουργία σταθερής λίστας Πώς επιλέγει το bot τη γλώσσα απάντησης
baseLanguage string κωδικός γλώσσας Γλώσσα στην οποία έχουν συνταχθεί τα κείμενα του ίδιου του bot
languages string κωδικοί γλωσσών διαχωρισμένοι με κόμμα Γλώσσες που προσφέρονται στον επισκέπτη
knowledgeLanguageMode string Πώς αντιμετωπίζονται οι γνώσεις σε άλλες γλώσσες
knowledgeLanguageFallback string κωδικός γλώσσας Γλώσσα που χρησιμοποιείται όταν δεν βρίσκεται αντιστοιχία

§ advanced

Πεδίο Τύπος Περιορισμός Περιγραφή
model string υπόκειται στα όρια του λογαριασμού, δείτε "Μοντέλα κειμένου AI" παραπάνω Αναγνωριστικό LLM (π.χ. 5-MINI)
temperature decimal 0.0-1.0 Θερμοκρασία δειγματοληψίας (αντιστοιχεί στο ρυθμιστικό του περιβάλλοντος χρήστη)
chatContextSize int ∈ {8000, 16000, 32000}, προσαρμόζεται σιωπηρά στο όριο του λογαριασμού σας Παράθυρο διακριτικών (tokens) για το ιστορικό συνομιλίας
botMessagesLimit long 0 ή πολλαπλάσιο του 1000 (π.χ. 1000, 2000, 10000) Μέγιστος αριθμός απαντήσεων bot ανά συνομιλία (0 = χωρίς όριο)
internalLocale string κωδικός τοπικών ρυθμίσεων στη μορφή ll_CC Τοπικές ρυθμίσεις για τις ετικέτες πλαισίου του widget (ξεχωριστό από το role.language)
productsViewEnabled boolean Εάν είναι true, προβάλλει τις Offer Cards του ηλεκτρονικού εμπορίου μέσα στη συνομιλία
includeProductsInKnowledgeBase boolean Εάν είναι true, ευρετηριάζει τον κατάλογο προϊόντων ως μέρος της βάσης γνώσεων

Εκτός εμβέλειας του API

Η διεπαφή διαχειριστή περιλαμβάνει ορισμένες περιοχές που σκόπιμα δεν εκτίθενται σε αυτήν την έκδοση του Management API:

  • Καρτέλα Flow (Ροή) - ο οπτικός επεξεργαστής Flow Editor (στάδια και μεταβάσεις). Δεν εκτίθεται μέσω του Management API.
  • Καρτέλα Actions (Ενέργειες) - διαχειριζόμενες ενσωματώσεις ηλεκτρονικού εμπορίου / κρατήσεων, AI Search και προσαρμοσμένες συναρτήσεις API. Η κλήση εργαλείων δεν αποτέλεσε ποτέ μέρος του Management API.
  • Το ίδιο το εργαλείο δημιουργίας προσαρμοσμένων φορμών - η δημιουργία και η επεξεργασία προσαρμοσμένων φορμών δεν εκτίθενται. Μπορείτε, ωστόσο, να συνδέσετε μια υπάρχουσα φόρμα σε ένα bot μέσω των leadCollection.customFormId και humanSupport.customFormId.
  • Προσαρμοσμένα εικονίδια ανοίγματος / κλεισίματος συνομιλίας - customLauncherIconVisible, openChatIcon, closeChatIcon. Το API εκθέτει μόνο τα κύρια τμήματα multipart avatar και whitelabel_logo.
  • Λίστες IP και χωρών - οι ίδιες οι εγγραφές είναι προσβάσιμες μόνο από διαχειριστές. Εκτίθεται μόνο η λειτουργία ερμηνείας, μέσω του security.countryFilterMode.

Endpoints

POST /v1/management/bots

Δημιουργήστε ένα νέο bot. Γίνονται δεκτοί δύο ισοδύναμοι τύποι Content-Type. Επιλέξτε όποιον σας εξυπηρετεί καλύτερα.

Λειτουργία A - απλό JSON (συνιστάται όταν δεν χρειάζεται να ανεβάσετε avatar / λογότυπο στο ίδιο αίτημα):

  • Content-Type: application/json
  • Το σώμα του αιτήματος είναι το JSON των ρυθμίσεων του bot (χωρίς περίβλημα data)
  • Τα αρχεία (avatar / λογότυπο) μπορούν να μεταφορτωθούν αργότερα μέσω ενός δεύτερου αιτήματος PATCH χρησιμοποιώντας τη λειτουργία B

Λειτουργία B - multipart/form-data (χρησιμοποιήστε τη για μεταφόρτωση αρχείων στο ίδιο αίτημα):

  • Content-Type: multipart/form-data; boundary=...
  • Μέρος JSON data (υποχρεωτικό, Content-Type: application/json) - ρυθμίσεις παραμέτρων του bot στην ένθετη μορφή που περιγράφεται παραπάνω
  • Μέρος αρχείου avatar (προαιρετικό) - εικόνα avatar του bot
  • Μέρος αρχείου whitelabel_logo (προαιρετικό) - λογότυπο White Label (ισχύει μόνο εάν ο λογαριασμός σας περιλαμβάνει white-labelling)

Μόνο το πεδίο name είναι υποχρεωτικό στο JSON. Όλα τα υπόλοιπα πεδία λαμβάνουν την ίδια προεπιλεγμένη τιμή που θα όριζε ο οδηγός του περιβάλλοντος διαχείρισης.

Πλήρες σώμα αιτήματος

Αυτό είναι το μέγιστο JSON data - με συμπληρωμένη κάθε ενότητα. Στείλτε μόνο τις ενότητες που σας ενδιαφέρουν. Όλα τα υπόλοιπα στοιχεία λαμβάνουν προεπιλεγμένες τιμές.

{
  "name": "Helpdesk Bot",
  "role": {
    "rawPrompt": "You are a friendly support assistant for Acme Inc.",
    "role": "CUSTOMER_SUPPORT",
    "language": "English",
    "responseLength": "Normal",
    "websiteAddress": "https://acme.com",
    "companyDescription": "Acme sells industrial widgets."
  },
  "conversation": {
    "welcomeMessage": "Hi! How can I help today?",
    "queryRefinementEnabled": true,
    "conversationContinuityEnabled": true,
    "conversationRatingEnabled": true,
    "positiveRatingTooltip": "Helpful",
    "negativeRatingTooltip": "Not helpful",
    "suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
    "dynamicSuggestedFollowups": true,
    "dynamicFollowupsAutoIcons": true
  },
  "chatMemory": {
    "enabled": true,
    "summaryConversationsEnabled": true,
    "conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
    "clientSummaryPrompt": "Summarize what we know about this customer.",
    "clientSummaryPromptType": "DEFAULT",
    "conversationSummaryPromptType": "DEFAULT",
    "summariesToKnowledgeRatio": 50
  },
  "appearance": {
    "launcherColor": "#1A73E8",
    "headerColor": "#1A73E8",
    "titleColor": "#FFFFFF",
    "subtitleColor": "#FFFFFF",
    "clientMessageBubbleColor": "#000000",
    "clientMessageTextColor": "#FFFFFF",
    "responseMessageBubbleColor": "#F4F4F4",
    "responseMessageTextColor": "#000000",
    "chatSubheader": "AI support assistant",
    "senderPlaceholder": "Type a message...",
    "resetConversationTooltip": "Restart conversation",
    "chatAlignment": "right",
    "launcherBottomMargin": 20,
    "launcherSideMargin": 20,
    "displayShadow": true,
    "customCss": ".rcw-conversation-container { border-radius: 16px; }",
    "chatMessageLinkTarget": "_blank",
    "minimizedDisplayMode": "icon",
    "chatDesktopWidthPx": 400,
    "chatDesktopHeightPx": 600,
    "chatMobileSizePercent": 100,
    "messageFontSize": 14,
    "showChatbotBubblesDesktop": true,
    "showChatbotBubblesMobile": false,
    "chatbotBubblesDelaySeconds": 5,
    "welcomeScreenEnabled": false,
    "welcomeScreenQuestionsLabel": "Quick start",
    "welcomeScreenHideHumanContactForm": false,
    "welcomeScreenHideLiveChat": false,
    "headerActionsLayout": "DROPDOWN",
    "stackSuggestedQuestions": false,
    "suggestedQuestionsFontSize": 14,
    "suggestedQuestionsTextColor": "#000000",
    "suggestedQuestionsBackgroundColor": "#F4F4F4",
    "autoOpenChat": false,
    "autoOpenChatOnMobiles": false,
    "autoOpenChatDelay": false,
    "autoOpenChatDelaySeconds": 5,
    "simulateHumanTyping": true,
    "simulateHumanTypingDelay": 5,
    "footerMarkdown": "Powered by Acme"
  },
  "humanSupport": {
    "enabled": true,
    "email": "support@acme.com",
    "dialogMessage": "Leave us a message and we will get back to you.",
    "thankYouMessage": "Thanks - we received your message.",
    "emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
    "emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
    "emailPlaceholder": "your@email.com",
    "messagePlaceholder": "How can we help?",
    "emailWithConversationContent": true
  },
  "leadCollection": {
    "enabled": true,
    "nameEnabled": true,
    "nameLabel": "Your name",
    "emailEnabled": true,
    "emailLabel": "Email",
    "phoneEnabled": false,
    "phoneLabel": "Phone",
    "leaveDetailsMessage": "Please leave your details and we will get in touch.",
    "thankYouMessage": "Thanks - we will be in touch shortly.",
    "requireBeforeNewConversation": false,
    "emailNotificationEnabled": true,
    "emailNotificationAddress": "leads@acme.com",
    "emailWithConversationContent": true
  },
  "liveChat": {
    "enabled": false,
    "infoMessage": "Connecting you with a human agent...",
    "startMessage": "You are now chatting with our team.",
    "endMessage": "Live chat has ended.",
    "nameLabel": "Your name",
    "emailLabel": "Email",
    "schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
    "outOfHoursMessage": "We are currently offline.",
    "closeModalMessage": "End the live chat session?",
    "closeModalConfirmLabel": "Yes, end",
    "closeModalCancelLabel": "Cancel",
    "closeModalTooltipText": "End live chat",
    "operatorHasJoinedLabel": "An agent has joined.",
    "operatorDidNotJoinInTimeLabel": "No agent available right now.",
    "waitingForOperatorToJoinLabel": "Waiting for an agent...",
    "waitingForOperatorSeconds": 60,
    "redirectToHumanSupportForm": true
  },
  "consent": {
    "newConversationRequirePolicyAccept": false,
    "humanSupportRequirePolicyAccept": false,
    "leadCollectionRequirePolicyAccept": true,
    "liveChatRequirePolicyAccept": false,
    "newConversationConsentDescription": "By starting a conversation you agree to our terms.",
    "privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
  },
  "whiteLabel": {
    "hideRoboAssistLogo": false,
    "whitelabelLogoLink": "https://acme.com",
    "assignToCustomDomain": false
  },
  "security": {
    "allowedDomains": "acme.com,support.acme.com",
    "spamFilterEnabled": true,
    "talkMessagesRateLimit": 30,
    "talkMessagesRateLimitDurationSeconds": 60,
    "talkMessagesRateLimitHitMessage": "Please slow down."
  },
  "advanced": {
    "model": "5-MINI",
    "temperature": 0.4,
    "chatContextSize": 16000,
    "botMessagesLimit": 1000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  }
}

Κανόνες επικύρωσης με τα αντίστοιχα μηνύματα σφάλματος:

  • name - υποχρεωτικό, έως 150 χαρακτήρες
  • advanced.temperature - μεταξύ 0.0 και 1.0
  • chatMemory.summariesToKnowledgeRatio - ακέραιος μεταξύ 10 και 90 (ποσοστό, βήμα 10)
  • appearance.launcherBottomMargin, appearance.launcherSideMargin - μεταξύ 0 και 500
  • appearance.footerMarkdown - έως 255 χαρακτήρες
  • Εάν humanSupport.enabled=true, απαιτείται να έχει οριστεί το humanSupport.email
  • Εάν leadCollection.enabled=true, απαιτείται τουλάχιστον ένα από τα leadCollection.emailEnabled ή leadCollection.phoneEnabled να είναι true. Όποιο κανάλι είναι ενεργό απαιτεί επίσης την ετικέτα του, καθώς και τα leaveDetailsMessage και thankYouMessage
  • Τα πεδία με ανώτατο όριο (advanced.chatContextSize, advanced.botMessagesLimit κ.λπ.) περιορίζονται αυτόματα στα όρια του λογαριασμού σας

Τα πεδία των οποίων η τιμή είναι null στον διακομιστή παραλείπονται από το σώμα JSON - διαβιβάζονται μόνο πεδία με μη μηδενικές (non-null) τιμές.

Πλήρες σώμα απόκρισης (201)

Ίδια μορφή με το αίτημα, συν το μπλοκ μόνο για ανάγνωση meta και το μοναδικό κλειδί apiKey στο ανώτατο επίπεδο. Οι διευθύνσεις URL αρχείων μόνο για ανάγνωση (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) συμπληρώνονται από τον διακομιστή όταν έχουν μεταφορτωθεί τα αντίστοιχα τμήματα multipart.

{
  "name": "Helpdesk Bot",
  "role": {
    "rawPrompt": "You are a friendly support assistant for Acme Inc.",
    "role": "CUSTOMER_SUPPORT",
    "language": "English",
    "responseLength": "Normal",
    "websiteAddress": "https://acme.com",
    "companyDescription": "Acme sells industrial widgets."
  },
  "conversation": {
    "welcomeMessage": "Hi! How can I help today?",
    "queryRefinementEnabled": true,
    "conversationContinuityEnabled": true,
    "conversationRatingEnabled": true,
    "positiveRatingTooltip": "Helpful",
    "negativeRatingTooltip": "Not helpful",
    "suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
    "dynamicSuggestedFollowups": true,
    "dynamicFollowupsAutoIcons": true
  },
  "chatMemory": {
    "enabled": true,
    "summaryConversationsEnabled": true,
    "conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
    "clientSummaryPrompt": "Summarize what we know about this customer.",
    "clientSummaryPromptType": "DEFAULT",
    "conversationSummaryPromptType": "DEFAULT",
    "summariesToKnowledgeRatio": 50
  },
  "appearance": {
    "launcherColor": "#1A73E8",
    "headerColor": "#1A73E8",
    "titleColor": "#FFFFFF",
    "subtitleColor": "#FFFFFF",
    "clientMessageBubbleColor": "#000000",
    "clientMessageTextColor": "#FFFFFF",
    "responseMessageBubbleColor": "#F4F4F4",
    "responseMessageTextColor": "#000000",
    "chatSubheader": "AI support assistant",
    "senderPlaceholder": "Type a message...",
    "resetConversationTooltip": "Restart conversation",
    "chatAlignment": "right",
    "launcherBottomMargin": 20,
    "launcherSideMargin": 20,
    "displayShadow": true,
    "customCss": ".rcw-conversation-container { border-radius: 16px; }",
    "chatMessageLinkTarget": "_blank",
    "minimizedDisplayMode": "icon",
    "chatDesktopWidthPx": 400,
    "chatDesktopHeightPx": 600,
    "chatMobileSizePercent": 100,
    "messageFontSize": 14,
    "showChatbotBubblesDesktop": true,
    "showChatbotBubblesMobile": false,
    "chatbotBubblesDelaySeconds": 5,
    "welcomeScreenEnabled": false,
    "welcomeScreenQuestionsLabel": "Quick start",
    "welcomeScreenHideHumanContactForm": false,
    "welcomeScreenHideLiveChat": false,
    "headerActionsLayout": "DROPDOWN",
    "stackSuggestedQuestions": false,
    "suggestedQuestionsFontSize": 14,
    "suggestedQuestionsTextColor": "#000000",
    "suggestedQuestionsBackgroundColor": "#F4F4F4",
    "autoOpenChat": false,
    "autoOpenChatOnMobiles": false,
    "autoOpenChatDelay": false,
    "autoOpenChatDelaySeconds": 5,
    "simulateHumanTyping": true,
    "simulateHumanTypingDelay": 5,
    "footerMarkdown": "Powered by Acme",
    "avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
  },
  "humanSupport": {
    "enabled": true,
    "email": "support@acme.com",
    "dialogMessage": "Leave us a message and we will get back to you.",
    "thankYouMessage": "Thanks - we received your message.",
    "emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
    "emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
    "emailPlaceholder": "your@email.com",
    "messagePlaceholder": "How can we help?",
    "emailWithConversationContent": true
  },
  "leadCollection": {
    "enabled": true,
    "nameEnabled": true,
    "nameLabel": "Your name",
    "emailEnabled": true,
    "emailLabel": "Email",
    "phoneEnabled": false,
    "phoneLabel": "Phone",
    "leaveDetailsMessage": "Please leave your details and we will get in touch.",
    "thankYouMessage": "Thanks - we will be in touch shortly.",
    "requireBeforeNewConversation": false,
    "emailNotificationEnabled": true,
    "emailNotificationAddress": "leads@acme.com",
    "emailWithConversationContent": true
  },
  "liveChat": {
    "enabled": false,
    "infoMessage": "Connecting you with a human agent...",
    "startMessage": "You are now chatting with our team.",
    "endMessage": "Live chat has ended.",
    "nameLabel": "Your name",
    "emailLabel": "Email",
    "schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
    "outOfHoursMessage": "We are currently offline.",
    "closeModalMessage": "End the live chat session?",
    "closeModalConfirmLabel": "Yes, end",
    "closeModalCancelLabel": "Cancel",
    "closeModalTooltipText": "End live chat",
    "operatorHasJoinedLabel": "An agent has joined.",
    "operatorDidNotJoinInTimeLabel": "No agent available right now.",
    "waitingForOperatorToJoinLabel": "Waiting for an agent...",
    "waitingForOperatorSeconds": 60,
    "redirectToHumanSupportForm": true
  },
  "consent": {
    "newConversationRequirePolicyAccept": false,
    "humanSupportRequirePolicyAccept": false,
    "leadCollectionRequirePolicyAccept": true,
    "liveChatRequirePolicyAccept": false,
    "newConversationConsentDescription": "By starting a conversation you agree to our terms.",
    "privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
  },
  "whiteLabel": {
    "hideRoboAssistLogo": false,
    "whitelabelLogoLink": "https://acme.com",
    "assignToCustomDomain": false,
    "whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
  },
  "security": {
    "allowedDomains": "acme.com,support.acme.com",
    "spamFilterEnabled": true,
    "talkMessagesRateLimit": 30,
    "talkMessagesRateLimitDurationSeconds": 60,
    "talkMessagesRateLimitHitMessage": "Please slow down."
  },
  "advanced": {
    "model": "5-MINI",
    "temperature": 0.4,
    "chatContextSize": 16000,
    "botMessagesLimit": 1000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  },
  "meta": {
    "id": 4287,
    "createdAt": "2026-06-01T10:11:02Z",
    "updatedAt": "2026-06-01T10:11:02Z"
  },
  "apiKey": "ck_freshly_minted_bot_talk_key_here"
}

Το πεδίο apiKey εμφανίζεται μόνο κατά τη δημιουργία - είναι το νεοδημιουργηθέν κλειδί Bot Talk API που συνδέεται με το νέο bot. Το κείμενο εμφανίζεται μία φορά και δεν μπορεί να ανακτηθεί αργότερα από το API. Αποθηκεύστε το αμέσως στην πλευρά σας.

Η κεφαλίδα απόκρισης Location περιέχει τη διεύθυνση URL του νέου bot (/v1/management/bots/{id}).

Παραδείγματα curl

Λειτουργία A - απλό JSON (η απλούστερη):

curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
  -H "Authorization: Bearer mk_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"Helpdesk Bot","conversation":{"welcomeMessage":"Hi!"}}'

Λειτουργία B - multipart με avatar:

curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
  -H "Authorization: Bearer mk_..." \
  -F 'data={"name":"Helpdesk Bot","conversation":{"welcomeMessage":"Hi!"}};type=application/json' \
  -F 'avatar=@./avatar.png'

GET /v1/management/bots/{bot_id}

Επιστρέφει τις τρέχουσες ρυθμίσεις παραμέτρων ενός bot που σας ανήκει.

Παράδειγμα curl

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..."

Πλήρες σώμα απόκρισης (200)

Ίδια μορφή με την απόκριση POST, χωρίς το εφάπαξ apiKey. Περιλαμβάνεται το μπλοκ meta. Επιστρέφει 404 not_found_error εάν το bot δεν υπάρχει ή δεν ανήκει στον λογαριασμό σας.

Το τρέχον avatar και το λογότυπο White Label εμφανίζονται ως πλήρεις διευθύνσεις URL μόνο για ανάγνωση (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - με βάση τον ίδιο συνδυασμό πρωτοκόλλου, διακομιστή και διαδρομής (scheme + host + context path) που εξυπηρέτησε αυτό το αίτημα. Λάβετε τα byte εκτελώντας απευθείας αίτημα GET σε αυτές τις διευθύνσεις URL. Για να αντικαταστήσετε οποιοδήποτε από τα δύο αρχεία, ανεβάστε ένα νέο μέσω του μέρους multipart avatar / whitelabel_logo στο PATCH. Αυτά τα πεδία URL αγνοούνται εάν σταλούν στο σώμα ενός αιτήματος.

{
  "name": "Helpdesk Bot",
  "role": {
    "rawPrompt": "You are a friendly support assistant for Acme Inc.",
    "role": "CUSTOMER_SUPPORT",
    "language": "English",
    "responseLength": "Normal",
    "websiteAddress": "https://acme.com",
    "companyDescription": "Acme sells industrial widgets."
  },
  "conversation": {
    "welcomeMessage": "Hi! How can I help today?",
    "queryRefinementEnabled": true,
    "conversationContinuityEnabled": true,
    "conversationRatingEnabled": true,
    "positiveRatingTooltip": "Helpful",
    "negativeRatingTooltip": "Not helpful",
    "suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
    "dynamicSuggestedFollowups": true,
    "dynamicFollowupsAutoIcons": true
  },
  "chatMemory": {
    "enabled": true,
    "summaryConversationsEnabled": true,
    "conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
    "clientSummaryPrompt": "Summarize what we know about this customer.",
    "clientSummaryPromptType": "DEFAULT",
    "conversationSummaryPromptType": "DEFAULT",
    "summariesToKnowledgeRatio": 50
  },
  "appearance": {
    "launcherColor": "#1A73E8",
    "headerColor": "#1A73E8",
    "titleColor": "#FFFFFF",
    "subtitleColor": "#FFFFFF",
    "clientMessageBubbleColor": "#000000",
    "clientMessageTextColor": "#FFFFFF",
    "responseMessageBubbleColor": "#F4F4F4",
    "responseMessageTextColor": "#000000",
    "chatSubheader": "AI support assistant",
    "senderPlaceholder": "Type a message...",
    "resetConversationTooltip": "Restart conversation",
    "chatAlignment": "right",
    "launcherBottomMargin": 20,
    "launcherSideMargin": 20,
    "displayShadow": true,
    "customCss": ".rcw-conversation-container { border-radius: 16px; }",
    "chatMessageLinkTarget": "_blank",
    "minimizedDisplayMode": "icon",
    "chatDesktopWidthPx": 400,
    "chatDesktopHeightPx": 600,
    "chatMobileSizePercent": 100,
    "messageFontSize": 14,
    "showChatbotBubblesDesktop": true,
    "showChatbotBubblesMobile": false,
    "chatbotBubblesDelaySeconds": 5,
    "welcomeScreenEnabled": false,
    "welcomeScreenQuestionsLabel": "Quick start",
    "welcomeScreenHideHumanContactForm": false,
    "welcomeScreenHideLiveChat": false,
    "headerActionsLayout": "DROPDOWN",
    "stackSuggestedQuestions": false,
    "suggestedQuestionsFontSize": 14,
    "suggestedQuestionsTextColor": "#000000",
    "suggestedQuestionsBackgroundColor": "#F4F4F4",
    "autoOpenChat": false,
    "autoOpenChatOnMobiles": false,
    "autoOpenChatDelay": false,
    "autoOpenChatDelaySeconds": 5,
    "simulateHumanTyping": true,
    "simulateHumanTypingDelay": 5,
    "footerMarkdown": "Powered by Acme",
    "avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
  },
  "humanSupport": {
    "enabled": true,
    "email": "support@acme.com",
    "dialogMessage": "Leave us a message and we will get back to you.",
    "thankYouMessage": "Thanks - we received your message.",
    "emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
    "emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
    "emailPlaceholder": "your@email.com",
    "messagePlaceholder": "How can we help?",
    "emailWithConversationContent": true
  },
  "leadCollection": {
    "enabled": true,
    "nameEnabled": true,
    "nameLabel": "Your name",
    "emailEnabled": true,
    "emailLabel": "Email",
    "phoneEnabled": false,
    "phoneLabel": "Phone",
    "leaveDetailsMessage": "Please leave your details and we will get in touch.",
    "thankYouMessage": "Thanks - we will be in touch shortly.",
    "requireBeforeNewConversation": false,
    "emailNotificationEnabled": true,
    "emailNotificationAddress": "leads@acme.com",
    "emailWithConversationContent": true
  },
  "liveChat": {
    "enabled": false,
    "infoMessage": "Connecting you with a human agent...",
    "startMessage": "You are now chatting with our team.",
    "endMessage": "Live chat has ended.",
    "nameLabel": "Your name",
    "emailLabel": "Email",
    "schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
    "outOfHoursMessage": "We are currently offline.",
    "closeModalMessage": "End the live chat session?",
    "closeModalConfirmLabel": "Yes, end",
    "closeModalCancelLabel": "Cancel",
    "closeModalTooltipText": "End live chat",
    "operatorHasJoinedLabel": "An agent has joined.",
    "operatorDidNotJoinInTimeLabel": "No agent available right now.",
    "waitingForOperatorToJoinLabel": "Waiting for an agent...",
    "waitingForOperatorSeconds": 60,
    "redirectToHumanSupportForm": true
  },
  "consent": {
    "newConversationRequirePolicyAccept": false,
    "humanSupportRequirePolicyAccept": false,
    "leadCollectionRequirePolicyAccept": true,
    "liveChatRequirePolicyAccept": false,
    "newConversationConsentDescription": "By starting a conversation you agree to our terms.",
    "privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
  },
  "whiteLabel": {
    "hideRoboAssistLogo": false,
    "whitelabelLogoLink": "https://acme.com",
    "assignToCustomDomain": false,
    "whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
  },
  "security": {
    "allowedDomains": "acme.com,support.acme.com",
    "spamFilterEnabled": true,
    "talkMessagesRateLimit": 30,
    "talkMessagesRateLimitDurationSeconds": 60,
    "talkMessagesRateLimitHitMessage": "Please slow down."
  },
  "advanced": {
    "model": "5-MINI",
    "temperature": 0.4,
    "chatContextSize": 16000,
    "botMessagesLimit": 1000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  },
  "meta": {
    "id": 4287,
    "createdAt": "2026-06-01T10:11:02Z",
    "updatedAt": "2026-06-01T11:02:19Z"
  }
}

Κλωνοποίηση ενός bot

Το σώμα αιτήματος του POST /v1/management/bots και το σώμα απόκρισης του GET /v1/management/bots/{bot_id} μοιράζονται την ίδια δομή, επομένως η κλωνοποίηση είναι μια διαδικασία τριών βημάτων: εκτελέστε GET στο bot προέλευσης, αφαιρέστε τα πεδία ταυτότητας που διαχειρίζεται ο διακομιστής, εκτελέστε POST στο αποτέλεσμα.

1. Εκτελέστε GET στο bot προέλευσης.

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -o source-bot.json

2. Αφαιρέστε το ανώτατου επιπέδου block meta. Το αντικείμενο meta (id, createdAt, updatedAt) διαχειρίζεται από τον διακομιστή και είναι μόνο για ανάγνωση - αν το αφήσετε στο σώμα του POST δεν προκαλείται πρόβλημα (ο διακομιστής το αγνοεί), αλλά η κατάργησή του καθιστά την πρόθεση σαφή και διατηρεί το payload καθαρό. Προαιρετικά, επεξεργαστείτε το name ώστε ο κλώνος να ξεχωρίζει από το αρχικό bot.

jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json

3. Κάντε POST το εκκαθαρισμένο σώμα για να δημιουργήσετε τον κλώνο. Ανατρέξτε στην τεκμηρίωση του POST /v1/management/bots παραπάνω για την πλήρη μορφή του σώματος και τους κανόνες επικύρωσης.

curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
  -H "Authorization: Bearer mk_..." \
  -H "Content-Type: application/json" \
  -d @clone-body.json

Η απόκριση περιέχει το meta.id του νέου bot καθώς και ένα πρόσφατα παραγόμενο apiKey (το κλειδί Bot Talk για τον κλώνο). Το απλό κείμενο του apiKey επιστρέφεται μόνο σε αυτήν την απόκριση δημιουργίας - αντιγράψτε το πριν απορρίψετε το σώμα της απόκρισης, καθώς δεν μπορεί να ανακτηθεί αργότερα.

Δύο επισημάνσεις:

  • Τα αρχεία δεν κλωνοποιούνται. Τα πεδία appearance.avatarUrl και whiteLabel.whitelabelLogoUrl είναι μόνο για ανάγνωση και οδηγούν στα αρχεία του bot προέλευσης. Αν χρειάζεστε το ίδιο avatar ή white-label λογότυπο στον κλώνο, κατεβάστε τα δεδομένα από τα αρχικά URL και μεταφορτώστε τα ως multipart μέρη avatar / whitelabel_logo - είτε κατά τη δημιουργία με POST (Mode B) είτε με ένα επακόλουθο PATCH.
  • Τα κλειδιά Bot Talk δεν κλωνοποιούνται. Κάθε bot έχει τη δική του ομάδα κλειδιών Bot Talk. Το μοναδικό apiKey που επιστρέφεται από το αίτημα POST δημιουργίας είναι το μόνο που παράγεται αυτόματα. Δημιουργήστε πρόσθετα κλειδιά από την καρτέλα API (API tab) του bot, εάν χρειάζεται.

PATCH /v1/management/bots/{bot_id}

Ενημερώστε ένα ή περισσότερα πεδία σε ένα bot που σας ανήκει. Μόνο οι ενότητες / πεδία που υπάρχουν στο JSON τροποποιούνται. Οτιδήποτε παραλείπεται (ή αποστέλλεται ως null) παραμένει ανέπαφο. Ισχύουν σημασιολογικοί κανόνες μερικής ενημέρωσης ανά πεδίο εντός μιας απεσταλμένης ενότητας.

Γίνονται δεκτοί δύο ισοδύναμοι τύποι περιεχομένου Content-Type (ίδιοι με το POST):

Mode A - απλό JSON (συνιστάται όταν ενημερώνονται μόνο ρυθμίσεις):

  • Content-Type: application/json
  • Το σώμα του αιτήματος είναι το JSON του patch (χωρίς περίβλημα data)

Mode B - multipart/form-data (χρησιμοποιήστε το κατά τη μεταφόρτωση αρχείων):

  • Μέρος JSON data (προαιρετικό) - το patch. Στείλτε το μόνο εάν θέλετε να αλλάξετε πεδία. Παραλείψτε το εντελώς εάν θέλετε μόνο να ανεβάσετε avatar ή λογότυπο.
  • Μέρος αρχείου avatar (προαιρετικό) - αντικαθιστά το avatar
  • Μέρος αρχείου whitelabel_logo (προαιρετικό) - αντικαθιστά το white-label λογότυπο (ισχύει μόνο εάν ο λογαριασμός σας περιλαμβάνει white-labelling)

Και τα τρία μέρη είναι προαιρετικά στο PATCH, αλλά τουλάχιστον ένα πρέπει να υπάρχει για να έχει νόημα η κλήση.

Πλήρες σώμα αιτήματος (μέγιστη επιφάνεια)

Οποιοδήποτε πεδίο γίνεται δεκτό από το POST /v1/management/bots μπορεί επίσης να σταλεί εδώ. Το παρακάτω παράδειγμα περιλαμβάνει την πλήρη επιφάνεια. Στην πράξη στέλνετε μόνο τα κλειδιά που θέλετε να αλλάξετε (δείτε το "Ελάχιστη μερική ενημέρωση" παρακάτω) - κάθε κλειδί που παραλείπεται (ή αποστέλλεται ως null) αφήνει την αποθηκευμένη τιμή ανέπαφη.

{
  "name": "Helpdesk Bot",
  "role": {
    "rawPrompt": "You are a friendly support assistant for Acme Inc. Be concise.",
    "role": "CUSTOMER_SUPPORT",
    "language": "English",
    "responseLength": "Concise",
    "websiteAddress": "https://acme.com",
    "companyDescription": "Acme sells industrial widgets."
  },
  "conversation": {
    "welcomeMessage": "Hello there!",
    "queryRefinementEnabled": true,
    "conversationContinuityEnabled": true,
    "conversationRatingEnabled": true,
    "positiveRatingTooltip": "Helpful",
    "negativeRatingTooltip": "Not helpful",
    "suggestedQuestions": "Pricing\nShipping times\nReturns policy",
    "dynamicSuggestedFollowups": true,
    "dynamicFollowupsAutoIcons": true
  },
  "chatMemory": {
    "enabled": true,
    "summaryConversationsEnabled": true,
    "conversationSummaryPrompt": "Summarize the conversation in 3 sentences.",
    "clientSummaryPrompt": "Summarize what we know about the customer.",
    "clientSummaryPromptType": "DEFAULT",
    "conversationSummaryPromptType": "DEFAULT",
    "summariesToKnowledgeRatio": 50
  },
  "appearance": {
    "launcherColor": "#abcdef",
    "headerColor": "#abcdef",
    "titleColor": "#FFFFFF",
    "subtitleColor": "#FFFFFF",
    "clientMessageBubbleColor": "#000000",
    "clientMessageTextColor": "#FFFFFF",
    "responseMessageBubbleColor": "#F4F4F4",
    "responseMessageTextColor": "#000000",
    "chatSubheader": "AI assistant",
    "senderPlaceholder": "Type a message",
    "resetConversationTooltip": "Restart conversation",
    "chatAlignment": "right",
    "launcherBottomMargin": 20,
    "launcherSideMargin": 20,
    "displayShadow": true,
    "customCss": ".rcw-conversation-container { border-radius: 16px; }",
    "chatMessageLinkTarget": "_blank",
    "minimizedDisplayMode": "icon",
    "chatDesktopWidthPx": 400,
    "chatDesktopHeightPx": 600,
    "chatMobileSizePercent": 100,
    "messageFontSize": 14,
    "showChatbotBubblesDesktop": true,
    "showChatbotBubblesMobile": false,
    "chatbotBubblesDelaySeconds": 5,
    "welcomeScreenEnabled": false,
    "welcomeScreenQuestionsLabel": "Quick start",
    "welcomeScreenHideHumanContactForm": false,
    "welcomeScreenHideLiveChat": false,
    "headerActionsLayout": "DROPDOWN",
    "stackSuggestedQuestions": false,
    "suggestedQuestionsFontSize": 14,
    "suggestedQuestionsTextColor": "#000000",
    "suggestedQuestionsBackgroundColor": "#F4F4F4",
    "autoOpenChat": false,
    "autoOpenChatOnMobiles": false,
    "autoOpenChatDelay": false,
    "autoOpenChatDelaySeconds": 5,
    "simulateHumanTyping": true,
    "simulateHumanTypingDelay": 5,
    "footerMarkdown": "Powered by Acme"
  },
  "humanSupport": {
    "enabled": true,
    "email": "support@acme.com",
    "dialogMessage": "Leave us a message and we'll get back to you.",
    "thankYouMessage": "Thanks!",
    "emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
    "emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
    "emailPlaceholder": "your@email.com",
    "messagePlaceholder": "How can we help?",
    "emailWithConversationContent": true
  },
  "leadCollection": {
    "enabled": true,
    "nameEnabled": true,
    "nameLabel": "Your name",
    "emailEnabled": true,
    "emailLabel": "Email",
    "phoneEnabled": false,
    "phoneLabel": "Phone",
    "leaveDetailsMessage": "Please leave your details.",
    "thankYouMessage": "Thanks!",
    "requireBeforeNewConversation": true,
    "emailNotificationEnabled": true,
    "emailNotificationAddress": "leads@acme.com",
    "emailWithConversationContent": true
  },
  "liveChat": {
    "enabled": false,
    "infoMessage": "Connecting you with a human agent...",
    "startMessage": "You are now chatting with our team.",
    "endMessage": "Live chat has ended.",
    "nameLabel": "Your name",
    "emailLabel": "Email",
    "schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
    "outOfHoursMessage": "We are currently offline.",
    "closeModalMessage": "End the live chat session?",
    "closeModalConfirmLabel": "Yes, end",
    "closeModalCancelLabel": "Cancel",
    "closeModalTooltipText": "End live chat",
    "operatorHasJoinedLabel": "An agent has joined.",
    "operatorDidNotJoinInTimeLabel": "No agent available right now.",
    "waitingForOperatorToJoinLabel": "Waiting for an agent...",
    "waitingForOperatorSeconds": 60,
    "redirectToHumanSupportForm": true
  },
  "consent": {
    "newConversationRequirePolicyAccept": false,
    "humanSupportRequirePolicyAccept": false,
    "leadCollectionRequirePolicyAccept": true,
    "liveChatRequirePolicyAccept": false,
    "newConversationConsentDescription": "By starting a conversation you agree to our terms.",
    "privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
  },
  "whiteLabel": {
    "hideRoboAssistLogo": false,
    "whitelabelLogoLink": "https://acme.com",
    "assignToCustomDomain": false
  },
  "security": {
    "allowedDomains": "acme.com,support.acme.com",
    "spamFilterEnabled": true,
    "talkMessagesRateLimit": 30,
    "talkMessagesRateLimitDurationSeconds": 60,
    "talkMessagesRateLimitHitMessage": "Please slow down."
  },
  "advanced": {
    "model": "5",
    "temperature": 0.2,
    "chatContextSize": 32000,
    "botMessagesLimit": 2000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  }
}

Ελάχιστη μερική ενημέρωση

Εκτελέστε PATCH σε ένα μόνο πεδίο στέλνοντας ακριβώς τα κλειδιά που θέλετε να αλλάξετε - όλα τα υπόλοιπα διατηρούνται.

{
  "appearance": {
    "launcherColor": "#abcdef"
  }
}

Παραδείγματα Curl

Mode A - απλό JSON (το απλούστερο):

curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -H "Content-Type: application/json" \
  -d '{"appearance":{"launcherColor":"#abcdef"}}'

Mode B - multipart (κατά την αντικατάσταση avatar / λογοτύπου):

curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -F 'data={"appearance":{"launcherColor":"#abcdef"}};type=application/json' \
  -F 'avatar=@./new-avatar.png'

Mode B - αντικατάσταση μόνο του avatar (χωρίς αλλαγές πεδίων):

curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -F 'avatar=@./new-avatar.png'

Σώμα απόκρισης (200)

Ίδια δομή με το GET /v1/management/bots/{bot_id} - η πλήρης διαμόρφωση του bot μετά την εφαρμογή του patch, συμπεριλαμβανομένου του block meta. Δεν υπάρχει πεδίο apiKey. Επιστρέφει 404 not_found_error εάν το bot δεν υπάρχει ή δεν ανήκει στον λογαριασμό σας.

Το παρακάτω παράδειγμα δείχνει την απόκριση μετά την εφαρμογή του παραπάνω patch Πλήρες σώμα αιτήματος (μέγιστη επιφάνεια) στο bot από το παράδειγμα GET - τα τροποποιημένα πεδία αντικατοπτρίζουν τις νέες τιμές, τα ανέπαφα πεδία διατηρούνται και το meta.updatedAt ενημερώνεται.

{
  "name": "Helpdesk Bot",
  "role": {
    "rawPrompt": "You are a friendly support assistant for Acme Inc. Be concise.",
    "role": "CUSTOMER_SUPPORT",
    "language": "English",
    "responseLength": "Concise",
    "websiteAddress": "https://acme.com",
    "companyDescription": "Acme sells industrial widgets."
  },
  "conversation": {
    "welcomeMessage": "Hello there!",
    "queryRefinementEnabled": true,
    "conversationContinuityEnabled": true,
    "conversationRatingEnabled": true,
    "positiveRatingTooltip": "Helpful",
    "negativeRatingTooltip": "Not helpful",
    "suggestedQuestions": "Pricing\nShipping times\nReturns policy",
    "dynamicSuggestedFollowups": true,
    "dynamicFollowupsAutoIcons": true
  },
  "chatMemory": {
    "enabled": true,
    "summaryConversationsEnabled": true,
    "conversationSummaryPrompt": "Summarize the conversation in 3 sentences.",
    "clientSummaryPrompt": "Summarize what we know about the customer.",
    "clientSummaryPromptType": "DEFAULT",
    "conversationSummaryPromptType": "DEFAULT",
    "summariesToKnowledgeRatio": 50
  },
  "appearance": {
    "launcherColor": "#abcdef",
    "headerColor": "#abcdef",
    "titleColor": "#FFFFFF",
    "subtitleColor": "#FFFFFF",
    "clientMessageBubbleColor": "#000000",
    "clientMessageTextColor": "#FFFFFF",
    "responseMessageBubbleColor": "#F4F4F4",
    "responseMessageTextColor": "#000000",
    "chatSubheader": "AI assistant",
    "senderPlaceholder": "Type a message",
    "resetConversationTooltip": "Restart conversation",
    "chatAlignment": "right",
    "launcherBottomMargin": 20,
    "launcherSideMargin": 20,
    "displayShadow": true,
    "customCss": ".rcw-conversation-container { border-radius: 16px; }",
    "chatMessageLinkTarget": "_blank",
    "minimizedDisplayMode": "icon",
    "chatDesktopWidthPx": 400,
    "chatDesktopHeightPx": 600,
    "chatMobileSizePercent": 100,
    "messageFontSize": 14,
    "showChatbotBubblesDesktop": true,
    "showChatbotBubblesMobile": false,
    "chatbotBubblesDelaySeconds": 5,
    "welcomeScreenEnabled": false,
    "welcomeScreenQuestionsLabel": "Quick start",
    "welcomeScreenHideHumanContactForm": false,
    "welcomeScreenHideLiveChat": false,
    "headerActionsLayout": "DROPDOWN",
    "stackSuggestedQuestions": false,
    "suggestedQuestionsFontSize": 14,
    "suggestedQuestionsTextColor": "#000000",
    "suggestedQuestionsBackgroundColor": "#F4F4F4",
    "autoOpenChat": false,
    "autoOpenChatOnMobiles": false,
    "autoOpenChatDelay": false,
    "autoOpenChatDelaySeconds": 5,
    "simulateHumanTyping": true,
    "simulateHumanTypingDelay": 5,
    "footerMarkdown": "Powered by Acme",
    "avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
  },
  "humanSupport": {
    "enabled": true,
    "email": "support@acme.com",
    "dialogMessage": "Leave us a message and we'll get back to you.",
    "thankYouMessage": "Thanks!",
    "emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
    "emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
    "emailPlaceholder": "your@email.com",
    "messagePlaceholder": "How can we help?",
    "emailWithConversationContent": true
  },
  "leadCollection": {
    "enabled": true,
    "nameEnabled": true,
    "nameLabel": "Your name",
    "emailEnabled": true,
    "emailLabel": "Email",
    "phoneEnabled": false,
    "phoneLabel": "Phone",
    "leaveDetailsMessage": "Please leave your details.",
    "thankYouMessage": "Thanks!",
    "requireBeforeNewConversation": true,
    "emailNotificationEnabled": true,
    "emailNotificationAddress": "leads@acme.com",
    "emailWithConversationContent": true
  },
  "liveChat": {
    "enabled": false,
    "infoMessage": "Connecting you with a human agent...",
    "startMessage": "You are now chatting with our team.",
    "endMessage": "Live chat has ended.",
    "nameLabel": "Your name",
    "emailLabel": "Email",
    "schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
    "outOfHoursMessage": "We are currently offline.",
    "closeModalMessage": "End the live chat session?",
    "closeModalConfirmLabel": "Yes, end",
    "closeModalCancelLabel": "Cancel",
    "closeModalTooltipText": "End live chat",
    "operatorHasJoinedLabel": "An agent has joined.",
    "operatorDidNotJoinInTimeLabel": "No agent available right now.",
    "waitingForOperatorToJoinLabel": "Waiting for an agent...",
    "waitingForOperatorSeconds": 60,
    "redirectToHumanSupportForm": true
  },
  "consent": {
    "newConversationRequirePolicyAccept": false,
    "humanSupportRequirePolicyAccept": false,
    "leadCollectionRequirePolicyAccept": true,
    "liveChatRequirePolicyAccept": false,
    "newConversationConsentDescription": "By starting a conversation you agree to our terms.",
    "privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
  },
  "whiteLabel": {
    "hideRoboAssistLogo": false,
    "whitelabelLogoLink": "https://acme.com",
    "assignToCustomDomain": false,
    "whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
  },
  "security": {
    "allowedDomains": "acme.com,support.acme.com",
    "spamFilterEnabled": true,
    "talkMessagesRateLimit": 30,
    "talkMessagesRateLimitDurationSeconds": 60,
    "talkMessagesRateLimitHitMessage": "Please slow down."
  },
  "advanced": {
    "model": "5",
    "temperature": 0.2,
    "chatContextSize": 32000,
    "botMessagesLimit": 2000,
    "internalLocale": "en_US",
    "productsViewEnabled": false
  },
  "meta": {
    "id": 4287,
    "createdAt": "2026-06-01T10:11:02Z",
    "updatedAt": "2026-06-01T12:45:08Z"
  }
}

GET /v1/usage

Διαβάστε την τρέχουσα χρήση συνδρομής για τον λογαριασμό στον οποίο ανήκει το κλειδί Management.

Σώμα απόκρισης (200)

{
  "subscriptionType": "standard",
  "messages": {"used": 4123, "limit": 11000, "remaining": 6877},
  "bots": {"used": 3, "limit": 5, "remaining": 2}
}
  • Το subscriptionType είναι ένα αναγνωριστικό με πεζά γράμματα του τρέχοντος πλάνου του λογαριασμού (π.χ. standard στο παράδειγμα). Τα πλάνα προέρχονται από έναν δυναμικό κατάλογο, επομένως το ακριβές σύνολο αναγνωριστικών μπορεί να αλλάξει με την πάροδο του χρόνου καθώς τα πλάνα μετονομάζονται ή προστίθενται νέα - αντιμετωπίστε το ως μια αδιαφανή συμβολοσειρά (opaque string) και όχι ως σταθερό enum.
  • Τα πεδία messages.used / limit / remaining αντιπροσωπεύουν τα credits μηνυμάτων της τρέχουσας περιόδου χρέωσης.
  • Τα πεδία bots.used / limit / remaining μετρούν τα ενεργά bot σε σχέση με το όριο bot του λογαριασμού σας.

Επικεφαλίδες ορίων ρυθμού (rate limit headers)

Οι αποκρίσεις που φτάνουν στο στάδιο του ορίου ρυθμού (δηλ. πέρασαν επιτυχώς ο έλεγχος ταυτότητας και η λίστα επιτρεπόμενων IP) περιλαμβάνουν:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
  • X-RateLimit-Limit - το ανώτατο όριο ανά κλειδί που εφαρμόστηκε πραγματικά σε αυτήν την κλήση (10 από προεπιλογή, ή το ρυθμισμένο σας rateLimitPerMinute εάν είναι χαμηλότερο).
  • X-RateLimit-Remaining - τα διακριτικά (tokens) που απομένουν στον κάδο αμέσως μετά από αυτήν την κλήση.
  • X-RateLimit-Reset - δευτερόλεπτα εποχής Unix (Unix epoch seconds) κατά τα οποία γίνεται διαθέσιμο το επόμενο διακριτικό (όχι πλήρης επαναφορά του κάδου - ο κάδος γεμίζει συνεχώς). Όταν ο κάδος είναι γεμάτος, αυτή είναι η τρέχουσα ώρα.

Στις αποκρίσεις 429 rate_limit_exceeded, ορίζεται επίσης η επικεφαλίδα Retry-After, εκφρασμένη σε ακέραια δευτερόλεπτα μέχρι να απελευθερωθεί τουλάχιστον ένα διακριτικό.

Τα σφάλματα πριν από τον έλεγχο ταυτότητας (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) και το 403 ip_not_whitelisted δεν φέρουν τις επικεφαλίδες X-RateLimit-* - ο περιοριστής ρυθμού ελέγχεται μόνο αφού επιτύχουν ο έλεγχος ταυτότητας και οι έλεγχοι IP.

Μορφή σφαλμάτων

Το ίδιο περίβλημα (envelope) με το Bot Talk API:

{
  "error": {
    "type": "permission_error",
    "code": "key_type_not_allowed",
    "message": "This endpoint requires a MANAGEMENT API key.",
    "param": null
  }
}

Τα σφάλματα επικύρωσης χρησιμοποιούν το code: "invalid_parameter" και προσθέτουν τη διαδρομή του πεδίου που απέτυχε στην αρχή του μηνύματος, ώστε να είναι εύκολος ο εντοπισμός του προβληματικού τμήματος:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
  }
}

Οι μη έγκυρες τιμές για πεδία τύπου enum / κλειστού συνόλου (π.χ. chatMemory.clientSummaryPromptType = "BOGUS") περιλαμβάνουν τη διαδρομή του πεδίου, την τιμή που απορρίφθηκε και τη λίστα των επιτρεπόμενων τιμών:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
  }
}

Σχετικά

Για τελικά σημεία συνομιλιών και ροή SSE, δείτε το Bot Talk API.