C cenaly.com
Inizia gratuitamente

Guest API per agenti AI

Menu, ordini e prenotazioni per assistenti AI — REST pubblico + MCP, senza autorizzazione

On this page 8

Guest API per agenti AI

API pubblico di cenaly.com, tramite il quale gli assistenti e gli agenti AI agiscono per conto dell'ospite: consultano il menù del ristorante, cercano nel catalogo, compongono il carrello, effettuano l'ordine e prenotano un tavolo. Per tutto questo non serve l'autorizzazione: sono le stesse operazioni disponibili all'ospite sul sito del menù.

Indirizzamento del ristorante#

Il ristorante è identificato da un codice di sede: è il segmento dell'URL del menù in maiuscolo. Se il menù si apre su cenaly.com/MYCAFE, il codice è MYCAFE. Lo stesso codice è incorporato nei codici QR dei tavoli.

Avvio rapido (REST)#

# Cosa sa fare l'API
curl https://api.cenaly.com/llm/v1

# Menù del ristorante in russo
curl "https://api.cenaly.com/llm/v1/locations/MYCAFE/menu?lang=ru"

# Effettuare un ordine da asporto
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": "…"}

# Stato dell'ordine (orderId — token di accesso segreto)
curl https://api.cenaly.com/llm/v1/locations/MYCAFE/orders/{orderId}

Specifica completa: OpenAPI 3.1 · documentazione interattiva (nella lingua del brand; ?lang=en|ka|ru|tr|sq).

Endpoint#

Metodo Percorso Cosa fa
GET /llm/v1/locations/{DOMAIN}/menu?lang=xx Menù: categorie, piatti, prezzi, varianti e supplementi, valuta, modalità di ritiro
GET /llm/v1/locations/{DOMAIN}/items/{itemId} Un singolo piatto con le opzioni
GET /llm/v1/locations/{DOMAIN}/items?ids=a,b,c Più piatti in una volta (fino a 10 per richiesta)
GET /llm/v1/locations/{DOMAIN}/search?q=&limit= Ricerca semantica nel catalogo — per nomi, descrizioni e caratteristiche
GET /llm/v1/locations/{DOMAIN}/store-info Informazioni fuori dal menù: indirizzo, contatti, coordinate, orari di apertura
GET /llm/v1/locations/{DOMAIN}/policies?q= Ricerca nelle regole pubblicate, nelle FAQ e nelle pagine informative della struttura
POST /llm/v1/locations/{DOMAIN}/carts Creare un carrello sul server
GET / PATCH /llm/v1/locations/{DOMAIN}/carts/{cartId} Leggere il carrello / modificarne la composizione
POST /llm/v1/locations/{DOMAIN}/orders Effettuare l'ordine (il server convalida la composizione e calcola gli importi)
GET /llm/v1/locations/{DOMAIN}/orders/{orderId} Stato dell'ordine, numero, articoli
GET /llm/v1/locations/{DOMAIN}/reservations/availability?start=&durationMinutes= Tavoli liberi/occupati secondo la piantina della sala
POST /llm/v1/locations/{DOMAIN}/reservations Richiesta di prenotazione (pending fino alla conferma del ristorante)
GET / DELETE /llm/v1/locations/{DOMAIN}/reservations/{id} Stato / annullamento della prenotazione

Carrello: comporre l'ordine passo dopo passo#

L'agente non deve indovinare la composizione dell'ordine in un colpo solo: può gestire il carrello sul server, come farebbe una persona nel carrello web:

  1. POST /carts con le prime righe → cartId
  2. PATCH /carts/{cartId} — aggiungere, modificare la quantità, rimuovere (quantity: 0)
  3. POST /orders con cartId — effettuare l'ordine

I prezzi nel carrello vengono sempre ricalcolati sul menù in tempo reale, quindi non può mostrare un importo obsoleto. Il carrello dura 7 giorni. In ogni risposta è presente checkoutUrl: il link può essere semplicemente consegnato alla persona, perché completi l'ordine nel normale checkout.

Alla creazione dell'ordine si può passare una idempotencyKey (8–64 caratteri): una ripetizione con la stessa chiave entro 48 ore restituirà l'ordine originale, senza crearne un secondo. Lo stesso vale per le prenotazioni: una ripetizione nella stessa finestra restituirà la prenotazione originale, senza occupare un secondo tavolo.

Connessione tramite MCP#

Server: https://api.cenaly.com/llm/mcp — Model Context Protocol, streamable HTTP, stateless. Gli strumenti per gli ospiti funzionano senza autorizzazione; l'accesso tramite OAuth vi aggiunge gli strumenti del proprio account.

Configurazione per Claude Desktop / Claude Code e client compatibili:

{
  "mcpServers": {
    "meni-guest": {
      "type": "http",
      "url": "https://api.cenaly.com/llm/mcp"
    }
  }
}

Strumenti per gli ospiti (13, senza autorizzazione):

