Ένα μικρό σύνολο εργαλείων HTTP που μπορεί να καλεί οποιοδήποτε σύστημα — AI τηλεφωνική γραμματεία, chatbot, το δικό σας website ή άλλο λογισμικό — για να απαντά σε ερωτήσεις για μια επιχείρηση, να βρίσκει ελεύθερες ώρες και να κλείνει, να μεταφέρει ή να ακυρώνει ραντεβού, με κάθε κανόνα που έχει ορίσει η επιχείρηση στο Prebook να εφαρμόζεται αυτόματα.
Για επιχειρήσεις: αν χρησιμοποιείτε (ή θέλετε) AI τηλεφωνική γραμματεία, chatbot ή δικό σας website, μπορούν να κλείνουν ραντεβού κατευθείαν στο ημερολόγιο του Prebook σας. Δημιουργήστε κλειδί στις Ρυθμίσεις → Συνδέσεις & API (πακέτα Pro και Business) και δώστε το στον πάροχό σας.
Base URL https://management.prebook.gr/api/agent/v1JSON μέσω HTTPSΏρα Ελλάδας (Europe/Athens)17 εργαλεία
Επισκόπηση
Το Prebook είναι πλατφόρμα κρατήσεων για ελληνικές επιχειρήσεις — ιατρεία, κομμωτήρια, studios, γυμναστήρια, γήπεδα. Το Prebook API επιτρέπει σε οποιοδήποτε σύστημα να δουλεύει πάνω στο ημερολόγιο Prebook της επιχείρησης αντί να κρατά δικό του: διαθεσιμότητα, προσωπικό, ημέρες κλεισίματος και πολιτικές έρχονται πάντα από το Prebook, και τα ραντεβού καταλήγουν στο ίδιο ημερολόγιο που ήδη χρησιμοποιούν η επιχείρηση και οι πελάτες της.
Τι μπορείτε να συνδέσετε
AI τηλεφωνική γραμματεία
Ο φωνητικός βοηθός απαντά στο τηλέφωνο της επιχείρησης και κλείνει ραντεβού στο ημερολόγιο του Prebook.
Chatbot
Στο site της επιχείρησης ή στα κανάλια μηνυμάτων της: απαντά σε ερωτήσεις, βρίσκει ώρα και κλείνει το ραντεβού μέσα στη συνομιλία.
Το δικό σας website
Δικό σας πρόγραμμα κρατήσεων ή φόρμα στο site, που κλείνει μέσω του server σας στο ίδιο ημερολόγιο.
Άλλο λογισμικό
CRM, εσωτερικά εργαλεία ή αυτοματισμοί που χρειάζονται ωράριο, διαθεσιμότητα ή κλείσιμο ραντεβού.
Ο αριθμός τηλεφώνου είναι η ταυτότητα του πελάτη. Για να δείτε, να μεταφέρετε ή να ακυρώσετε ραντεβού, για συνδρομές, και για κάθε εγγραφή σε μάθημα ή λίστα αναμονής, ο αριθμός πρέπει να είναι επαληθευμένος από το κανάλι (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικός σας κωδικός SMS) — ποτέ αριθμός που απλώς πληκτρολόγησε ο επισκέπτης ενός site.
Όλες οι συνδέσεις τρέχουν σε server. Το κλειδί δεν μπαίνει ποτέ σε browser ή εφαρμογή — ένα website καλεί το API μέσω του δικού του server.
Τι κάνει και τι όχι
Τι κάνει
Στοιχεία επιχείρησης, ωράριο, υπηρεσίες και τιμές
Ελεύθερες ώρες για ατομικά ραντεβού
Κλείσιμο, μεταφορά και ακύρωση των δικών του ραντεβού του πελάτη
Μήνυμα προς την επιχείρηση· SMS με σύνδεσμο κράτησης
Τι σκόπιμα δεν κάνει
Ομαδικά μαθήματα, σειρές μαθημάτων και λίστες αναμονής
Πληρωμές ή επιστροφές χρημάτων (τα ραντεβού μέσω API πληρώνονται στην επιχείρηση ή με πακέτο που ήδη έχει ο πελάτης)
Πώληση πακέτων, κρατήσεις πολλών υπηρεσιών ή επαναλαμβανόμενες
Οτιδήποτε για άλλους πελάτες
Για ό,τι είναι εκτός πεδίου, η σύνδεση στέλνει στον πελάτη SMS με σύνδεσμο κράτησης ή αφήνει μήνυμα στην επιχείρηση.
Πρόσβαση
Η πρόσβαση δίνεται ανά επιχείρηση. Κάθε επιχείρηση στο Prebook εκδίδει ένα κλειδί ανά σύνδεση (π.χ. ένα για την τηλεφωνική γραμματεία, ένα για το chatbot), ώστε να μπορεί να ανακαλέσει μία χωρίς να επηρεάσει τις άλλες. Κάθε ραντεβού και μήνυμα δείχνει στην επιχείρηση από ποια σύνδεση ήρθε.
Πώς παίρνετε κλειδί
Η επιχείρηση (σε πακέτο Pro ή Business) ανοίγει Ρυθμίσεις → Συνδέσεις & API και ενεργοποιεί τις συνδέσεις.
Πατά «Δημιουργία κλειδιού» με ένα όνομα για τη σύνδεση (π.χ. «AI τηλεφωνική γραμματεία»). Το όνομα εμφανίζεται σε κάθε ραντεβού που φέρνει η σύνδεση.
Το κλειδί εμφανίζεται μία φορά· η επιχείρηση το δίνει σε εσάς και εσείς το αποθηκεύετε στον server σας.
Από την ίδια οθόνη η επιχείρηση ανακαλεί ένα κλειδί ή απενεργοποιεί όλες τις συνδέσεις με ένα κλικ.
Ένα κλειδί λειτουργεί μόνο όσο η επιχείρηση: είναι ενεργή στο Prebook, είναι σε πακέτο Pro ή Business (ή στον δωρεάν πρώτο μήνα, που έχει όλες τις λειτουργίες του Pro), και έχει ενεργές τις «Συνδέσεις API». Κάθε κλειδί βλέπει μόνο τη δική του επιχείρηση και μόνο τους δικούς της πελάτες.
Τα κλειδιά έχουν τη μορφή pbk_<keyId>_<secret>. Το Prebook αποθηκεύει μόνο ένα hash του μυστικού μέρους, οπότε ένα χαμένο κλειδί δεν μπορεί να εμφανιστεί ξανά — ανακαλείται και αντικαθίσταται.
Τα κλειδιά είναι διαπιστευτήρια server-to-server. Ποτέ σε browser, σε εφαρμογή κινητού ή μέσα σε URL.
Αυθεντικοποίηση & όρια
Στείλτε το κλειδί σε κάθε αίτημα, με έναν από τους δύο τρόπους:
Headers
Authorization: Bearer pbk_<keyId>_<secret>
# ή
x-agent-key: pbk_<keyId>_<secret>
Το κλειδί ορίζει την επιχείρηση. Τα αιτήματα δεν αναφέρουν ποτέ επιχείρηση· πεδίο που δεν υπάρχει στο schema του εργαλείου απορρίπτεται.
120 αιτήματα το λεπτό ανά κλειδί, και ημερήσια όρια ανά κλειδί: 500 αναζητήσεις πελάτη (identifyCaller, listAppointments, getMySubscriptions, findClasses), 300 κρατήσεις/αλλαγές/ακυρώσεις/εγγραφές σε μαθήματα και λίστες αναμονής, 200 μηνύματα, 50 SMS. Πάνω από αυτά: 429 RATE_LIMITED. Χρειάζεστε περισσότερα; Γράψτε μας.
Κλειδί που λείπει, είναι λάθος ή έχει ανακληθεί: 401 UNAUTHORIZED. Επιχείρηση μη ενεργή στο Prebook: 403 SHOP_INACTIVE. Η επιχείρηση απενεργοποίησε τις συνδέσεις: 403 API_DISABLED. Η επιχείρηση δεν είναι πλέον σε Pro/Business: 403 PLAN_REQUIRED.
Κάθε κλήση καταγράφεται στο ιστορικό δραστηριότητας της επιχείρησης με το id του κλειδιού σας.
Συμβάσεις
Κάθε εργαλείο είναι POST https://management.prebook.gr/api/agent/v1/<tool> με JSON body. Το GET https://management.prebook.gr/api/agent/v1/tools επιστρέφει όλα τα schemas, και ως απλό REST και ως ορισμούς functions τύπου OpenAI.
Οι απαντήσεις είναι HTTP 200 με { "ok": true, … } ή { "ok": false, "code": …, "message": … }. Οι αρνήσεις είναι δεδομένα (οι πλατφόρμες AI δίνουν το body στο μοντέλο). Το message είναι στα ελληνικά και μπορεί να δοθεί αυτούσιο στον πελάτη.
Οι ημερομηνίες είναι YYYY-MM-DD και οι ώρες HH:mm, πάντα σε ώρα Ελλάδας (Europe/Athens). Κάθε ώρα και κάθε ραντεβού έχει επίσης ένα label, π.χ. «Τρίτη 06/10 στις 10:30», έτοιμο για τον πελάτη.
Το getShopInfo.today δίνει την τρέχουσα ημερομηνία και ημέρα στην Ελλάδα — χρησιμοποιήστε το για το «αύριο», «την Πέμπτη».
Ο πελάτης αναγνωρίζεται από το τηλέφωνό του, σε κάθε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Σε τηλεφωνική κλήση, δώστε την αναγνώριση κλήσης.
Αριθμοί και booleans που στέλνονται ως strings γίνονται δεκτοί ("20" → 20).
Ίδια για φωνή και chat· ένα website συνήθως χρειάζεται μόνο τα βήματα 3–5.
Καλέστε getShopInfo και identifyCaller (σε τηλεφωνική κλήση, με την αναγνώριση κλήσης και αφού ενημερώσετε ότι η κλήση καταγράφεται).
Απαντήστε σε ερωτήσεις από το getShopInfo (διεύθυνση, ωράριο, callerInfo) και το listServices (τιμές, διάρκειες, τι να φέρει).
Για ραντεβού: findAvailability για την υπηρεσία και πρόταση 2–3 από τις ώρες που επέστρεψε — ποτέ ώρα που δεν επέστρεψε.
Επιβεβαιώστε με τον πελάτη υπηρεσία, ημέρα, ώρα και όνομα. Με καθαρό «ναι», καλέστε bookAppointment.
Δείξτε ή πείτε το αποτέλεσμα. Αν το status είναι pending, πείτε ότι θα το επιβεβαιώσει η επιχείρηση.
Για αλλαγή ραντεβού: επιλέξτε το από το identifyCaller.upcoming και μετά rescheduleAppointment ή cancelAppointment (οι εκπρόθεσμες ακυρώσεις θέλουν ρητό «ναι»).
Οτιδήποτε άλλο, ή όταν ο πελάτης ζητά άνθρωπο: takeMessage. Για ό,τι γίνεται μόνο online: sendBookingLink.
Endpoints
POSTgetShopInfo/api/agent/v1/getShopInfo
Ό,τι μπορεί να ρωτήσει ένας πελάτης για την επιχείρηση.
Μία φορά, στην αρχή κάθε συνομιλίας. Το `today` λύνει το «αύριο», «την Τρίτη».
Ελεύθερες ώρες για μια υπηρεσία — οι μόνες ώρες που επιτρέπεται να προτείνετε.
Όποτε ο πελάτης ζητά ώρα. Προτείνετε 2–3 από τις ώρες που επιστράφηκαν κάθε φορά. Τα slots είναι δείγμα· όλες οι ελεύθερες ώρες κάθε ημέρας είναι στο freeTimes. Αν ο πελάτης πει συγκεκριμένη ώρα, στείλτε τη στο time: το requested.available λέει αν είναι ελεύθερη.
Πεδίο
Τύπος
Περιγραφή
serviceIdυποχρεωτικό
integer
Από το listServices.
dateFrom
YYYY-MM-DD
Προεπιλογή: σήμερα.
dateTo
YYYY-MM-DD
Προεπιλογή: dateFrom + 6 ημέρες, έως 14 ημέρες.
employeeId
integer
Μόνο αυτό το μέλος του προσωπικού.
partOfDay
morning | afternoon | evening
Πρωί < 12:00 ≤ μεσημέρι < 17:00 ≤ απόγευμα/βράδυ.
durationMinutes
integer
Μόνο για υπηρεσίες με ρυθμιζόμενη διάρκεια· μία από τις allowedDurations.
time
HH:mm
Η ώρα που ζήτησε ο πελάτης. Η απάντηση λέει αν είναι ελεύθερη (requested) και τα slots γίνονται οι πιο κοντινές ελεύθερες ώρες.
limit
integer
1–20, προεπιλογή 6. Οι ώρες μοιράζονται σε ημέρες και μέσα στην ημέρα (ή γύρω από το time).
Γνωρίζει η επιχείρηση αυτόν τον αριθμό; Μικρά ονόματα και τα δικά του επερχόμενα ραντεβού.
Νωρίς στη συνομιλία (σε κλήση, με την αναγνώριση κλήσης) — για να χαιρετήσετε τον πελάτη και να βρει το ραντεβού που θέλει να αλλάξει.
Πεδίο
Τύπος
Περιγραφή
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
Επερχόμενα ραντεβού ενός αριθμού (η ίδια λίστα με το identifyCaller.upcoming).
«Πότε είναι το ραντεβού μου;»
Πεδίο
Τύπος
Περιγραφή
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
Body αιτήματος
{
"phone": "6941234567"
}
Απάντηση
{
"ok": true,
"appointments": [
"…ίδια μορφή με το identifyCaller.upcoming…"
]
}
Τα πακέτα / οι συνδρομές του ίδιου του καλούντος: τι καλύπτουν, πόσες συνεδρίες μένουν, πότε λήγουν, πότε χρησιμοποιήθηκαν, αν ανανεώνονται αυτόματα, πόσες ακυρώσεις εκτός προθεσμίας χαρίζονται ακόμα.
«Έχω συνδρομή;», «Πόσες μου μένουν;», «Πότε λήγει;», «Τι καλύπτει;», «Με καλύπτει για…;» (με serviceId και date). Μόνο με επαληθευμένο αριθμό. Δεν αναφέρει ποτέ οφειλές.
Πεδίο
Τύπος
Περιγραφή
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
serviceId
integer
Προαιρετικό: καλύπτει η συνδρομή αυτή την υπηρεσία;
date
string
Προαιρετικό, μαζί με serviceId: η μέρα του ραντεβού (YYYY-MM-DD, προεπιλογή σήμερα).
Οι ημερομηνίες μαθημάτων / ομαδικών που μπορεί να κλείσει ο ίδιος ο πελάτης, όπως τις βλέπει στο δικό του ημερολόγιο (χωρίς κλειδωμένες ή άλλου επιπέδου).
«Έχετε θέση στο pilates την Πέμπτη;» Με επαληθευμένο αριθμό. Έως 14 ημέρες ανά αναζήτηση.
Πεδίο
Τύπος
Περιγραφή
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
name
string
Μικρό όνομα, όταν ο αριθμός έχει πολλά ονόματα (needsName).
serviceId
integer
Μόνο αυτό το μάθημα (kind: class στο listServices).
Γράφει τον πελάτη σε ΜΙΑ ημερομηνία μαθήματος — ποτέ σε όλη τη σειρά. Ίδιοι κανόνες με την εφαρμογή (θέσεις, επίπεδα, προθεσμίες, πακέτα, ίδια ώρα, έγκριση).
Μόνο για sessionId με canJoin από το findClasses, αφού επιβεβαιώσετε μάθημα, ημέρα, ώρα και όνομα. Ασφαλές να ξανασταλεί: η ίδια εγγραφή επιστρέφεται με alreadyEnrolled. SESSION_FULL → joinWaitingList.
Πεδίο
Τύπος
Περιγραφή
sessionIdυποχρεωτικό
integer
Από το findClasses.
nameυποχρεωτικό
string
Μικρό όνομα.
surname
string
Επώνυμο.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
Βάζει τον πελάτη στη λίστα αναμονής μιας ΠΛΗΡΟΥΣ ημερομηνίας μαθήματος.
Όταν το findClasses δίνει canJoinWaitingList. Όποιος δεν έχει εφαρμογή ούτε email ειδοποιείται με SMS όταν ελευθερωθεί θέση.
Πεδίο
Τύπος
Περιγραφή
sessionIdυποχρεωτικό
integer
Από το findClasses.
nameυποχρεωτικό
string
Μικρό όνομα.
surname
string
Επώνυμο.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
Βγάζει τον πελάτη από τη λίστα αναμονής μιας ημερομηνίας μαθήματος.
«Δεν χρειάζεται πια, βγάλτε με από την αναμονή.» (identifyCaller.waitingLists)
Πεδίο
Τύπος
Περιγραφή
sessionIdυποχρεωτικό
integer
Από το identifyCaller.waitingLists.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
Body αιτήματος
{
"sessionId": 16990,
"phone": "6941234567"
}
Απάντηση
{
"ok": true,
"sessionId": 16990,
"title": "Reformer Pilates",
"label": "Παρασκευή 09/10 στις 19:00",
"removed": 1,
"message": "Αφαιρεθήκατε από τη λίστα αναμονής."
}
Πιθανοί κωδικοί:NOT_FOUND
POSTbookAppointment/api/agent/v1/bookAppointment
Κλείνει μια ώρα που επέστρεψε το findAvailability.
Μόνο αφού επιβεβαιώσετε με τον πελάτη υπηρεσία, ημέρα, ώρα και όνομα και πάρετε καθαρό «ναι». Μπορείτε να το ξαναστείλετε με ασφάλεια: αν η ίδια κράτηση υπάρχει ήδη (π.χ. ο agent διέκοψε και επανέλαβε την κλήση), επιστρέφεται με alreadyBooked: true αντί για SLOT_TAKEN.
Πεδίο
Τύπος
Περιγραφή
serviceIdυποχρεωτικό
integer
Από το listServices.
dateυποχρεωτικό
YYYY-MM-DD
Από την ώρα που επιλέχθηκε.
timeυποχρεωτικό
HH:mm
Από την ώρα που επιλέχθηκε.
employeeId
integer
Από την ώρα που επιλέχθηκε.
durationMinutes
integer
Μόνο για υπηρεσίες με ρυθμιζόμενη διάρκεια.
nameυποχρεωτικό
string
Μικρό όνομα του πελάτη.
surname
string
Επώνυμο του πελάτη.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
comment
string
Σύντομη σημείωση για την επιχείρηση (≤300 χαρακτήρες). Όχι ιατρικές λεπτομέρειες πέρα από όσα πει ο ίδιος ο πελάτης.
Μεταφέρει ένα από τα δικά του επερχόμενα ραντεβού του πελάτη σε άλλη ελεύθερη ώρα.
Αφού επιβεβαιώσετε τη νέα ημέρα και ώρα. Κρατά το ίδιο μέλος του προσωπικού, εκτός αν δοθεί employeeId.
Πεδίο
Τύπος
Περιγραφή
appointmentIdυποχρεωτικό
integer
Από το identifyCaller / listAppointments.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
Ακυρώνει ένα από τα δικά του επερχόμενα ραντεβού του πελάτη — ή ΜΙΑ ημερομηνία μαθήματος (ποτέ όλη τη σειρά).
Αφού επιβεβαιώσετε ποιο ραντεβού. Για μάθημα ισχύουν οι ίδιοι κανόνες ακύρωσης με την εφαρμογή και η λίστα αναμονής προχωρά. Σε CONFIRMATION_REQUIRED, διαβάστε την πολιτική και καλέστε ξανά με confirmLateCancel μόνο μετά από ρητό «ναι».
Πεδίο
Τύπος
Περιγραφή
appointmentIdυποχρεωτικό
integer
Από το identifyCaller / listAppointments.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
confirmLateCancel
boolean
Ο πελάτης αποδέχτηκε την πολιτική εκπρόθεσμης ακύρωσης.
Body αιτήματος
{
"appointmentId": 31511,
"phone": "6941234567"
}
Απάντηση
{
"ok": false,
"code": "CONFIRMATION_REQUIRED",
"message": "Η ακύρωση γίνεται λιγότερο από 24 ώρες πριν το ραντεβού και μπορεί να χρεωθεί. Θέλετε σίγουρα να ακυρωθεί;",
"noticeMinutes": 1440,
"mode": "forfeit"
}
Προσθέτει σημείωση σε ένα από τα δικά του επερχόμενα ραντεβού του πελάτη, ή καταχωρεί το επώνυμό του αν η επιχείρηση δεν το έχει.
Όταν ο πελάτης προσθέσει κάτι μετά την κράτηση («ανδρικό φιλέ», «θα φέρω τη ρακέτα μου», «το επώνυμό μου είναι…»). Η σημείωση προστίθεται κάτω από όσα υπάρχουν — δεν αντικαθιστά τίποτα — και η επιχείρηση ειδοποιείται. Όνομα ή επώνυμο που ήδη υπάρχει δεν αλλάζει ποτέ (surnameSaved: false με surnameReason already_set / account_holder)· για διορθώσεις χρησιμοποιήστε takeMessage.
Πεδίο
Τύπος
Περιγραφή
appointmentIdυποχρεωτικό
integer
Από το bookAppointment, το identifyCaller ή το listAppointments.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
note
string
Τι να προστεθεί για την επιχείρηση (≤300 χαρακτήρες).
Αφήνει μήνυμα στην επιχείρηση για να καλέσει πίσω.
Για ό,τι δεν μπορεί να κάνει ή να απαντήσει η σύνδεσή σας, και όποτε ο πελάτης ζητά άνθρωπο.
Πεδίο
Τύπος
Περιγραφή
nameυποχρεωτικό
string
Όνομα του πελάτη.
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
reasonυποχρεωτικό
string
Για ποιο θέμα (≤1000 χαρακτήρες).
urgent
boolean
Σημειώνεται ως επείγον για το προσωπικό.
Body αιτήματος
{
"name": "Νίκος",
"phone": "2109999999",
"reason": "Θέλει να μιλήσει με τη γιατρό για τα αποτελέσματα",
"urgent": false
}
Απάντηση
{
"ok": true,
"messageId": 88,
"message": "Το μήνυμα καταγράφηκε· το κατάστημα θα σας καλέσει."
}
POSTsendBookingLink/api/agent/v1/sendBookingLink
Στέλνει στον πελάτη SMS με σύνδεσμο για online κράτηση.
Για μαθήματα, πακέτα, online πληρωμή ή υπηρεσία με phoneBookable: false· όταν καμία ώρα δεν βολεύει· όταν ο πελάτης ρωτά για online κράτηση· ή μία φορά μετά την πρώτη κράτηση νέου πελάτη (newClient και canTextLink στο bookAppointment). Μόνο σε κινητά, μία φορά την ώρα ανά αριθμό.
Πεδίο
Τύπος
Περιγραφή
phoneυποχρεωτικό
string
Το τηλέφωνο του πελάτη σε οποιαδήποτε συνηθισμένη μορφή (69…, +3069…, 003069…, σταθερά). Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού πρέπει να είναι ΕΠΑΛΗΘΕΥΜΕΝΟΣ αριθμός (αναγνώριση κλήσης, λογαριασμός μηνυμάτων ή δικό σας SMS code) — ποτέ αριθμός που είπε ή έγραψε ο πελάτης.
serviceId
integer
Ο σύνδεσμος ανοίγει σε αυτή την υπηρεσία.
Body αιτήματος
{
"phone": "6941234567",
"serviceId": 629
}
Απάντηση
{
"ok": true,
"sent": true,
"link": "https://www.prebook.gr/podia-demo?service=629",
"message": "Στάλθηκε SMS με τον σύνδεσμο κράτησης."
}
Η σύνδεσή σας κλείνει ως πελάτης: το Prebook εφαρμόζει κάθε κανόνα που έχει ορίσει η επιχείρηση, με αυτή τη σειρά, και απαντά με κωδικό όταν κάποιος αποτύχει. Δεν χρειάζεται να υλοποιήσετε κανέναν — αλλά η σύνδεσή σας πρέπει να ξέρει τι σημαίνει κάθε απάντηση.
Έλεγχος
Ρύθμιση επιχείρησης / υπηρεσίας
Απάντηση API
Τι κάνει η σύνδεσή σας
Κρατήσεις κλειστές
Επιχείρηση: «Κρατήσεις» απενεργοποιημένες
BOOKINGS_DISABLED
Οι κρατήσεις είναι κλειστές — προτείνετε takeMessage.
Η υπηρεσία κλείνεται τηλεφωνικά
Ατομική υπηρεσία ημερολογίου, δημόσια, όχι αρχειοθετημένη, όχι πολυήμερη
NOT_FOUND / NOT_PHONE_BOOKABLE + reason
Προτείνετε sendBookingLink.
Το προσωπικό κάνει την υπηρεσία
Σύνδεση προσωπικού ↔ υπηρεσίας, ενεργό στο ημερολόγιο
NOT_FOUND
Προτείνετε άλλο μέλος του προσωπικού ή οποιονδήποτε.
Προτείνετε sendBookingLink για αγορά πακέτου ή online πληρωμή.
Επιβεβαίωση
Η επιχείρηση εγκρίνει τα ραντεβού χειροκίνητα, ή νέο μέλος σε αναμονή
status: pending
«Θα σας επιβεβαιώσει το κατάστημα.»
Ταυτόχρονες κρατήσεις
Νέα καταμέτρηση μετά την καταχώρηση· η κράτηση που περισσεύει αποσύρεται
SLOT_TAKEN
Η ώρα μόλις έκλεισε — νέα αναζήτηση.
Δύο εξαιρέσεις για τις συνδέσεις: μια επιχείρηση που απαιτεί εγγραφή στην εφαρμογή δέχεται κανονικά κρατήσεις μέσω API (το επέλεξε εκδίδοντας κλειδί), και χρήματα δεν πληρώνονται ποτέ μέσω API.
Μεταφορά & ακύρωση
Έλεγχος
Ρύθμιση επιχείρησης / υπηρεσίας
Απάντηση API
Τι κάνει η σύνδεσή σας
Μόνο δικά του ραντεβού
Το τηλέφωνο του πελάτη του ραντεβού πρέπει να ταιριάζει με του καλούντος
NOT_FOUND
Ζητήστε τον αριθμό με τον οποίο έγινε η κράτηση.
Μόνο ατομικά ραντεβού
Μαθήματα, κρατήσεις πολλών υπηρεσιών, επαναλαμβανόμενες και πολυήμερες κρατήσεις
NOT_PHONE_BOOKABLE
Οι αλλαγές γίνονται από την εφαρμογή ή την επιχείρηση — takeMessage.
Πληρωμένο online
Τις επιστροφές χρημάτων τις χειρίζεται η επιχείρηση
Ο πελάτης μαθαίνει μόνο για ραντεβού στον δικό του αριθμό, και μόνο μικρά ονόματα, υπηρεσίες, προσωπικό, ώρες και κατάσταση — ποτέ σημειώσεις, ιατρικά στοιχεία, ιστορικό, επίπεδα ή στοιχεία άλλων πελατών. Ισχύει για κάθε τύπο επιχείρησης, και για ιατρεία και θεραπευτές.
Υποχρεώσεις της σύνδεσής σας
Ο αριθμός τηλεφώνου είναι η ταυτότητα του πελάτη. Για identifyCaller, listAppointments, rescheduleAppointment, cancelAppointment και updateBookingDetails στείλτε ΜΟΝΟ αριθμό επαληθευμένο από το κανάλι: αναγνώριση κλήσης, ο αριθμός του λογαριασμού μηνυμάτων, ή αριθμός που επιβεβαιώσατε εσείς με κωδικό SMS. Ποτέ αριθμό που είπε ή πληκτρολόγησε ο πελάτης — αλλιώς οποιοσδήποτε θα έβλεπε ή θα ακύρωνε ραντεβού άλλου. Το bookAppointment και το takeMessage μπορούν να χρησιμοποιούν τον αριθμό που δίνει ο πελάτης.
Προτείνετε μόνο ώρες που επέστρεψε το findAvailability. Ποτέ μην επινοείτε ή στρογγυλεύετε ώρα.
Επιβεβαιώστε με τον πελάτη υπηρεσία, ημέρα, ώρα και όνομα και πάρτε καθαρό «ναι» πριν από bookAppointment, rescheduleAppointment ή cancelAppointment.
Σε CONFIRMATION_REQUIRED, διαβάστε το κείμενο της πολιτικής και καλέστε ξανά με confirmLateCancel: true μόνο μετά από ρητό «ναι».
Όταν μια κράτηση επιστρέφει pending, πείτε στον πελάτη ότι θα την επιβεβαιώσει η επιχείρηση.
Σε φωνητικές κλήσεις: ενημερώστε στην αρχή ότι η κλήση καταγράφεται (GDPR) και κρατήστε ηχογραφήσεις και απομαγνητοφωνήσεις μόνο όσο τις χρειάζεται η επιχείρηση.
Αντιμετωπίστε ιατρεία και θεραπευτές ως ευαίσθητα: μη ζητάτε ιατρικές λεπτομέρειες πέρα από μια σύντομη αιτία και μην κρατάτε στοιχεία του καλούντος μετά την κλήση.
Τα SMS δεν φτάνουν σε σταθερά — προτείνετε takeMessage.
Για ό,τι δεν μπορείτε να κάνετε, και όποτε ο πελάτης ζητά άνθρωπο, χρησιμοποιήστε το takeMessage.
Κρατήστε το κλειδί στον server — ποτέ σε browser, εφαρμογή ή JavaScript σελίδας. Ένα κλειδί ανά επιχείρηση ανά σύνδεση· αν διαρρεύσει, ζητήστε από την επιχείρηση να το ανακαλέσει.
Κωδικοί άρνησης
Κωδικός
Σημασία
Προτεινόμενη διατύπωση
SLOT_TAKEN
Η ώρα δεν είναι (ή δεν είναι πλέον) διαθέσιμη.
Αυτή η ώρα μόλις έκλεισε. Να σας προτείνω κάποια άλλη;
OUTSIDE_BOOKING_WINDOW
Πιο μπροστά από όσο δέχεται κρατήσεις η επιχείρηση.
Δεχόμαστε κρατήσεις έως τόσες ημέρες μπροστά.
INSIDE_CUTOFF
Πολύ κοντά στην έναρξη για αυτή την υπηρεσία.
Για αυτή την υπηρεσία χρειάζεται να κλείσετε λίγο νωρίτερα.
DAILY_LIMIT
Ο πελάτης έχει ήδη τα μέγιστα ραντεβού εκείνη την ημέρα.
Έχετε ήδη τα μέγιστα ραντεβού εκείνη τη μέρα.
BANNED
Η επιχείρηση δεν δέχεται κρατήσεις από αυτόν τον πελάτη.
Δεν μπορώ να ολοκληρώσω την κράτηση· να αφήσω μήνυμα στο κατάστημα;
MEMBERSHIP_REQUIRED
Η επιχείρηση πρέπει πρώτα να εγκρίνει αυτόν τον πελάτη.
Το κατάστημα πρέπει πρώτα να εγκρίνει την εγγραφή σας.
Πρόβλημα κλειδιού, ρυθμίσεων της επιχείρησης ή πλατφόρμας.
Αν γίνεται, πάρτε τηλέφωνο την επιχείρηση.
Φωνητικές πλατφόρμες
Για AI τηλεφωνική γραμματεία ή chatbot με LLM: κατεβάστε μία φορά τους ορισμούς των εργαλείων με το κλειδί σας και επικολλήστε τους στην πλατφόρμα σας. Όλες οι πλατφόρμες παρακάτω καλούν απλά εργαλεία HTTPS με δικό σας header. Για δικό σας κώδικα, απλώς καλέστε τα endpoints. Τα ονόματα των μενού αλλάζουν συχνά — ελέγξτε την τρέχουσα τεκμηρίωση της πλατφόρμας σας.
Δημιουργήστε ένα Function tool για κάθε εργαλείο του Prebook (ή εισάγετε τον πίνακα openaiFunctions από το GET /tools).
Ορίστε ως server URL κάθε εργαλείου το endpoint του και προσθέστε το header Authorization: Bearer <key>.
Βάλτε το prompt γραμματείας παρακάτω στο system prompt του assistant και δώστε τον αριθμό του καλούντος ({{customer.number}}) στο identifyCaller.
Retell
Προσθέστε ένα Custom Function ανά εργαλείο: URL = endpoint, μέθοδος POST, header Authorization: Bearer <key>, parameters = το JSON schema του εργαλείου.
Ενεργοποιήστε το «payload: args only», ώστε το body να περιέχει μόνο τα ορίσματα.
Χρησιμοποιήστε το {{user_number}} ως τηλέφωνο για το identifyCaller.
ElevenLabs Agents
Προσθέστε ένα Webhook (server) tool ανά εργαλείο του Prebook: POST, το URL του endpoint και secret header Authorization: Bearer <key>.
Ορίστε τις παραμέτρους του body από το schema του εργαλείου· αφήστε το LLM να τις συμπληρώσει.
Χρησιμοποιήστε τη δυναμική μεταβλητή system__caller_id ως τηλέφωνο για το identifyCaller.
Prompt για AI γραμματεία ή chatbot
Ένα σημείο εκκίνησης για το system prompt (γραμμένο για τηλέφωνο· για chat αφαιρέστε τη γραμμή για την καταγραφή). Αντικαταστήστε το {{shopName}}· οι σημειώσεις της ίδιας της επιχείρησης έρχονται στο getShopInfo.callerInfo.
System prompt
Είσαι η τηλεφωνική γραμματεία του «{{shopName}}». Μιλάς ελληνικά, ευγενικά και σύντομα.
Στην αρχή της κλήσης: ενημέρωσε ότι η κλήση καταγράφεται, κάλεσε getShopInfo και identifyCaller με τον αριθμό της αναγνώρισης κλήσης.
Για αναζήτηση, μεταφορά, ακύρωση ή σημείωση σε ραντεβού χρησιμοποίησε ΜΟΝΟ τον αριθμό της αναγνώρισης κλήσης — ποτέ αριθμό που σου λέει ο καλών. Αν η κλήση είναι από απόκρυψη, μην αλλάζεις ραντεβού· κάλεσε takeMessage.
Για ραντεβού: listServices → findAvailability. Πρότεινε ΜΟΝΟ ώρες που επέστρεψε το findAvailability (2-3 κάθε φορά).
Πριν κλείσεις, επιβεβαίωσε δυνατά υπηρεσία, ημέρα, ώρα και όνομα. Μετά κάλεσε bookAppointment.
Αν status = "pending", πες ότι το κατάστημα θα επιβεβαιώσει το ραντεβού.
Για ακύρωση με code CONFIRMATION_REQUIRED, διάβασε την πολιτική και ζήτα ρητό «ναι» πριν ξανακαλέσεις με confirmLateCancel.
Μην ρωτάς ιατρικές λεπτομέρειες πέρα από μια σύντομη αιτία επίσκεψης.
Ό,τι δεν μπορείς να κάνεις ή να απαντήσεις: takeMessage (ή sendBookingLink για online κράτηση).
Εκδόσεις & υποστήριξη
Το /v1 αλλάζει μόνο προσθετικά: νέα εργαλεία, νέα προαιρετικά πεδία, νέοι κωδικοί. Έναν άγνωστο κωδικό αντιμετωπίστε τον ως λόγο να αφήσετε μήνυμα.
Ασύμβατες αλλαγές έρχονται ως /v2, με ενημέρωση εκ των προτέρων σε κάθε κάτοχο κλειδιού.