Κέντρο βοήθειας
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

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

Πρώτα βήματα

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

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

Ταυτοποίηση

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 και το ανώτατο όριο μειώνεται, ενώ ο ρυθμός αναπλήρωσης προσαρμόζεται αναλόγως.

Δικαιώματα

Κάθε κλειδί 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 (Ρυθμίσεις bot) της εφαρμογής διαχείρισης, επομένως τα κλειδιά JSON και οι ορατές καρτέλες ευθυγραμμίζονται: εάν αλλάξετε το consent.humanSupportRequirePolicyAccept μέσω του API, θα δείτε τον ίδιο διακόπτη να αλλάζει θέση στην καρτέλα Consent & Privacy (Συγκατάθεση και απόρρητο) στην εφαρμογή διαχείρισης.

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

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

Η πλευρική γραμμή Bot Settings διαθέτει επί του παρόντος 16 υποκαρτέλες και οι 13 από αυτές αντιστοιχούν στις παραπάνω ενότητες. Οι τρεις υποκαρτέλες χωρίς αντίστοιχη ενότητα είναι οι Flow, Actions και Forms - και οι τρεις καλύπτονται παρακάτω στην ενότητα «Εκτός πεδίου εφαρμογής του 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 για να κατεβάσετε τα byte. Για να το αλλάξετε, ανεβάστε ένα νέο αρχείο μέσω του 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 ρόλου και προσθέτει τη σταθερή καθοδήγηση μήκους απάντησης της πλατφόρμας. Αυτό είναι ξεχωριστό από το role.responseLength: η προαιρετική ρύθμιση Concise/Normal/Detailed δεν εισάγεται για ρόλο CUSTOM. Ομοίως, τα language, websiteAddress και companyDescription αποθηκεύονται αλλά δεν εισάγονται σε αυτό το prompt ρόλου. Συμπεριλάβετε εσείς οι ίδιοι στο rawPrompt οποιαδήποτε επιθυμητή γλώσσα, στόχο μήκους απάντησης ή περιβάλλον εταιρείας. Μπορούν επίσης να παρασχεθούν πρόσθετες οδηγίες χρόνου εκτέλεσης και ανακτημένο context, επομένως το rawPrompt δεν αποτελεί τη μοναδική είσοδο του μοντέλου. Οι οδηγίες τόνου του προκαθορισμένου ρόλου δεν προστίθενται, αλλά η επιλογή του CUSTOM δεν καταργεί όλες τις οδηγίες της πλατφόρμας.

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

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

Τα πεδία enum και περιορισμένων τιμών απορρίπτουν μη έγκυρες τιμές με 400 invalid_parameter. Άλλα πεδία είναι απλά string, ακόμη και εκεί όπου το UI προσφέρει μια σταθερή λίστα. Χρησιμοποιήστε την τεκμηριωμένη ορθογραφία και επικυρώστε το payload σας αντί να υποθέτετε ότι κάθε μη υποστηριζόμενο string θα απορριφθεί.

  • 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» παρακάτω. Πρόκειται για string και όχι για επικυρωμένο enum στο σχήμα του αιτήματος. Χρησιμοποιήστε μια υποστηριζόμενη τιμή και όχι ένα τυχαίο όνομα μοντέλου.
  • advanced.chatContextSize - χρησιμοποιήστε 8000, 16000 ή 32000, αντίστοιχα με το περιβάλλον χρήστη. Τιμές υψηλότερες από το μέγιστο όριο του λογαριασμού περιορίζονται σιωπηρά στο ανώτατο επιτρεπτό όριο. Το DTO δεν επιβάλλει αυστηρά αυτό το σύνολο των τριών τιμών.
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified, pill
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - διακόπτης boolean. Το true υποχρεώνει τον χρήστη να συμπληρώσει τη φόρμα lead πριν ξεκινήσει μια συνομιλία. Το false επιτρέπει στο AI να αποφασίσει πότε θα εμφανίσει τη φόρμα (προεπιλογή).

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

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

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

  • chatMemory.summariesToKnowledgeRatio - ακέραιο ποσοστό, 10-90. Το περιβάλλον χρήστη χρησιμοποιεί βήματα του 10, αλλά το API δέχεται οποιονδήποτε ακέραιο εντός του εύρους. Προεπιλογή 50. Με ενεργοποιημένη τη μνήμη και context μεγαλύτερο από 8k, κατανέμει τον προϋπολογισμό γνώσης και μνήμης μετά τη δέσμευση για το prompt και την πρόσφατη συνομιλία, και όχι ολόκληρο το context του μοντέλου. Στα 8k δεν διατίθεται προϋπολογισμός σύνοψης από αυτήν τη ρύθμιση.

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

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

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

    "{\"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 και η προώθηση σε live chat καταστέλλεται. Η επικύρωση της εσωτερικής δομής εκτελείται μόνο στην πλευρά του πελάτη στην εφαρμογή διαχείρισης - κακοσχηματισμένο JSON ή μη αναγνωρισμένα κλειδιά γίνονται δεκτά από το API απλώς ως string και θα εμφανιστούν ως σφάλμα απόδοσης όταν ένας διαχειριστής ανοίξει αργότερα το bot στην εφαρμογή. Επικυρώστε τη δομή από την πλευρά σας πριν από την αποστολή.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - σύντομες ετικέτες που εμφανίζονται στα στοιχεία ελέγχου αξιολόγησης συνομιλίας 👍 / 👎 όταν conversation.conversationRatingEnabled=true. Το προεπιλεγμένο κείμενο είναι «Μου αρέσει η απάντηση» / «Δεν μου αρέσει η απάντηση». Ορατό στους τελικούς χρήστες.

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

  • 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 για να απενεργοποιήσετε αυτό το όριο βάσει συνεδρίας. Όταν το ενεργοποιείτε, καταχωρίστε μια θετική διάρκεια. Το backend επιβάλλει N μηνύματα ανά συνεδρία ανά διάρκεια σε δευτερόλεπτα πριν εμφανίσει το security.talkMessagesRateLimitHitMessage στον επισκέπτη.

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

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

