Menyu importi va API

Menyuni Excel, CSV yoki JSON fayldan to‘ldirish, rasmlarni fayl nomi bo‘yicha biriktirish, matnlarni SI bilan yozish va menyuni o‘z dasturlaringizdan API va MCP orqali yuklash.

Menyuni har bir taomni alohida emas, birdaniga to‘ldirish mumkin: Excel, CSV yoki JSON jadvalidan. Import har bir taomni r_keeperda topadi, nima o‘zgarishini ko‘rsatadi va faqat «Qo‘llash» tugmasidan keyin yozadi. Narxlar va menyu tarkibi avvalgidek r_keeperdan olinadi, import faqat bezakni o‘zgartiradi: uch tildagi nomlar, tavsiflar, tarkib, kategoriyalar, belgilar va rasmlar.

Admin paneldagi import

  1. Menyu admin panelini oching, Menyu → Menyu importi bo‘limi. U restoran serveri admin panelida ham, bulutli admin panelda ham bor.
  2. «Shablon / joriy menyuni yuklab olish» tugmasini bosing. r_keeperdagi barcha taomlar va allaqachon to‘ldirilganlar bilan Excel fayl yuklanadi. Bu ham shablon, ham zaxira nusxa.
  3. Kerakli kataklarni to‘ldiring va faylni «Faylni yuklash» tugmasi bilan yuklang. Bo‘sh kataklar hech narsani o‘zgartirmaydi.
  4. Tekshiruvni ko‘ring: har bir qator uchun qaysi r_keeper taomi topilgani, nima o‘zgarishi va izohlar ko‘rinadi. Xatoli qatorlar yozilmaydi.
  5. «Qo‘llash» ni bosing. O‘zgarishlar planshetlarga va QR-menyuga navbatdagi sinxronlashda yetib boradi.

Ustunlar

Ustun Bu nima
sifr Taomning r_keeperdagi identifikatori. Taomni topishning eng aniq usuli
Код Taomning r_keeperdagi kodi
Код/sifr Ikkalasi uchun bitta ustun: avval sifr, keyin kod bo‘yicha qidiramiz
Название r_keeper Kassadagi nomi. sifr va kod bo‘lmasa, taom shu nom bo‘yicha qidiriladi (registrga qaramay)
Название RU, UZ, EN Har bir tildagi menyu nomi
Описание RU, UZ, EN Qisqa tavsif
Состав RU, UZ, EN Vergul bilan tarkib
Категория Menyu bo‘limining nomi. Bunday bo‘lim bo‘lmasa, u yaratiladi
Метки spicy, veg, halal, new, hit vergul bilan
Скрыто Taomni ko‘rsatmaslik uchun 1
Фото (URL) Rasm havolalari probel bilan

Ikkinchi «Разделы» varag‘i (ixtiyoriy) bo‘limlarni belgilaydi: uch tildagi nom, ota bo‘lim, tartib, bo‘lim yashirinmi.

Sarlavhalarni o‘zbekcha ham yozish mumkin: «Nomi UZ», «Tavsif UZ», «Tarkibi UZ», «Kategoriya», «Rasm».

Rasmlar

  • Fayllar. «Rasm qo‘shish» va «Rasmlar papkasi» tugmalari rasmlarni taomlarga fayl nomi bo‘yicha biriktiradi: Плов.jpg (nomi), 101.jpg (kod), Плов (2).jpg (o‘sha taomning ikkinchi rasmi). Fayllardagi rasmlar avval yuklanganlarga qo‘shiladi.
  • Havolalar. «Фото (URL)» ustunidagi havolalar taom rasmlarini almashtiradi. Brauzer rasmni o‘zi yuklaydi, sayt ruxsat bermasa, uni server yuklaydi.
  • Barcha rasmlar brauzerda qo‘lda yuklashdagidek siqiladi: to‘liq rasm 1280 px gacha va ro‘yxatlar uchun 420 px kichik nusxa. O‘lcham bo‘yicha cheklov yo‘q.

SI bilan matnlar

Restoraningiz uchun SI ulangan bo‘lsa, importda va «Taomlar» sahifasida «SI bilan to‘ldirish» tugmasi bor. SI r_keeperdagi taom nomi, bo‘limi va narxi bo‘yicha rus, o‘zbek va ingliz tillarida nom, qisqa tavsif va tarkib yozadi. Matn bir tilda allaqachon bo‘lsa, SI uni tarjima qiladi. «To‘ldirilgan maydonlarni qayta yozish» belgilanmaguncha to‘ldirilgan maydonlar o‘zgarmaydi. Har bir taklifni saqlashdan oldin tuzatish yoki belgini olib tashlash mumkin. SI ni SBG qo‘llab-quvvatlash xizmati ulaydi, kunlik taomlar limiti bor.

