C cenaly.com
Почати безкоштовно

Guest API для AI-агентів

Меню, замовлення та бронювання для AI-асистентів — публічний REST + MCP, без авторизації

On this page 8

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= Пошук за опублікованими правилами, FAQ та інфо-сторінками закладу
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} Статус / скасування бронювання

Кошик: зібрати замовлення крок за кроком#

Агенту не обов'язково вгадувати склад замовлення одним пострілом — можна вести кошик на сервері, як це робить людина у веб-кошику:

  1. POST /carts з першими рядками → cartId
  2. PATCH /carts/{cartId} — додати, змінити кількість, прибрати (quantity: 0)
  3. 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 Читає налаштування вітрини: заголовок, тип бізнесу, перемикачі (замовлення, виклик офіціанта, зворотний дзвінок, cookie-банер), доставка/самовивіз/WhatsApp, оформлення та шаблон, розкладка карток, кампанії залучення, валютні ринки, A/B-тест дизайну, а для роздрібу — вітрина, SEO, секції головної та плагіни магазину
update_site_settings Змінює їх же: патч зливається з профілем локації тим самим конвеєром, що й правки з адмінки, — зміни видно за кілька секунд
list_site_templates Галерея готових шаблонів дизайну — та сама, що в панелі
apply_site_template Застосовує шаблон однією дією: оформлення, розкладка карток і id шаблону
check_domain_availability Перевіряє, чи вільне ім'я піддомену (3–63 символи, літери/цифри/дефіси, зарезервовані імена відхиляються). Нічого не змінює
rename_site_domain ⚠️ Перейменовує домен вітрини: лише власник, і всі старі посилання та надруковані QR-коди на попередній домен перестають працювати

Вхід — звичайний OAuth 2.1 під вашим обліковим записом cenaly.com: MCP-клієнт (Claude, ChatGPT, CLI) реєструється сам і відкриває вікно логіну. Нічого вставляти руками не потрібно.

  • Метадані ресурсу: https://api.cenaly.com/.well-known/oauth-protected-resource
  • Метадані сервера авторизації: https://api.cenaly.com/.well-known/oauth-authorization-server
  • Динамічна реєстрація клієнта (RFC 7591): POST https://api.cenaly.com/llm/oauth/register

Поки токена немає, tools/list показує лише гостьові інструменти — авторизовані просто не видно.

Правила та гарантії#

  • Замовлення валідується за живим меню: неіснуюча страва, варіант чи доп — помилка 400 зі списком проблем; ціни та підсумок рахує сервер, у агента немає способу «призначити» ціну.
  • Для самовивозу та доставки обов'язкові ім'я і телефон гостя; для доставки — адреса.
  • orderId / reservationId — секретні токени: за ними перевіряється статус і скасовується бронювання. Не публікуйте їх.
  • Замовлення та бронювання потрапляють ресторану в реальному часі — в адмінку, на кухонний екран і в повідомлення, як звичайні замовлення із сайту.
  • Бронювання гостя мають статус pending, поки ресторан не підтвердить їх в адмінці.
  • У Росії алкоголь через агентський канал замовити не можна. Дистанційний продаж алкогольної продукції заборонений законом (пп. 14 п. 2 ст. 16 171-ФЗ), тому в локацій зі країною «Росія» замовлення з алкогольною позицією не проходить валідацію: у відповіді 400 приходить рядок із назвою цієї позиції та поясненням, що замовити її можна лише в офіціанта в залі. Замовлення потрібно перезібрати без алкоголю.

Машиночитане виявлення#

  • https://cenaly.com/llms.txt — стисла карта API для LLM;
  • GET https://api.cenaly.com/llm/v1 — discovery-документ: повний список ендпоінтів, приклади замовлення, бронювання та роботи з кошиком, посилання на OAuth-метадані.
Was this article helpful?