Χρησιμοποιήστε το ακριβές αναγνωριστικό μοντέλου που επιστρέφεται στο advanced.model κατά την ανάγνωση ενός bot που έχει διαμορφωθεί με το επιθυμητό μοντέλο στο Settings > Model & Advanced (Ρυθμίσεις > Μοντέλο και προηγμένες ρυθμίσεις). Η τρέχουσα προεπιλογή κατά τη δημιουργία είναι 5.6-LUNA. Τα αναγνωριστικά έχουν διάκριση πεζών-κεφαλαίων και διαφέρουν από τα ονόματα εμφάνισης. Για παράδειγμα, το 5.6-LUNA εμφανίζεται ως GPT 5.6-luna.

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

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

Οι υποστηριζόμενες ενότητες και τα πεδία, μαζί με τους τύπους τους και τους σημαντικούς περιορισμούς. Σημασιολογία 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 (βλ. "Role and prompt construction")
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, εμφανίζει στοιχεία ελέγχου αξιολόγησης συνομιλίας με θετική/αρνητική ψήφο
positiveRatingTooltip string Επεξήγηση εργαλείου (tooltip) στο κουμπί θετικής αξιολόγησης
negativeRatingTooltip string Επεξήγηση εργαλείου στο κουμπί αρνητικής αξιολόγησης
suggestedQuestions string Προτεινόμενες ερωτήσεις / εναρκτήριες φράσεις συνομιλίας διαχωρισμένες με νέα γραμμή
dynamicSuggestedFollowups boolean Αν είναι true, το AI προτείνει συμπληρωματικές ερωτήσεις μετά από κάθε απάντηση
positiveRatingMessage string Μήνυμα που εμφανίζεται μετά από θετικά σχόλια
negativeRatingMessage string Μήνυμα που εμφανίζεται μετά από αρνητικά σχόλια
hideSuggestedQuestionsAfterFirstUse boolean Απόκρυψη στατικών προτάσεων μετά τη χρήση
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 (βήμα UI 10) % του διαθέσιμου προϋπολογισμού γνώσης/μνήμης που εκχωρείται σε περιλήψεις σε περιβάλλοντα άνω των 8k

§ appearance

