Kuinka ladata katalogisi SiteChatiin
Jos käytät SiteChatia omalla verkkosivustollasi (et Shopify-kaupassa), voit lähettää rakenteisia tuotetietueita Shoplyyn, jotta ostajat voivat löytää ne SiteChat-keskusteluissa ja tuotehaussa.
Nämä päätepisteet käyttävät samaa Settings → Store owner API secret -salaisuutta kuin muu Shoply Merchant API, ja SiteChatin ylläpidon Product Catalog -sivu voi kutsua niitä sisäänkirjautuneen ylläpitäjän käyttöoikeustunnuksella. Shopify-kaupat synkronoivat edelleen katalogitiedot Shopifyn kautta; nämä latausreitit ovat saatavilla vain SiteChat-tileille, jotka eivät jo synkronoi Magento-katalogia.
SiteChatin ylläpidossa Product Catalog avaa Shopify-tyylisen alueen, jossa on Products, Collections ja Inventory. Voit lisätä tai muokata tuotteita, tuoda CSV-/Excel-tiedostoja, ryhmitellä tuotteita manuaalisiin kokoelmiin ja säätää varastomääriä.
Mitä API-rajapintoja on saatavilla?
| API | Metodi | Mitä se tekee |
|---|---|---|
/merchant/products/batch | POST | Luo tai korvaa kokonaan enintään 50 tuotetta yhdellä pyynnöllä |
/merchant/products | POST | Luo tai korvaa kokonaan yhden tuotteen |
/merchant/products | GET | Lukee takaisin yhden tuodun tuotteen source- ja external_id-arvojen perusteella |
/merchant/products | PATCH | Päivittää osittain yhden tuotteen (lue-yhdistä-kirjoita) |
/merchant/products | DELETE | Arkistoi tuotteen pehmeästi (status=archived) |
/merchant/products/list | GET | Selaa tuotuja tuotteita sivutettuna ylläpitotaulukoita varten |
/merchant/products/images | POST | Lataa tuotekuvan ja palauttaa julkisen HTTPS-URL-osoitteen |
/merchant/collections | GET / POST | Listaa tai luo manuaalisia kokoelmia |
/merchant/collections/{id} | GET / PUT / DELETE | Lukee, korvaa tai arkistoi yhden kokoelman |
/merchant/inventory | GET | Listaa varastorivit (tuote- ja varianttimäärät) |
/merchant/inventory/adjust | POST | Asettaa seurattavan määrän tuotteelle tai variantille |
Onnistuneet tuotetallennukset pyytävät Shoplya rakentamaan kaupan indeksin uudelleen. Kunnes tämä uudelleenrakennus valmistuu, vastaukset ilmoittavat index_status: "pending". Julkaistut tuotteet näkyvät tämän jälkeen sekä tuoteindeksissä että tiedossa, jota SiteChat-keskustelu käyttää.
Kuka voi käyttää näitä API-rajapintoja?
- Kauppasi on oltava SiteChat-tili (
app_platformon SiteChat). - Shopify-kauppa-avaimet (mukaan lukien kaikki
*.myshopify.com-verkkotunnukset) hylätään. - Todennuksen on käytettävä joko kelvollista kaupan omistajan API-salaisuutta tai SiteChatin ylläpitäjän käyttöoikeustunnusta täsmälleen pyynnön
store_key-arvolle. - Shopify Admin API -tunnukset eivät voi kutsua näitä reittejä.
Luo tai kierrätä omistajan salaisuus samalla tavalla kuin muissakin Merchant API -integraatioissa: How to Use the Shoply Merchant API. SiteChatin ylläpitokonsolissa avaa Product Catalog hallitaksesi tuotteita, kokoelmia ja varastoa — tai tuodaksesi CSV- tai Excel-tiedoston — ilman, että sinun tarvitsee hallita salaisuutta itse.
Miten todennus toimii?
Palvelinyhdistimestä
Kutsu APIa luotetusta taustajärjestelmästä HTTPS:n yli. Laita JSON-merkkijono Authorization-otsakkeeseen:
{
"store_key": "YOUR_SITECHAT_STORE_KEY",
"store_owner_api_secrete": "YOUR_STORE_OWNER_API_SECRET"
}store_owner_api_secrete on julkinen kenttänimi, mukaan lukien historiallinen kirjoitusasu. store_owner_api_secret hyväksytään myös. Tämä ei ole Bearer-tunnus.
SiteChatin ylläpidosta
Product Catalog -sivu lähettää sen sijaan sisäänkirjautuneen ylläpitäjäistuntosi:
{
"store_key": "YOUR_SITECHAT_STORE_KEY",
"admin_auth_token": "YOUR_SITECHAT_ACCESS_TOKEN"
}access_token hyväksytään admin_auth_token-aliaksena.
store_key-kyselyparametrin on vastattava otsaketta. Säilytä omistajan salaisuudet vain palvelinpuolen ympäristömuuttujissa — älä koskaan storefront-skriptissä, URL-osoitteessa tai julkisessa repositoriossa.
export SHOPLY_STORE_KEY="your-sitechat-store-key"
export SHOPLY_STORE_OWNER_API_SECRETE="shoply_owner_key_example123.secret-value"Miten lataan tuotteita?
POST https://api.shoplyai.ai/merchant/products/batch?store_key=YOUR_SITECHAT_STORE_KEY
{
"source": "woocommerce-main",
"products": [
{
"external_id": "123",
"title": "Trail shoes",
"description": "Water-resistant hiking shoes.",
"url": "https://example.com/products/trail-shoes",
"currency": "USD",
"price": "49.95",
"original_price": "59.95",
"available": true,
"status": "published",
"images": ["https://example.com/images/trail-shoes.jpg"],
"categories": ["Footwear"],
"metafields": {"material": "Leather"},
"variants": [
{
"external_id": "124",
"title": "Brown / 42",
"sku": "TRAIL-BR-42",
"price": "49.95",
"available": true,
"metafields": {"color": "Brown", "size": "42"}
}
]
}
]
}Pakolliset kentät ja säännöt
- Pakolliset tuotekentät:
external_id,title,url,currency,pricejaavailable.statuson oletuksenapublished. - Valinnainen varasto: aseta
tracks_inventoryarvoontrueja ei-negatiivinenquantitytuotteelle tai variantille. Tällöin Shoply johtaa saatavuuden varastosta (quantity > 0) ja tallentaatotal_inventory-arvon ylläpitolistoja varten. sourcenimeää katalogiyhteyden (ei välttämättä alustan). Käytä vakaata nimeä kutenwoocommerce-main. Sallitut merkit: pienet kirjaimet, numerot, alaviivat ja yhdysmerkit; enintään 64 merkkiä. Ylläpidossa lomakkeella luotujen tuotteiden oletuslähde onadmin.- Tuotteen identiteetti on kaupan, lähteen ja ulkoisen tunnisteen yhdistelmä. Erä- ja yksittäiset
POST-upsertit ovat täysiä korvauksia, eivät korjauksia: pois jätetyt valinnaiset kentät tyhjennetään. KäytäPATCH-metodia osittaisiin päivityksiin. - Erät sisältävät 1–50 tuotetta ja enintään 2 000 000 pyyntötavua. Kunkin tuotteen validoitu JSON on rajoitettu 128 000 tavuun, ja variantteja voi olla enintään 250.
- Suosi desimaalimerkkijonoja hinnoille. Valuutta on kolmikirjaiminen isoilla kirjaimilla kirjoitettu koodi.
- Tuote- ja kuva-URL-osoitteiden on oltava HTTP(S)-muotoisia. Tuonti ei nouda näitä URL-osoitteita puolestasi.
- Käytä julkisia
metafields-kenttiä haettaville tuoteominaisuuksille (SiteChatin vastine Shopifyn tuotemetakentille). Arvojen on oltava pelkkiä merkkijonoja. Vanhaattributeshyväksytään aliaksena. Yksityistä tuotteenmetadata-kenttää ei enää tueta. draft- jaarchived-tuotteet jätetään pois seuraavasta julkaistusta indeksistä. Loppuunmyydyt julkaistut tuotteet pysyvät indeksoituina saatavuustiedon kanssa.- Manuaaliset kokoelmat tallentavat otsikon, kuvauksen, tilan ja luettelon tuotejäsenyyksistä (
source+external_id). Älykkäitä/sääntöpohjaisia kokoelmia ei tueta tässä julkaisussa.
Esimerkkivastaus onnistumisesta
{
"results": [
{
"external_id": "123",
"product_id": "sitechat_product::woocommerce-main::<sha256-of-external-id>",
"status": "stored"
}
],
"index_status": "pending",
"index_revision": 1
}Shoply validoi koko pyynnön ennen kirjoittamista. HTTP 200 voi silti sisältää joitakin failed-tuloksia virheellä error: "storage_error". Tarkista jokainen tulos ja yritä epäonnistuneita tuotteita uudelleen. Jos index_status on request_failed, tallennus onnistui mutta indeksointia ei ajastettu — yritä myös tallennetut tuotteet uudelleen.
Python-esimerkki
import json
import os
import requests
store_key = os.environ["SHOPLY_STORE_KEY"]
headers = {
"Authorization": json.dumps({
"store_key": store_key,
"store_owner_api_secrete": os.environ["SHOPLY_STORE_OWNER_API_SECRETE"],
})
}
response = requests.post(
"https://api.shoplyai.ai/merchant/products/batch",
params={"store_key": store_key},
headers=headers,
json={
"source": "custom",
"products": [{
"external_id": "123",
"title": "Trail shoes",
"url": "https://example.com/products/trail-shoes",
"currency": "USD",
"price": "49.95",
"available": True,
}],
},
timeout=60,
)
response.raise_for_status()
result = response.json()
failed = [item["external_id"] for item in result["results"] if item["status"] != "stored"]
if failed:
raise RuntimeError(f"Products need retry: {failed}")
if result["index_status"] == "request_failed":
raise RuntimeError("Products saved, but retry the batch to request indexing")Miten varmistan tuodun tuotteen?
GET https://api.shoplyai.ai/merchant/products?store_key=YOUR_SITECHAT_STORE_KEY&source=woocommerce-main&external_id=123
Käytä samaa Authorization-otsaketta. Vastaus sisältää schema_version, updated_at, index_status ja normalisoidun product-objektin. Puuttuvat tietueet palauttavat HTTP 404.
Kun taustaindeksoija julkaisee uudelleenrakennuksen, tuotekohtainen takaisinlukutila muuttuu arvoon indexed, excluded (luonnos- tai arkistoiduille tuotteille) tai limit_exceeded. Käytä GET /merchant/products/list ylläpitolistaukseen. Pehmeästi arkistoi DELETE /merchant/products-kutsulla (tai aseta status arvoon archived / draft) pitääksesi tuotteen poissa seuraavasta julkaistusta indeksistä; tässä julkaisussa ei ole kovaa poistoa.
record = requests.get(
"https://api.shoplyai.ai/merchant/products",
params={
"store_key": store_key,
"source": "woocommerce-main",
"external_id": "123",
},
headers=headers,
timeout=30,
)
record.raise_for_status()
print(record.json()["index_status"], record.json()["product"]["title"])Voinko ladata tuotekuvia?
Kyllä. Jos kuva on jo saatavilla pysyvässä julkisessa HTTPS-URL-osoitteessa, lisää kyseinen URL tuotteen images-listaan tai variantin image-kenttään. Julkiset S3 HTTPS -URL-osoitteet toimivat. Raa’at s3://-polut ja lyhytikäiset allekirjoitetut URL-osoitteet eivät toimi.
Jos haluat Shoplyn isännöivän tiedostoa, lataa raa’at kuvatavut taustajärjestelmästäsi:
POST https://api.shoplyai.ai/merchant/products/images?store_key=YOUR_SITECHAT_STORE_KEY
Content-Type: image/pngLähetä raa’at tiedostotavut, ei JSONia, base64:ää tai multipart-lomakedataa. JPEG, PNG ja WebP hyväksytään, enintään 10 MiB ja 20 miljoonaa pikseliä. Animoituja kuvia ei tueta. Shoply muuntaa kuvan WebP-muotoon ja poistaa upotetun metadatan.
with open("trail-shoes.png", "rb") as image_file:
response = requests.post(
"https://api.shoplyai.ai/merchant/products/images",
params={"store_key": store_key},
headers={**headers, "Content-Type": "image/png"},
data=image_file,
timeout=60,
)
response.raise_for_status()
image_url = response.json()["url"]HTTP 201 palauttaa url, content_type, size_bytes, width ja height. Pelkkä kuvan lataaminen ei liitä sitä tuotteeseen eikä pyydä indeksointia. Sisällytä palautettu URL täydelliseen tuotteeseen ja lähetä se uudelleen /merchant/products/batch-reitin kautta.
Saman kuvan lataaminen uudelleen samalle tilille käyttää uudelleen sen URL-osoitetta. Muuttunut kuva saa uuden URL-osoitteen. Tässä julkaisussa ei ole kuvan poistopäätepistettä.
Milloin tuotteet näkyvät chatissa ja haussa?
Onnistuneen erätallennuksen jälkeen Shoply pyytää taustalla indeksin uudelleenrakennusta. Vastaukset ilmoittavat index_status: "pending", kunnes työntekijä julkaisee uuden indeksin. Kiinteää valmistumisaikatakuuta ei ole.
- Julkaistut tuotteet tulevat sekä tuotehakuun että tietoon, jota SiteChat-keskustelu käyttää.
- Luonnos- ja arkistoidut tuotteet suljetaan pois seuraavassa uudelleenrakennuksessa.
- Jos indeksointia ei ajastettu (
index_status: "request_failed"), yritä erää uudelleen niille tuotteille, jotka jo tallentuivat onnistuneesti.
Mitä virheitä minun pitäisi odottaa?
| HTTP status | Merkitys |
|---|---|
403 | Puuttuva, virheellinen, vanhentunut tai peruutettu salaisuus; väärä kauppa; tai muu kuin SiteChat-tili |
404 | Pyydettyä tuotua tuotetta ei ole olemassa |
413 | Pyyntö tai kuva ylittää kokorajan |
415 | Kuvan latauksessa käytettiin tukematonta Content-Type-arvoa |
422 | Virheellisiä kenttiä, päällekkäisiä tunnisteita, animoituja tai liian suuria kuvia, tai mallirajat ylitetty |
503 | Tilapäinen tallennusvirhe |
Salaisuudet vanhenevat 90 päivän jälkeen. Luo korvaava arvo kohdassa Settings → Store owner API secret ennen vanhenemista ja peruuta kaikki salaisuudet, joita et enää tarvitse. Samalla salaisuudella voi myös kutsua analytiikka-, keskustelu- ja tietopäätepisteitä, jotka on dokumentoitu Merchant API guide -oppaassa.
Jos tarvitset apua integraation kanssa, ota yhteyttä Shoply AI:hin.