O‘z dasturlaringiz uchun API

Xuddi shu import kabinetdagi shaxsiy kalit bilan dasturlarga ham ochiq (kalitlar haqida: White Server va AI). Kalit Bearer-token sifatida ishlaydi. Egasi roli kerak: menejer kaliti rad javobini oladi.

curl -X POST https://rkpr.uz/api/r/<restoran id>/menu/batch \
  -H "Authorization: Bearer <kalit>" -H "Content-Type: application/json" \
  -d '{
    "dryRun": true,
    "categories": [{ "name_ru": "Супы", "name_uz": "Sho‘rvalar", "name_en": "Soups" }],
    "products": [
      { "rk7_sifr": 1001, "name_uz": "Toshkent palovi", "category": "Супы", "tags": ["hit"] },
      { "code": 102, "description_ru": "Тянутая лапша с говядиной", "images": ["https://example.com/lagman.jpg"] },
      { "name": "Самса", "name_en": "Samsa" }
    ]
  }'

Javob: har bir qator bo‘yicha hisobot.

{
  "dryRun": true, "ok": false,
  "summary": { "categories": { "create": 1, "update": 0, "unchanged": 0, "error": 0 },
               "products": { "create": 1, "update": 1, "unchanged": 0, "error": 1 },
               "images": { "stored": 0, "reused": 0, "download": 1, "skipped": 0 } },
  "categories": [{ "index": 0, "input": "Супы", "action": "create", "changes": ["name_ru", "name_uz", "name_en"], "warnings": [] }],
  "products": [
    { "index": 0, "input": "1001", "rk7_sifr": 1001, "rk7_name": "Плов", "matchedBy": "sifr", "action": "create", "changes": ["name_uz", "tags", "category_id", "name_ru"], "warnings": [] },
    { "index": 1, "input": "102", "rk7_sifr": 1002, "rk7_name": "Лагман", "matchedBy": "code", "action": "update", "changes": ["description_ru", "images"], "warnings": [] },
    { "index": 2, "input": "Самса", "action": "error", "error": "название «Самса» подходит к нескольким блюдам r_keeper: Самса (sifr 13), Самса (sifr 14). Укажите rk7_sifr", "warnings": [] }
  ]
}

Qoidalar:

  • Taomni qidirish: rk7_sifr, keyin code, keyin aniq name, keyin registrga qaramay name. Nom bir nechta taomga mos kelsa, qator xato bilan qaytadi.
  • Bo‘limni qidirish: id, keyin rk7_sifr, keyin registrga qaramay name_ru. Topilmasa, yaratiladi. parent va category nom yoki id qabul qiladi.
  • Faqat yuborilgan maydonlar o‘zgaradi. Bo‘sh satr maydonni tozalaydi. images taom rasmlari ro‘yxatini almashtiradi.
  • Rasmlar: http(s) havola (bulut 15 soniyada 10 MB gacha yuklaydi, tur mazmuni bo‘yicha tekshiriladi: JPEG, PNG yoki WebP), data:image/...;base64,... yoki allaqachon yuklangan rasm xeshi. Bulut rasmlarni siqmaydi, shuning uchun 1,5 MB dan katta rasm saqlanmaydi, hisobotda ogohlantirish bo‘ladi. Katta rasmlarni admin panel orqali yuklang, u yerda ular siqiladi. Butun so‘rov 6 MB dan oshmasin.
  • dryRun: true faqat tekshiradi va hech narsa yozmaydi. Rasm havolalari bunda yuklanmaydi.
  • O‘zgarishlar restoran serveri va planshetlarga oddiy sinxronlash bilan yetib boradi.

Joriy menyuni xuddi shu formatda yuklab olish (yuklab olib, tuzatib, qayta yuborish qulay):

curl -H "Authorization: Bearer <kalit>" https://rkpr.uz/api/r/<restoran id>/menu/export

Javob kodlari: 401 kalit yo‘q yoki noto‘g‘ri, 403 restoran sizniki emas yoki sizda menejer roli, 400 bo‘sh so‘rov.

MCP

Kabinetning MCP serverida xuddi shu formatdagi menu_export va menu_batch vositalari bor. AI-yordamchi, masalan, menyuni o‘qib, tavsiflar yozib, ularni yuklashi mumkin: avval dryRun: true bilan, keyin sizning tasdig‘ingiz bilan.