Πεδίο Τύπος Περιορισμός Περιγραφή
launcherLabelLine1 string έως 60 χαρακτήρες Πρώτη γραμμή κειμένου του launcher
launcherLabelLine2 string έως 60 χαρακτήρες Δεύτερη γραμμή κειμένου του launcher
launcherTextColor string Χρώμα κειμένου του launcher
launcherDismissEnabled boolean Επιτρέπει την παράβλεψη του launcher
widgetFontFamily string inter, system, nunito, lato, montserrat, poppins, source-serif, jetbrains-mono Οικογένεια γραμματοσειράς του widget
chatDrawerEnabled boolean Ενεργοποίηση παρουσίασης συρταριού (drawer)
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 Σύντομο κείμενο που εμφανίζεται κάτω από τον τίτλο της συνομιλίας
senderPlaceholder string Κείμενο υποδοχής (placeholder) στο πεδίο εισαγωγής μηνύματος
resetConversationTooltip string Επεξήγηση εργαλείου στο κουμπί "επαναφορά συνομιλίας"
chatAlignment string (enum) ∈ {left, right} Σε ποια πλευρά της οθόνης αγκιστρώνεται η συνομιλία
launcherBottomMargin int 0-500 Απόσταση του launcher από το κάτω άκρο (px)
launcherSideMargin int 0-500 Απόσταση του launcher από το πλευρικό άκρο (px)
displayShadow boolean Σκίαση κάτω από το widget
customCss string Ακατέργαστο CSS που εισάγεται στο iframe του widget
chatMessageLinkTarget string (enum) ∈ {_blank, _self} Πώς ανοίγουν οι σύνδεσμοι μέσα στα μηνύματα του bot
minimizedDisplayMode string (enum) ∈ {icon, minified, pill} Ελαχιστοποιημένη κατάσταση: εικονίδιο εκκίνησης, συμπαγής γραμμή αποστολέα ή κάψουλα (pill)
chatDesktopWidthPx int Πλάτος widget σε υπολογιστή
chatDesktopHeightPx int Ύψος widget σε υπολογιστή
chatMobileSizePercent int Μέγεθος widget σε κινητά ως % της περιοχής προβολής
messageFontSize int Μέγεθος γραμματοσειράς κειμένου μηνύματος (px)
showChatbotBubblesDesktop boolean Εμφάνιση των αναδυόμενων πλαισίων προτροπής σε υπολογιστή
showChatbotBubblesMobile boolean Εμφάνιση των αναδυόμενων πλαισίων προτροπής σε κινητά
chatbotBubblesDelaySeconds int Καθυστέρηση πριν από την εμφάνιση των πλαισίων προτροπής (δευτερόλεπτα)
launcherIconFullSize boolean Απόδοση του προσαρμοσμένου εικονιδίου εκκίνησης από άκρη σε άκρη αντί με περιθώριο
welcomeScreenEnabled boolean Εμφάνιση της οθόνης Welcome Screen αντί για απευθείας μετάβαση στη συνομιλία
welcomeScreenQuestionsLabel string Ετικέτα πάνω από τις προτεινόμενες ερωτήσεις στην οθόνη καλωσορίσματος
welcomeScreenHideHumanContactForm boolean Απόκρυψη της ενέργειας φόρμας επικοινωνίας με εκπρόσωπο στην κεφαλίδα κατά την εμφάνιση της Welcome Screen. Επανεμφανίζεται μετά το πρώτο μήνυμα του επισκέπτη. Για bot που δημιουργήθηκαν πριν από τις 2026-09-02, η προεπιλογή είναι true
welcomeScreenHideLiveChat boolean Απόκρυψη της ενέργειας ζωντανής συνομιλίας στην κεφαλίδα κατά την εμφάνιση της Welcome Screen. Επανεμφανίζεται μετά το πρώτο μήνυμα του επισκέπτη. Για bot που δημιουργήθηκαν πριν από τις 2026-09-02, η προεπιλογή είναι true
headerActionsLayout string ICONS ή DROPDOWN Πώς προσφέρονται το Live Chat και η φόρμα επικοινωνίας με εκπρόσωπο στην κεφαλίδα συνομιλίας: ICONS (ξεχωριστό εικονίδιο για το καθένα) ή DROPDOWN (ομαδοποιημένα στο μενού κεφαλίδας). Για bot που δημιουργήθηκαν πριν από τις 2026-09-02, η προεπιλογή είναι 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. Για να το αλλάξετε, κάντε μεταφόρτωση μέσω του multipart τμήματος avatar

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

§ humanSupport

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

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

§ leadCollection

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

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

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

