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} |
ჯავშნის სტატუსი / გაუქმება |
კალათა: შეკვეთის ეტაპობრივად აწყობა
აგენტს არ უწევს შეკვეთის შემადგენლობის ერთბაშად გამოცნობა — შესაძლებელია კალათის სერვერზე მართვა, როგორც ამას ადამიანი აკეთებს ვებ-კალათაში:
POST /cartsპირველი ხაზებით →cartIdPATCH /carts/{cartId}— დამატება, რაოდენობის შეცვლა, ამოშლა (quantity: 0)POST /orderscartId-ით — გაფორმება
ფასები კალათაში ყოველთვის გადაითვლება აქტუალური მენიუს მიხედვით, ასე რომ მოძველებულ თანხას ის ვერ აჩვენებს. კალათა ინახება 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_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_reservationtableId-ით →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-მეტამონაცემებზე.