Gruppo Strumenti
Menù e catalogo get_menu, get_item, search_products
Struttura get_store_info, search_policies_and_faqs
Carrello update_cart, get_cart
Ordine create_order, get_order_status
Prenotazione del tavolo check_table_availability, create_reservation, get_reservation_status, cancel_reservation

Scenari tipici:

  • Ordine rapido: get_menu → create_order → get_order_status (il numero a 4 cifre compare dopo un paio di secondi).
  • Ordine in conversazione: search_products → update_cart (un articolo alla volta, come in una conversazione) → get_cart → create_order, oppure consegnare all'ospite il checkoutUrl e lasciargli completare l'ordine da solo.
  • Domanda sulla struttura: get_store_info (indirizzo, orari, contatti) oppure search_policies_and_faqs (condizioni di consegna, reso, regole).
  • Prenotazione del tavolo: check_table_availability (tavoli dalla piantina della sala, libero/occupato per l'orario scelto) → create_reservation con tableId → get_reservation_status (il ristorante conferma la richiesta) → se necessario cancel_reservation.

Accesso ai propri dati#

Se sei il titolare di una sede o un collaboratore, ai medesimi 13 strumenti guest si aggiungono 12 strumenti per lavorare con il proprio account — in due gruppi.

Dati dell'account (6): resolve_domain, list_files, read_file, write_file, delete_file, write_signal. Aprono non solo menu e ordini, ma anche CRM, magazzino, personale, impostazioni della cassa e dello schermo cucina, documenti e quasi tutte le altre sezioni.

Sito client della sede (6): get_site_settings, update_site_settings, list_site_templates, apply_site_template, check_domain_availability, rename_site_domain.

Strumento Cosa fa
get_site_settings Legge le impostazioni della vetrina: titolo, tipo di attività, interruttori (ordini, chiamata del cameriere, richiamata, banner cookie), consegna/asporto/WhatsApp, allestimento e modello, layout delle schede, campagne di coinvolgimento, mercati valutari, test A/B del design e, per il commercio al dettaglio, vetrina, SEO, sezioni della home e plugin del negozio
update_site_settings Modifica le stesse: la patch si unisce al profilo della sede con lo stesso flusso delle modifiche dall'area di amministrazione — le modifiche sono visibili dopo qualche secondo
list_site_templates Galleria di modelli di design pronti — la stessa del pannello
apply_site_template Applica un modello in un'unica azione: allestimento, layout delle schede e id del modello
check_domain_availability Verifica se il nome del sottodominio è libero (3–63 caratteri, lettere/cifre/trattini, i nomi riservati vengono rifiutati). Non modifica nulla
rename_site_domain ⚠️ Rinomina il dominio della vetrina: solo il titolare, e tutti i vecchi link e i codici QR stampati sul dominio precedente smettono di funzionare

L'accesso avviene con il normale OAuth 2.1 sotto il proprio account cenaly.com: il client MCP (Claude, ChatGPT, CLI) si registra da solo e apre la finestra di login. Non serve incollare nulla a mano.

  • Metadati della risorsa: https://api.cenaly.com/.well-known/oauth-protected-resource
  • Metadati del server di autorizzazione: https://api.cenaly.com/.well-known/oauth-authorization-server
  • Registrazione dinamica del client (RFC 7591): POST https://api.cenaly.com/llm/oauth/register

Finché non c'è un token, tools/list mostra solo gli strumenti guest — quelli autorizzati semplicemente non sono visibili.

Regole e garanzie#

  • L'ordine viene validato sul menu live: un piatto, una variante o un extra inesistente dà errore 400 con l'elenco dei problemi; prezzi e totale li calcola il server, l'agente non ha modo di «assegnare» un prezzo.
  • Per l'asporto e la consegna sono obbligatori nome e telefono dell'ospite; per la consegna anche l'indirizzo.
  • orderId / reservationId — token segreti: con questi si verifica lo stato e si annulla la prenotazione. Non pubblicarli.
  • Ordini e prenotazioni arrivano al ristorante in tempo reale — nell'area di amministrazione, sullo schermo cucina e nelle notifiche, come i normali ordini dal sito.
  • Le prenotazioni dell'ospite hanno stato pending finché il ristorante non le conferma nell'area di amministrazione.
  • In Russia non è possibile ordinare alcolici tramite il canale dell'agente. La vendita a distanza di prodotti alcolici è vietata per legge (sott. 14 comma 2 art. 16 171-ФЗ), perciò per le sedi con paese «Russia» un ordine con un articolo alcolico non supera la validazione: nella risposta 400 arriva una riga con il nome di quell'articolo e la spiegazione che lo si può ordinare solo dal cameriere in sala. L'ordine va ricomposto senza alcolici.

Rilevamento machine-readable#

  • https://cenaly.com/llms.txt — mappa sintetica dell'API per gli LLM;
  • GET https://api.cenaly.com/llm/v1 — documento di discovery: elenco completo degli endpoint, esempi di ordine, prenotazione e uso del carrello, link ai metadati OAuth.
Was this article helpful?