§ 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 - δείτε το "Structured fields and ranges" για την ακριβή μορφή
outOfHoursMessage string Μήνυμα που εμφανίζεται όταν το πρόγραμμα υποδεικνύει ότι είμαστε εκτός ωραρίου
closeModalMessage string Τίτλος του αναδυόμενου παραθύρου "κλείσιμο live chat;"
closeModalConfirmLabel string Ετικέτα κουμπιού επιβεβαίωσης στο παράθυρο κλεισίματος
closeModalCancelLabel string Ετικέτα κουμπιού ακύρωσης στο παράθυρο κλεισίματος
closeModalTooltipText string Επεξήγηση εργαλείου στο στοιχείο κλεισίματος συνομιλίας
operatorHasJoinedLabel string Ετικέτα που εμφανίζεται όταν συνδέεται ένας χειριστής
operatorDidNotJoinInTimeLabel string Ετικέτα που εμφανίζεται όταν δεν συνδέεται κανένας χειριστής εντός του χρονικού ορίου
waitingForOperatorToJoinLabel string Ετικέτα που εμφανίζεται κατά την αναμονή για χειριστή
waitingForOperatorSeconds int Χρονικό όριο αναμονής για απάντηση από χειριστή (δευτερόλεπτα)
redirectToHumanSupportForm boolean Αν είναι true, γίνεται ανακατεύθυνση στη φόρμα Human Support όταν δεν απαντά κανένας χειριστής
requireAdminOnline boolean Απαίτηση διαθεσιμότητας χειριστή σύμφωνα με τις ρυθμίσεις παρουσίας
presenceMode string Λειτουργία παρουσίας. Χρησιμοποιήστε την τιμή από ένα bot που έχει ρυθμιστεί στη διεπαφή χρήστη
hideHumanSupportWhenLiveChatAvailable boolean Απόκρυψη της φόρμας επικοινωνίας όταν το live chat είναι διαθέσιμο
missedEmailEnabled boolean προεπιλογή true Αποστολή email στον κάτοχο του bot όταν ένα αίτημα live chat έμεινε αναπάντητο. Σε παλαιότερα bot παραμένει μη ορισμένο, το οποίο εκλαμβάνεται ως ενεργοποιημένο

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

§ consent

Πεδίο Τύπος Περιορισμός Περιγραφή
newConversationRequirePolicyAccept boolean Απαίτηση αποδοχής της πολιτικής απορρήτου πριν από την έναρξη νέας συνομιλίας
humanSupportRequirePolicyAccept boolean Απαίτηση αποδοχής της πολιτικής απορρήτου πριν από την υποβολή της φόρμας υποστήριξης από εκπρόσωπο
leadCollectionRequirePolicyAccept boolean Απαίτηση αποδοχής της πολιτικής απορρήτου πριν από την υποβολή της φόρμας συλλογής leads
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. Για να το αλλάξετε, κάντε μεταφόρτωση μέσω του multipart τμήματος whitelabel_logo

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

§ security

Πεδίο Τύπος Περιορισμός Περιγραφή
allowedDomains string Λίστα τομέων διαχωρισμένων με κόμμα στους οποίους επιτρέπεται η ενσωμάτωση του widget (κενό = καμία λίστα επιτρεπόμενων)
spamFilterEnabled boolean Ενεργοποίηση του φίλτρου ανεπιθύμητων μηνυμάτων ανά 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 ή FIXED_LIST Πώς επιλέγει το bot τη γλώσσα απάντησης
baseLanguage string κωδικός γλώσσας Γλώσσα στην οποία είναι γραμμένα τα βασικά κείμενα του bot
languages string κωδικοί γλωσσών διαχωρισμένοι με κόμμα Γλώσσες που προσφέρονται στον επισκέπτη
knowledgeLanguageMode string NONE, MAIN ή DYNAMIC Πώς αντιμετωπίζονται οι γνώσεις σε άλλες γλώσσες
knowledgeLanguageFallback string κωδικός γλώσσας Γλώσσα που χρησιμοποιείται όταν δεν βρίσκεται αντιστοιχία

§ advanced

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

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

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

  • Εκπαίδευση και διαγραφή - αυτά τα τελικά σημεία δεν εμφανίζουν λίστα με όλα τα bot, δεν διαχειρίζονται σύνολα δεδομένων εκπαίδευσης ούτε διαγράφουν bot. Χρησιμοποιήστε την εφαρμογή για αυτές τις ροές εργασίας.
  • Καρτέλα Flow - το οπτικό εργαλείο Flow Editor (επεξεργαστής ροής συνομιλίας) για στάδια και μεταβάσεις. Δεν εκτίθεται μέσω του Management API.
  • Καρτέλα Actions - διαχειριζόμενες ενσωματώσεις ηλεκτρονικού εμπορίου / κρατήσεων, AI Search και προσαρμοσμένες συναρτήσεις API. Η κλήση εργαλείων (tool calling) δεν αποτέλεσε ποτέ μέρος του 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-Types) - επιλέξτε όποιον σας εξυπηρετεί καλύτερα.

