Guest API για AI-ατζέντηδες
Δημόσιο API του cenaly.com, μέσω του οποίου οι AI βοηθοί και ατζέντηδες ενεργούν για λογαριασμό του επισκέπτη: διαβάζουν το μενού του εστιατορίου, ψάχνουν στον κατάλογο, συγκεντρώνουν καλάθι, υποβάλλουν παραγγελία και κάνουν κράτηση τραπεζιού. Για όλα αυτά δεν απαιτείται εξουσιοδότηση — είναι οι ίδιες λειτουργίες που είναι διαθέσιμες στον επισκέπτη στον ιστότοπο του μενού.
Διευθυνσιοδότηση εστιατορίου#
Το εστιατόριο διευθυνσιοδοτείται με κωδικό τοποθεσίας — είναι το τμήμα του URL του μενού σε κεφαλαία γράμματα. Αν το μενού ανοίγει στο cenaly.com/MYCAFE, ο κωδικός είναι MYCAFE. Ο ίδιος κωδικός είναι ενσωματωμένος στους κωδικούς QR των τραπεζιών.
Γρήγορη εκκίνηση (REST)#
# Τι μπορεί το API
curl https://api.cenaly.com/llm/v1
# Μενού εστιατορίου στα ρωσικά
curl "https://api.cenaly.com/llm/v1/locations/MYCAFE/menu?lang=ru"
# Υποβολή παραγγελίας για παραλαβή
curl -X POST https://api.cenaly.com/llm/v1/locations/MYCAFE/orders \
-H 'Content-Type: application/json' \
-d '{
"items": [{"itemId": "abc123", "quantity": 2}],
"orderType": "pickup",
"customer": {"name": "Επισκέπτης", "phone": "+995555123456"},
"language": "ru"
}'
# → {"accepted": true, "orderId": "…", "total": 24, "statusUrl": "…"}
# Κατάσταση παραγγελίας (orderId — μυστικό διακριτικό πρόσβασης)
curl https://api.cenaly.com/llm/v1/locations/MYCAFE/orders/{orderId}
Πλήρης προδιαγραφή: OpenAPI 3.1 · διαδραστική τεκμηρίωση (στη γλώσσα της επωνυμίας; ?lang=en|ka|ru|tr|sq).
Τελικά σημεία#
| Μέθοδος | Διαδρομή | Τι κάνει |
|---|---|---|
| GET | /llm/v1/locations/{DOMAIN}/menu?lang=xx |
Μενού: κατηγορίες, πιάτα, τιμές, παραλλαγές και πρόσθετα, νόμισμα, τρόποι παραλαβής |
| GET | /llm/v1/locations/{DOMAIN}/items/{itemId} |
Ένα πιάτο με επιλογές |
| GET | /llm/v1/locations/{DOMAIN}/items?ids=a,b,c |
Πολλά πιάτα ταυτόχρονα (έως 10 ανά αίτημα) |
| GET | /llm/v1/locations/{DOMAIN}/search?q=&limit= |
Σημασιολογική αναζήτηση στον κατάλογο — σε ονόματα, περιγραφές και χαρακτηριστικά |
| GET | /llm/v1/locations/{DOMAIN}/store-info |
Στοιχεία εκτός μενού: διεύθυνση, επαφές, συντεταγμένες, ώρες λειτουργίας |
| GET | /llm/v1/locations/{DOMAIN}/policies?q= |
Αναζήτηση στους δημοσιευμένους κανόνες, τις συχνές ερωτήσεις και τις σελίδες πληροφοριών του καταστήματος |
| POST | /llm/v1/locations/{DOMAIN}/carts |
Δημιουργία καλαθιού στον διακομιστή |
| GET / PATCH | /llm/v1/locations/{DOMAIN}/carts/{cartId} |
Ανάγνωση καλαθιού / αλλαγή περιεχομένου |
| POST | /llm/v1/locations/{DOMAIN}/orders |
Υποβολή παραγγελίας (ο διακομιστής επικυρώνει το περιεχόμενο και υπολογίζει τα ποσά) |
| GET | /llm/v1/locations/{DOMAIN}/orders/{orderId} |
Κατάσταση παραγγελίας, αριθμός, είδη |
| GET | /llm/v1/locations/{DOMAIN}/reservations/availability?start=&durationMinutes= |
Ελεύθερα/κατειλημμένα τραπέζια βάσει της κάτοψης της αίθουσας |
| POST | /llm/v1/locations/{DOMAIN}/reservations |
Αίτημα κράτησης (pending έως την επιβεβαίωση από το εστιατόριο) |
| GET / DELETE | /llm/v1/locations/{DOMAIN}/reservations/{id} |
Κατάσταση / ακύρωση κράτησης |
Καλάθι: συγκέντρωση παραγγελίας βήμα προς βήμα#
Ο ατζέντης δεν χρειάζεται να μαντέψει το περιεχόμενο της παραγγελίας με μία κίνηση — μπορεί να τηρεί καλάθι στον διακομιστή, όπως κάνει ένας άνθρωπος στο καλάθι του ιστοτόπου:
POST /cartsμε τις πρώτες γραμμές →cartIdPATCH /carts/{cartId}— προσθήκη, αλλαγή ποσότητας, αφαίρεση (quantity: 0)POST /ordersμεcartId— υποβολή
Οι τιμές στο καλάθι επανυπολογίζονται πάντα με βάση το ζωντανό μενού, οπότε δεν μπορεί να εμφανίσει παρωχημένο ποσό. Το καλάθι διατηρείται 7 ημέρες. Σε κάθε απάντηση υπάρχει checkoutUrl — ο σύνδεσμος μπορεί απλώς να δοθεί σε έναν άνθρωπο, ώστε να ολοκληρώσει την παραγγελία στο συνηθισμένο ταμείο.
Κατά τη δημιουργία παραγγελίας μπορεί να μεταβιβαστεί idempotencyKey (8–64 χαρακτήρες): η επανάληψη με το ίδιο κλειδί εντός 48 ωρών θα επιστρέψει την αρχική παραγγελία και δεν θα δημιουργήσει δεύτερη. Το ίδιο ισχύει και για τις κρατήσεις — η επανάληψη στο ίδιο παράθυρο θα επιστρέψει την αρχική κράτηση και δεν θα καταλάβει δεύτερο τραπέζι.
Σύνδεση μέσω MCP#
Διακομιστής: https://api.cenaly.com/llm/mcp — Model Context Protocol, streamable HTTP, stateless. Τα εργαλεία επισκέπτη λειτουργούν χωρίς εξουσιοδότηση· η σύνδεση μέσω OAuth προσθέτει σε αυτά τα εργαλεία του Λογαριασμού σας.
Διαμόρφωση για Claude Desktop / Claude Code και συμβατούς πελάτες:
{
"mcpServers": {
"meni-guest": {
"type": "http",
"url": "https://api.cenaly.com/llm/mcp"
}
}
}
Εργαλεία επισκέπτη (13, χωρίς εξουσιοδότηση):
| Ομάδα | Εργαλεία |
|---|---|
| Μενού και κατάλογος | get_menu, get_item, search_products |
| Κατάστημα | get_store_info, search_policies_and_faqs |
| Καλάθι | update_cart, get_cart |
| Παραγγελία | create_order, get_order_status |
| Κράτηση τραπεζιού | check_table_availability, create_reservation, get_reservation_status, cancel_reservation |
Τυπικά σενάρια:
- Γρήγορη παραγγελία:
get_menu→create_order→get_order_status(ο 4ψήφιος αριθμός εμφανίζεται μετά από λίγα δευτερόλεπτα). - Παραγγελία σε διάλογο:
search_products→update_cart(ένα είδος τη φορά, όπως στη συζήτηση) →get_cart→create_order, ή να δοθεί στον επισκέπτη τοcheckoutUrlκαι να ολοκληρώσει ο ίδιος την παραγγελία. - Ερώτηση για το κατάστημα:
get_store_info(διεύθυνση, ώρες, επαφές) ήsearch_policies_and_faqs(όροι παράδοσης, επιστροφή, κανόνες). - Κράτηση τραπεζιού:
check_table_availability(τραπέζια από την κάτοψη της αίθουσας, ελεύθερο/κατειλημμένο για την επιλεγμένη ώρα) →create_reservationμεtableId→get_reservation_status(το εστιατόριο επιβεβαιώνει το αίτημα) → αν χρειαστείcancel_reservation.
Πρόσβαση στα δεδομένα σας#
Εάν είστε ιδιοκτήτης καταστήματος ή υπάλληλος, στα ίδια 13 εργαλεία επισκεπτών προστίθενται 12 εργαλεία διαχείρισης του λογαριασμού σας — σε δύο ομάδες.
Δεδομένα λογαριασμού (6): resolve_domain, list_files, read_file, write_file, delete_file, write_signal. Ανοίγουν όχι μόνο το μενού και τις παραγγελίες, αλλά και το CRM, την αποθήκη, το προσωπικό, τις ρυθμίσεις του ταμείου και της οθόνης κουζίνας, τα έγγραφα και σχεδόν όλες τις υπόλοιπες ενότητες.
Ιστότοπος πελάτη καταστήματος (6): get_site_settings, update_site_settings, list_site_templates, apply_site_template, check_domain_availability, rename_site_domain.
| Εργαλείο | Τι κάνει |
|---|---|
get_site_settings |
Διαβάζει τις ρυθμίσεις της βιτρίνας: τίτλο, τύπο επιχείρησης, διακόπτες (παραγγελίες, κλήση σερβιτόρου, ανάκληση κλήσης, banner cookie), παράδοση/παραλαβή/WhatsApp, εμφάνιση και πρότυπο, διάταξη καρτών, καμπάνιες ενεργοποίησης, αγορές νομισμάτων, A/B test σχεδίασης, και για το λιανεμπόριο — βιτρίνα, SEO, ενότητες αρχικής σελίδας και πρόσθετα καταστήματος |
update_site_settings |
Τις αλλάζει κιόλας: το patch συγχωνεύεται με το προφίλ του καταστήματος μέσω του ίδιου pipeline όπως και οι αλλαγές από το admin panel — οι αλλαγές είναι ορατές μετά από λίγα δευτερόλεπτα |
list_site_templates |
Συλλογή έτοιμων προτύπων σχεδίασης — η ίδια που υπάρχει στο panel |
apply_site_template |
Εφαρμόζει ένα πρότυπο με μία ενέργεια: εμφάνιση, διάταξη καρτών και id προτύπου |
check_domain_availability |
Ελέγχει αν το όνομα υποτομέα είναι ελεύθερο (3–63 χαρακτήρες, γράμματα/ψηφία/παύλες, τα δεσμευμένα ονόματα απορρίπτονται). Δεν αλλάζει τίποτα |
rename_site_domain |
⚠️ Μετονομάζει τον τομέα της βιτρίνας: μόνο ο ιδιοκτήτης, και όλοι οι παλιοί σύνδεσμοι και τα τυπωμένα QR που δείχνουν στον προηγούμενο τομέα σταματούν να λειτουργούν |
Η σύνδεση γίνεται με το συνηθισμένο OAuth 2.1 κάτω από τον λογαριασμό σας στο cenaly.com: ο MCP client (Claude, ChatGPT, CLI) εγγράφεται μόνος του και ανοίγει το παράθυρο σύνδεσης. Δεν χρειάζεται να επικολλήσετε τίποτα με το χέρι.
- Μεταδεδομένα πόρου:
https://api.cenaly.com/.well-known/oauth-protected-resource - Μεταδεδομένα server εξουσιοδότησης:
https://api.cenaly.com/.well-known/oauth-authorization-server - Δυναμική εγγραφή client (RFC 7591):
POST https://api.cenaly.com/llm/oauth/register
Όσο δεν υπάρχει token, το tools/list εμφανίζει μόνο τα εργαλεία επισκεπτών — τα εξουσιοδοτημένα απλώς δεν είναι ορατά.
Κανόνες και εγγυήσεις#
- Η παραγγελία επικυρώνεται με το ζωντανό μενού: ανύπαρκτο πιάτο, παραλλαγή ή πρόσθετο — σφάλμα 400 με λίστα προβλημάτων· τις τιμές και το σύνολο τα υπολογίζει ο server, ο agent δεν έχει τρόπο να «ορίσει» τιμή.
- Για παραλαβή και παράδοση είναι υποχρεωτικά το όνομα και το τηλέφωνο του επισκέπτη· για παράδοση — η διεύθυνση.
orderId/reservationId— μυστικά tokens: με αυτά ελέγχεται η κατάσταση και ακυρώνεται η κράτηση. Μην τα δημοσιεύετε.- Οι παραγγελίες και οι κρατήσεις φτάνουν στο εστιατόριο σε πραγματικό χρόνο — στο admin panel, στην οθόνη κουζίνας και στις ειδοποιήσεις, όπως οι συνηθισμένες παραγγελίες από τον ιστότοπο.
- Οι κρατήσεις του επισκέπτη έχουν κατάσταση
pending, μέχρι το εστιατόριο να τις επιβεβαιώσει στο admin panel. - Στη Ρωσία δεν μπορείτε να παραγγείλετε αλκοόλ μέσω του καναλιού agent. Η εξ αποστάσεως πώληση αλκοολούχων προϊόντων απαγορεύεται από τον νόμο (εδ. 14 παρ. 2 άρθ. 16 171-FZ), γι' αυτό σε καταστήματα με χώρα «Ρωσία» μια παραγγελία με είδος αλκοόλ δεν περνά την επικύρωση: στην απάντηση 400 έρχεται μια γραμμή με το όνομα αυτού του είδους και την εξήγηση ότι μπορείτε να το παραγγείλετε μόνο από σερβιτόρο στην αίθουσα. Η παραγγελία πρέπει να συγκροτηθεί ξανά χωρίς αλκοόλ.
Μηχανικά αναγνώσιμη ανακάλυψη#
https://cenaly.com/llms.txt— σύντομος χάρτης του API για LLM;GET https://api.cenaly.com/llm/v1— έγγραφο discovery: πλήρης λίστα endpoints, παραδείγματα παραγγελίας, κράτησης και διαχείρισης καλαθιού, σύνδεσμοι στα μεταδεδομένα OAuth.