get_product_compatibility.json 5.8 KB

12345678
  1. {
  2. "name": "get_product_compatibility",
  3. "description": "Zwraca listę produktów kompatybilnych z podanym pojazdem LUB sprawdza konkretny produkt. Wywołaj podając markę/model/rocznik — bez product_name dostaniesz wszystkie pasujące produkty ze sklepu. Podaj product_name tylko jeśli użytkownik pyta o konkretny produkt. Gdy API zwróci opcje do wyboru (np. silnik lub marka), zaprezentuj je użytkownikowi i wywołaj narzędzie ponownie z wybraną wartością jako odpowiednim parametrem.",
  4. "color": "linear-gradient(rgb(180,120,200), rgb(140,60,180))",
  5. "iconSrc": "",
  6. "schema": "[{\"id\":0,\"property\":\"car_brand\",\"description\":\"Marka pojazdu (np. Toyota, BMW)\",\"type\":\"string\",\"required\":true},{\"id\":1,\"property\":\"car_model\",\"description\":\"Model pojazdu (np. Celica, E46)\",\"type\":\"string\",\"required\":true},{\"id\":2,\"property\":\"car_year\",\"description\":\"Rok produkcji pojazdu (np. 2003)\",\"type\":\"string\",\"required\":true},{\"id\":3,\"property\":\"car_engine\",\"description\":\"Silnik pojazdu — podaj po wybraniu przez użytkownika (np. 1.8 - 141 kW / 192 KM)\",\"type\":\"string\",\"required\":false},{\"id\":4,\"property\":\"product_name\",\"description\":\"Opcjonalnie: pełna nazwa lub fragment nazwy konkretnego produktu do sprawdzenia (np. 'EasyKlima Zestaw + Gaz R134a'). Jeśli użytkownik nie pyta o konkretny produkt — nie podawaj tego parametru, a narzędzie zwróci listę WSZYSTKICH produktów pasujących do podanego auta.\",\"type\":\"string\",\"required\":false}]",
  7. "func": "const fetch = require('node-fetch')\n\nconst base = String(($vars && ($vars.relay_base || $vars.webhook_base)) || 'http://localhost:8080').replace(/\\/$/,'')\nconst secret = String(($vars && $vars.relay_shared_secret) || '')\n\nconst car_brand = typeof $car_brand !== 'undefined' && $car_brand ? String($car_brand) : ''\nconst car_model = typeof $car_model !== 'undefined' && $car_model ? String($car_model) : ''\nconst car_year = typeof $car_year !== 'undefined' && $car_year ? String($car_year) : ''\nconst car_engine = typeof $car_engine !== 'undefined' && $car_engine ? String($car_engine) : ''\nconst product_name = typeof $product_name !== 'undefined' && $product_name ? String($product_name) : ''\n\nif (!car_brand || !car_model || !car_year) return 'Błąd: podaj car_brand, car_model i car_year'\nif (!secret) return 'Błąd: brak $vars.relay_shared_secret'\n\ntry {\n const body = { car_brand, car_model, car_year }\n if (car_engine) body.car_engine = car_engine\n if (product_name) body.product_name = product_name\n\n const res = await fetch(`${base}/tools/get_product_compatibility`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${secret}`\n },\n body: JSON.stringify(body)\n })\n const data = await res.json()\n if (data.ok) {\n const result = data.data\n\n // Opcje do wyboru (np. silnik, marka) — poproś użytkownika o wybór\n if (result && result.error === 'options') {\n const fieldName = result.field || 'pole'\n const options = (result.options || []).map(o => String(o).trim()).filter(Boolean)\n return `Potrzebny wybór dla pola \"${fieldName}\". Dostępne opcje:\\n${options.map((o, i) => `${i + 1}. ${o}`).join('\\n')}\\nZapytaj użytkownika o wybór, a następnie wywołaj narzędzie ponownie z wybraną wartością jako parametr \"${fieldName}\".`\n }\n\n // Lista wszystkich kompatybilnych produktów (brak product_name)\n if (result && Array.isArray(result.compatible_products)) {\n const products = result.compatible_products\n const eng = result.selected_engine || {}\n const gasType = (eng.ac_gas_type || '').toUpperCase() || 'nieznany'\n const carLabel = `${car_brand} ${car_model} ${car_year}${car_engine ? ' ' + car_engine : ''}`\n\n if (products.length === 0) {\n return `Nie znaleziono produktów kompatybilnych z ${carLabel} w naszym sklepie.`\n }\n\n const lines = products.map(p => `- ${p.title} — ${p.price} ${data.currency_symbol || 'zł'} — ${p.permalink}`)\n return `Auto ${carLabel} wymaga gazu: ${gasType}.\\nPasujące produkty ze sklepu:\\n${lines.join('\\n')}\\n\\n[INSTRUKCJA: Na podstawie pytania klienta wybierz z powyższej listy tylko produkty pasujące do jego intencji. Jeśli pytał o gaz lub czynnik — pokaż wyłącznie produkty gazowe i zestawy z gazem. Jeśli pytał o konkretny typ produktu — pokaż tylko ten typ. Jeśli pytał ogólnie co pasuje do auta — pokaż całą listę. Zawsze wyraźnie podaj jaki typ gazu jest wymagany (${gasType}). Nie pytaj użytkownika o dalszy wybór.]`\n }\n\n // Sprawdzenie konkretnego produktu\n if (result && typeof result.fit !== 'undefined') {\n const eng = result.selected_engine || {}\n const prod = result.selected_product || {}\n const carLabel = `${car_brand} ${car_model} ${car_year}${car_engine ? ' ' + car_engine : ''}`\n const gasType = (eng.ac_gas_type || '').toUpperCase()\n\n if (result.fit) {\n return `Produkt \"${prod.title || product_name}\" PASUJE do ${carLabel}.`\n } else {\n const reasons = []\n if (!result.gas_fit) reasons.push(`niezgodność gazu (auto wymaga: ${gasType}, produkt ma: ${(prod.attributes && prod.attributes.pa_rg || []).join('/') || 'brak'})`)\n if (!result.adapter_fit) reasons.push(`niezgodność adaptera (auto: ${eng.adapters || 'brak'}, produkt: ${(prod.attributes && prod.attributes.pa_ra || []).join('/') || 'brak'})`)\n return `Produkt \"${prod.title || product_name}\" NIE PASUJE do ${carLabel}. Powód: ${reasons.join(', ')}.`\n }\n }\n\n return JSON.stringify(result, null, 2)\n }\n return `Info: ${data.message || JSON.stringify(data)}`\n} catch (error) {\n return `Błąd połączenia: ${error?.message || String(error)}`\n}\n"
  8. }