Λειτουργία 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 Label)

Μόνο το πεδίο 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.6-LUNA",
    "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 περιορίζεται αυτόματα στο μέγιστο μέγεθος πλαισίου (context size) που υποστηρίζει ο λογαριασμός. Μην υποθέτετε ότι άλλα αριθμητικά πεδία περιορίζονται αυτόματα.

Τα πεδία των οποίων η τιμή είναι 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.6-LUNA",
    "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 Talk key) που συνδέεται με το νέο 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) - με ρίζα το ίδιο σχήμα + host + διαδρομή πλαισίου (context path) που εξυπηρέτησε αυτό το αίτημα. Ανακτήστε τα δεδομένα πραγματοποιώντας απευθείας αίτημα 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.6-LUNA",
    "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. Αφαιρέστε το ανώτατου επιπέδου μπλοκ meta. Το αντικείμενο meta (id, createdAt, updatedAt) διαχειρίζεται από τον διακομιστή και είναι μόνο για ανάγνωση - αν το αφήσετε στο σώμα του POST δεν δημιουργείται πρόβλημα (ο διακομιστής το αγνοεί), αλλά η αφαίρεσή του καθιστά την πρόθεση σαφή και διατηρεί το payload καθαρό. Προαιρετικά, επεξεργαστείτε το name ώστε ο κλώνος να ξεχωρίζει από την πηγή.

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 επιστρέφεται μόνο σε αυτήν την απόκριση δημιουργίας - αντιγράψτε το πριν απορρίψετε το σώμα της απόκρισης - δεν είναι δυνατή η ανάκτησή του αργότερα.

Αυτό αντιγράφει τις υποστηριζόμενες ρυθμίσεις, όχι ένα πλήρως εκπαιδευμένο chatbot. Το περιεχόμενο εκπαίδευσης, το ιστορικό συνομιλιών, οι ενσωματώσεις/ενέργειες, το Flow και οι ορισμοί φορμών δεν κλωνοποιούνται από αυτά τα τελικά σημεία. Διαμορφώστε τα ξεχωριστά στην εφαρμογή.

Πρόσθετες επισημάνσεις:

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

Και τα τρία μέρη είναι προαιρετικά στο 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, συμπεριλαμβανομένου του μπλοκ 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": "your-plan-id",
  "messages": {"used": 4123, "limit": 11000, "remaining": 6877},
  "bots": {"used": 3, "limit": 5, "remaining": 2}
}
  • Το subscriptionType είναι ένα αναγνωριστικό με πεζά γράμματα του τρέχοντος πλάνου του λογαριασμού (το your-plan-id είναι ένα ενδεικτικό σύμβολο κράτησης θέσης). Τα πλάνα προέρχονται από έναν δυναμικό κατάλογο, επομένως το ακριβές σύνολο αναγνωριστικών μπορεί να αλλάξει με την πάροδο του χρόνου καθώς τα πλάνα μετονομάζονται ή προστίθενται - αντιμετωπίστε το ως μια αδιαφανή συμβολοσειρά και όχι ως σταθερό enum.
  • Τα messages.used / limit / remaining είναι τα μηνιαία credits μηνυμάτων του τρέχοντος ημερολογιακού μήνα, τα οποία μηδενίζονται την πρώτη ημέρα του μήνα και όχι την ημέρα ανανέωσης της συνδρομής. Υπολογίζονται βάσει credits και δεν αποτελούν απλό αριθμό απαντήσεων.
  • Τα bots.used / limit / remaining μετρούν τα bot που κατέχετε, συμπεριλαμβανομένων των bots σε παύση, σε σχέση με το συνολικό όριο bots του λογαριασμού σας.

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

Οι απαντήσεις που φτάνουν στο στάδιο ελέγχου του rate limit (δηλαδή αφού περάσουν επιτυχώς τον έλεγχο ταυτότητας και την IP whitelist) περιλαμβάνουν:

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

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

Τα σφάλματα πριν τον έλεγχο ταυτότητας (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
  }
}

Τα σφάλματα επικύρωσης (validation errors) χρησιμοποιούν την τιμή 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"
  }
}

Σχετικά θέματα

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