M meni.ge
🔗 ინტეგრაციები

🛒 Guest API AI-აგენტებისთვის

მენიუ, შეკვეთები და დაჯავშნა AI-ასისტენტებისთვის — საჯარო REST + MCP, ავტორიზაციის გარეშე

დოკუმენტაცია

Guest API AI-აგენტებისთვის

meni.ge-ს საჯარო API, რომლის მეშვეობითაც AI-ასისტენტები და აგენტები სტუმრის სახელით მოქმედებენ: ეცნობიან რესტორნის მენიუს, ეძებენ კატალოგში, აგროვებენ კალათას, აფორმებენ შეკვეთას და ჯავშნიან მაგიდას. ამ ყველაფრისთვის ავტორიზაცია საჭირო არ არის — ეს იგივე ოპერაციებია, რაც სტუმრისთვის მენიუს საიტზეა ხელმისაწვდომი.

თუ შეხვალთ meni.ge-ს თქვენი ანგარიშით (OAuth), სტუმრის ინსტრუმენტებს ემატება კიდევ თორმეტი — უკვე თქვენი ობიექტის მონაცემებსა და პარამეტრებზე წვდომისთვის. იხილეთ განყოფილება „წვდომა საკუთარ მონაცემებზე“ ქვემოთ.

ასევე ხელმისაწვდომია ცალკე MCP-სერვერი ანგარიშის API-გასაღებებით სამართავად, მენიუს, ლოკაციებისა და შეკვეთების მზა ბრძანებებით: MCP Server-ის გზამკვლევი.

რესტორნის ადრესაცია

რესტორანი ადრესირდება ლოკაციის კოდით — ეს არის მენიუს URL-ის სეგმენტი ზედა რეგისტრში. თუ მენიუ იხსნება meni.ge/MYCAFE მისამართზე, კოდია — MYCAFE. იგივე კოდი ჩაშენებულია მაგიდების QR-კოდებში.

სწრაფი დაწყება (REST)

# რას აკეთებს API
curl https://api.meni.ge/llm/v1

# რესტორნის მენიუ რუსულ ენაზე
curl "https://api.meni.ge/llm/v1/locations/MYCAFE/menu?lang=ru"

# შეკვეთის გაფორმება წასაღებად
curl -X POST https://api.meni.ge/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.meni.ge/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 — ბმული შეგიძლიათ უბრალოდ გადასცეთ ადამიანს, რათა მან დაასრულოს შეკვეთა ჩვეულებრივ checkout-ში.

შეკვეთის შექმნისას შესაძლებელია idempotencyKey-ს გადაცემა (8–64 სიმბოლო): იგივე გასაღებით განმეორება 48 საათის განმავლობაში დააბრუნებს პირვანდელ შეკვეთას და არ შექმნის მეორეს. იგივე მუშაობს ჯავშნებზეც — განმეორება იმავე ფანჯარაში დააბრუნებს პირვანდელ ჯავშანს და არ დაიკავებს მეორე მაგიდას.

დაკავშირება MCP-ით

სერვერი: https://api.meni.ge/llm/mcp — Model Context Protocol, streamable HTTP, stateless. სტუმრის ინსტრუმენტები მუშაობს ავტორიზაციის გარეშე; OAuth-ით შესვლა მათ თქვენი ანგარიშის ინსტრუმენტებს ამატებს.

კონფიგურაცია Claude Desktop / Claude Code-სთვის და თავსებადი კლიენტებისთვის:

{
  "mcpServers": {
    "meni-guest": {
      "type": "http",
      "url": "https://api.meni.ge/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_menucreate_orderget_order_status (4-ნიშნა ნომერი რამდენიმე წამში ჩნდება).
  • შეკვეთა დიალოგში: search_productsupdate_cart (თითო პოზიცია, როგორც საუბარში) → get_cartcreate_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-ს, საწყობს, პერსონალს, POS-ისა და სამზარეულოს ეკრანის პარამეტრებს, დოკუმენტებს და თითქმის ყველა სხვა განყოფილებას.

ლოკაციის კლიენტის საიტი (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 თქვენი meni.ge ანგარიშით: MCP-კლიენტი (Claude, ChatGPT, CLI) რეგისტრირდება თავად და ხსნის ავტორიზაციის ფანჯარას. ხელით არაფრის შეყვანა არ არის საჭირო.

სად მუშაობს ეს. ავტორიზებული მხარე ხელმისაწვდომია ბრენდებზე, რომლებიც მუშაობენ AWS-ის ღრუბელში საერთო ანგარიშით (meni.ge, cenaly.com და სხვები) — ავტორიზაციის სერვერად გამოიყენება ჩვენი საერთო Cognito. რუსულ კონტურში (cenaly.ru) შესვლა სხვანაირადაა მოწყობილი და OAuth იქ ჯერ არ არის ჩართული: იქ მუშაობს მხოლოდ სტუმრის ინსტრუმენტები.

  • რესურსის მეტამონაცემები: https://api.meni.ge/.well-known/oauth-protected-resource
  • ავტორიზაციის სერვერის მეტამონაცემები: https://api.meni.ge/.well-known/oauth-authorization-server
  • კლიენტის დინამიკური რეგისტრაცია (RFC 7591): POST https://api.meni.ge/llm/oauth/register

სანამ ტოკენი არ არის, tools/list აჩვენებს მხოლოდ სტუმრის ინსტრუმენტებს — ავტორიზებული ინსტრუმენტები უბრალოდ არ ჩანს.

უფლებები ზუსტად იგივეა, რაც გაქვთ ადმინ-პანელში: მფლობელი ხედავს მთელ ანგარიშს, თანამშრომელი — თავის ლოკაციას და თავისი როლის მიხედვით. ფაილების, რომლებსაც პროდუქტი მოვლენათა ჟურნალის სახით აწარმოებს (პროფილი, მენიუს სნეპშოტი, კერძების ბარათები), პირდაპირ გადაწერა შეუძლებელია — მათთვის განკუთვნილია უსაფრთხო write_signal.

წესები და გარანტიები

  • შეკვეთის ვალიდაცია ხდება აქტიური მენიუს მიხედვით: არარსებული კერძი, ვარიანტი ან დამატება — შეცდომა 400 პრობლემების სიით; ფასებსა და ჯამურ თანხას ითვლის სერვერი, აგენტს არ აქვს ფასის „დანიშვნის“ საშუალება.
  • თვითწაღებისა და მიტანისთვის სავალდებულოა სტუმრის სახელი და ტელეფონის ნომერი; მიტანისთვის — მისამართი.
  • orderId / reservationIdსაიდუმლო ტოკენებია: მათი საშუალებით მოწმდება სტატუსი და უქმდება ჯავშანი. ნუ გამოაქვეყნებთ მათ.
  • შეკვეთები და ჯავშნები რესტორანში რეალურ დროში ხვდება — ადმინპანელში, სამზარეულოს ეკრანზე და შეტყობინებებში, როგორც საიტიდან მიღებული ჩვეულებრივი შეკვეთები.
  • სტუმრის ჯავშნებს აქვს სტატუსი pending, სანამ რესტორანი მათ ადმინპანელში არ დაადასტურებს.
  • რუსეთში სააგენტო არხით ალკოჰოლის შეკვეთა შეუძლებელია. ალკოჰოლური პროდუქციის დისტანციური გაყიდვა აკრძალულია კანონით (171-FZ-ის მე-16 მუხლის მე-2 პუნქტის მე-14 ქვეპუნქტი), ამიტომ ლოკაციებისთვის ქვეყნით „რუსეთი“ ალკოჰოლის შემცველი პოზიციის მქონე შეკვეთა ვალიდაციას ვერ გადის: 400 პასუხში ბრუნდება სტრიქონი ამ პოზიციის დასახელებით და განმარტებით, რომ მისი შეკვეთა შესაძლებელია მხოლოდ მიმტანთან დარბაზში. შეკვეთა ხელახლა უნდა აეწყოს ალკოჰოლის გარეშე.

მანქანურად წაკითხვადი აღმოჩენა

  • https://meni.ge/llms.txt — API-ის მოკლე რუკა LLM-ისთვის;
  • GET https://api.meni.ge/llm/v1 — discovery-დოკუმენტი: ენდპოინტების სრული სია, შეკვეთის, ჯავშნისა და კალათასთან მუშაობის მაგალითები, ბმულები OAuth-მეტამონაცემებზე.