Cara Menggunakan Shoply Merchant API

A secure merchant key unlocks an API connector carrying storefront chat, analytics, and knowledge into backend code

Shoply Merchant API memungkinkan merchant menggunakan data Shoply mereka sendiri secara aman dalam alat pelaporan, alur kerja dukungan, ekspor terjadwal, dan aplikasi bisnis privat.

Setiap integrasi melakukan autentikasi dengan kredensial yang dapat dicabut dan dibatasi pada toko, yang dibuat di Shoply Settings. Anda tidak perlu membagikan token akses Shopify Admin API, dan sebuah integrasi hanya dapat mengakses toko yang menerbitkan kredensial tersebut.

Apa yang Bisa Saya Lakukan Dengan Merchant API?

Anda dapat menggunakan Merchant API untuk:

  • Mengekspor hasil performa harian, mingguan, atau bulanan ke spreadsheet atau data warehouse.
  • Membangun dasbor privat untuk sesi, chat, pencarian, klik produk, peristiwa add-to-cart, pembelian, dan pendapatan yang diatribusikan.
  • Memantau aktivitas pelanggan dan menemukan perubahan yang tidak biasa dalam keterlibatan.
  • Meninjau sesi chat dan pencarian untuk dukungan, merchandising, dan pekerjaan kualitas jawaban.
  • Mengambil linimasa percakapan individual saat menyelidiki masalah pelanggan.
  • Membuat, memperbarui, menampilkan daftar, dan menghapus pengetahuan kustom yang digunakan oleh Shoply AI.
  • Menambahkan halaman web eksternal atau file PDF, teks, atau Markdown yang diunggah ke knowledge base.
  • Menyelaraskan data peristiwa UTC dengan zona waktu lokal toko.

Panduan ini mendokumentasikan tujuh endpoint. Lima di antaranya adalah endpoint yang sama yang digunakan oleh Shoply Admin → Analytics, sementara dua lainnya mengelola knowledge base:

APIKategoriApa yang dikembalikan
admin_store_analyticsPerformaBaris dan total performa harian, mingguan, atau bulanan
query_api_usage_countKeterlibatanJumlah aktivitas yang dikelompokkan berdasarkan menit atau hari UTC
query_sessionized_chatPercakapanRingkasan sesi chat dan pencarian
query_log_visualizationPercakapanLinimasa peristiwa lengkap untuk satu sesi yang dipilih
admin_get_store_metadataKonfigurasi tokoZona waktu toko yang digunakan untuk menampilkan data UTC dengan benar
admin_store_knowledgePengetahuanTeks kustom, halaman eksternal, file yang diunggah, penghapusan, dan crawl ulang
user_generated_fileFile pengetahuanMengunggah file PDF, teks, atau Markdown sebelum didaftarkan sebagai pengetahuan

Isi body respons di bawah ini adalah contoh representatif. Field dan nilai Anda akan mencerminkan aktivitas yang tercatat untuk toko Anda.

Persyaratan deployment: Autentikasi secret pemilik toko harus sudah di-deploy pada server API yang Anda panggil. Jika secret yang valid mengembalikan HTTP 403 dengan No access_token found, server tersebut masih menjalankan kode autentikasi lama yang hanya mendukung access token.

Bagaimana Cara Membuat API Secret?

  1. Buka admin Shoply AI Anda.
  2. Buka Settings → Store owner API secret.
  3. Buat secret dan beri nama yang mengidentifikasi integrasi tersebut, seperti Weekly reporting export.
  4. Salin secret saat ditampilkan. Shoply hanya menampilkan nilai plaintext satu kali.
Shoply Settings showing the Store owner API secret panel, Create API secret button, expiry date, and revoke control

Setiap secret berlaku selama 90 hari. Sebuah toko dapat memiliki secret terpisah untuk integrasi yang berbeda, dan Anda dapat mencabut satu secret tanpa mengganggu yang lain.

Simpan nilai-nilai ini sebagai environment variable sisi server:

bash
export SHOPLY_STORE_KEY="your-store.myshopify.com" export SHOPLY_STORE_OWNER_API_SECRETE="shoply_owner_key_example123.secret-value"

Gunakan domain permanen myshopify.com milik toko untuk SHOPLY_STORE_KEY, meskipun pembeli biasanya mengunjungi domain kustom.

Settings → Store owner API secret contains the Create API secret control. Keep generated secrets private.
Settings → Store owner API secret contains the Create API secret control. Keep generated secrets private. Click the screenshot to view it at full size.

Bagaimana Cara Kerja Autentikasi?

Setiap permintaan Merchant API mengirim header Authorization yang nilainya berupa string JSON:

json
{ "store_key": "your-store.myshopify.com", "store_owner_api_secrete": "YOUR_STORE_OWNER_API_SECRET" }

store_owner_api_secrete adalah nama field publik yang persis sama, termasuk ejaan historisnya. Ini bukan token Bearer. Letakkan seluruh string JSON langsung di header Authorization.

Simpan secret hanya di kode backend. Jangan meletakkannya di URL, browser bundle, repositori publik, event analytics, atau log aplikasi.

Apakah Ada Paket Python dan Node.js Resmi?

Ya. Shoply menerbitkan dua paket sisi server yang secara otomatis menambahkan autentikasi yang diperlukan dan mengekspos Merchant API sebagai fungsi bertipe. Kedua paket tersebut bersifat open source di organisasi GitHub shoplyai-public.

Paket Python

Paket shoply-merchant-api mendukung Python 3.12 dan menggunakan model respons Pydantic v2. Instal rilis 2.1.3 yang dipin:

bash
python3.12 -m venv .venv source .venv/bin/activate python -m pip install "git+https://github.com/shoplyai-public/shoply-merchant-api.git@v2.1.3"

Ambil sesi chat dan pencarian terbaru sebagai model SessionSummary bertipe:

python
import os from shoply_merchant_api import ShoplyMerchantClient with ShoplyMerchantClient( store_key=os.environ["SHOPLY_STORE_KEY"], api_secret=os.environ["SHOPLY_STORE_OWNER_API_SECRETE"], ) as shoply: session_response = shoply.list_sessions(limit=40) for conversation in session_response.data: print(conversation.customer_id, conversation.user_questions)

Paket ini juga menyediakan fungsi untuk analytics, jumlah aktivitas, linimasa sesi lengkap, zona waktu toko, dan pengelolaan pengetahuan. Lihat panduan use case bisnis  dan referensi API .

Paket Node.js dan TypeScript

Repositori shoply-merchant-api-js menyediakan paket @shoplyai/merchant-api untuk Node.js 20 atau lebih baru. Ini adalah paket ESM dengan deklarasi TypeScript bawaan dan tanpa dependensi runtime. Instal rilis 2.1.3 yang dipin langsung dari GitHub:

bash
npm install "github:shoplyai-public/shoply-merchant-api-js#v2.1.3"

Ambil sesi terbaru yang sama dari server Node.js:

typescript
import { ShoplyMerchantClient } from "@shoplyai/merchant-api"; const storeKey = process.env.SHOPLY_STORE_KEY; const apiSecret = process.env.SHOPLY_STORE_OWNER_API_SECRETE; if (!storeKey || !apiSecret) { throw new Error("SHOPLY_STORE_KEY and SHOPLY_STORE_OWNER_API_SECRETE are required"); } const shoply = new ShoplyMerchantClient({ storeKey, apiSecret, }); const sessionResponse = await shoply.listSessions({ limit: 40 }); for (const conversation of sessionResponse.data) { console.log(conversation.customer_id, conversation.user_questions); }

Paket npm ini mencakup endpoint Merchant API yang sama seperti paket Python. Lihat panduan use case bisnis  dan referensi API .

Kedua paket ini ditujukan untuk layanan backend tepercaya, job terjadwal, dan alat internal privat. Jangan mengimpor salah satu paket ke kode storefront atau mengekspos API secret di browser bundle.

Bisakah Saya Memanggil HTTP API Tanpa Paket?

Ya. Merchant API tetap merupakan API HTTPS standar. Contoh Python level rendah di bawah menggunakan Requests agar Anda dapat melihat kontrak wire lengkap atau melakukan integrasi dari bahasa lain.

Instal Requests jika environment Anda belum menyertakannya:

bash
python -m pip install requests

Helper di bawah menambahkan store key dan header autentikasi ke setiap permintaan:

python
import json import os from typing import Any import requests BASE_URL = "https://api.shoplyai.ai" STORE_KEY = os.environ["SHOPLY_STORE_KEY"] STORE_OWNER_API_SECRETE = os.environ["SHOPLY_STORE_OWNER_API_SECRETE"] session = requests.Session() session.headers.update({ "Authorization": json.dumps({ "store_key": STORE_KEY, "store_owner_api_secrete": STORE_OWNER_API_SECRETE, }) }) def shoply_get(api_name: str, **params: Any) -> dict[str, Any]: """Call one store-scoped Shoply API and surface HTTP or API-level errors.""" response = session.get( f"{BASE_URL}/{api_name}", params={"store_key": STORE_KEY, **params}, timeout=30, ) response.raise_for_status() payload = response.json() if payload.get("error") is not None or payload.get("statusCode") not in (None, 200): raise RuntimeError(payload.get("error", "Shoply API request failed")) return payload def shoply_post( api_name: str, payload: dict[str, Any] | None = None, **params: Any, ) -> dict[str, Any]: """Write store-scoped data and surface HTTP or API-level errors.""" response = session.post( f"{BASE_URL}/{api_name}", params={"store_key": STORE_KEY, **params}, json=payload, timeout=60, ) response.raise_for_status() result = response.json() if result.get("error") is not None or result.get("statusCode") not in (None, 200): raise RuntimeError(result.get("error", "Shoply API request failed")) return result

Contoh-contoh di bawah menggunakan klien bersama ini. Kedua helper secara otomatis menambahkan store key yang telah diautentikasi.

Bisakah Saya Mengelola Pengetahuan Shoply AI Melalui API?

Ya. admin_store_knowledge menggunakan GET untuk mengambil pengetahuan dan POST untuk membuat, memperbarui, menghapus, atau melakukan crawl ulang. POST yang menggunakan ID pengetahuan yang sudah ada akan memperbarui entri tersebut; menggunakan ID baru akan membuat entri baru.

Sebelum mengotomatisasi pembaruan, rencanakan pengetahuan toko yang berguna dengan contoh dalam panduan pelatihan kami.

Penulisan pengetahuan dapat mengubah jawaban yang ditampilkan kepada pembeli. Gunakan secret khusus untuk sistem yang mengelola pengetahuan, validasi konten sebelum mengirimkannya, dan jangan pernah mengekspos kredensial yang memiliki kemampuan tulis ini dalam JavaScript storefront.

Tampilkan Daftar Pengetahuan yang Ada

python
knowledge_payload = shoply_get( "admin_store_knowledge", knowledge_id_to_retrieve="_ALL_", ) for knowledge_id, knowledge in knowledge_payload["data"].items(): print(knowledge_id, knowledge.get("title"))

Contoh Respons

json
{ "data": { "knowledge::shipping-policy": { "title": "Shipping policy", "text": "Orders leave our warehouse within two business days.", "epoch_edit": 1787211246 } } }

Membuat atau Memperbarui Pengetahuan Teks Kustom

Pilih ID pengetahuan yang stabil dan unik. Gunakan kembali ID yang sama saat memperbarui entri tersebut.

python
from time import time knowledge_id = "knowledge::shipping-policy" result = shoply_post( "admin_store_knowledge", { knowledge_id: { "title": "Shipping policy", "text": ( "Orders leave our warehouse within two business days. " "Standard delivery normally takes three to five business days." ), "epoch_edit": int(time()), } }, ) print(result)

Contoh Respons

json
{ "statusCode": 200 }

Respons yang berhasil berarti pengetahuan telah disimpan. Pengindeksan pencarian dapat memerlukan beberapa menit, jadi jawaban baru mungkin tidak langsung muncul. Jika API melaporkan bahwa konten telah disimpan tetapi pengindeksan tertunda, konfirmasikan entri yang tersimpan dengan GET sebelum mencoba kembali penulisannya.

Menambahkan Halaman Web Eksternal

Gunakan ID yang diawali dengan external_url::. Letakkan URL lengkap http:// atau https:// di text.

python
from time import time result = shoply_post( "admin_store_knowledge", { "external_url::returns-policy": { "title": "Returns and exchanges", "text": "https://www.example.com/policies/returns", "epoch_edit": int(time()), } }, )

Mengunggah dan Mendaftarkan File Pengetahuan

File pengetahuan harus berupa PDF, TXT, atau Markdown dan berukuran kurang dari 5 MB. Unggah file terlebih dahulu, lalu simpan lokasi S3 privat yang dikembalikan sebagai entri pengetahuan.

python
from pathlib import Path from time import time file_path = Path("shipping-policy.md") with file_path.open("rb") as file_handle: upload_response = session.post( f"{BASE_URL}/user_generated_file", params={"store_key": STORE_KEY, "folder": "knowledge_file"}, files={"file": (file_path.name, file_handle, "text/markdown")}, timeout=60, ) upload_response.raise_for_status() uploaded = upload_response.json() if uploaded.get("statusCode") != 200: raise RuntimeError(uploaded.get("error", "Knowledge file upload failed")) shoply_post( "admin_store_knowledge", { "knowledge_file::shipping-policy": { "title": "Shipping policy document", "text": uploaded["file_url"], "epoch_edit": int(time()), } }, )

Contoh Respons Upload

json
{ "message": "File uploaded successfully", "statusCode": 200, "file_url": "s3://shoplystores/your-store.myshopify.com/uploads/shipping-policy.md" }

Perlakukan file_url sebagai lokasi privat opaque yang dikembalikan oleh Shoply. Jangan membuat atau mengubahnya sendiri.

Menghapus Pengetahuan

Penghapusan bersifat permanen. Ambil entri saat ini terlebih dahulu dan kirim hanya ID persis yang memang ingin Anda hapus.

python
result = shoply_post( "admin_store_knowledge", { "knowledge_ids_to_delete": [ "knowledge::shipping-policy", "external_url::returns-policy", "knowledge_file::shipping-policy", ] }, )

Meminta Crawl Ulang Situs Web

Gunakan crawl ulang setelah konten di situs web merchant berubah. Ini biasanya tidak diperlukan setelah setiap pembaruan teks kustom.

python
result = shoply_post( "admin_store_knowledge", re_crawl_ind="true", )

Use Case Bisnis

  • Sinkronkan panduan pengiriman, pengembalian, garansi, ukuran, atau perawatan produk dari sistem konten internal.
  • Publikasikan informasi kampanye sementara atau liburan tanpa menyalinnya secara manual ke Shoply Admin.
  • Tambahkan halaman web kebijakan atau dokumen yang disetujui ke knowledge base sebagai bagian dari alur kerja deployment.
  • Hapus panduan usang segera setelah kebijakan atau promosi berakhir.

Contoh Merchant API

1. Mengambil Analytics Performa

admin_store_analytics mendukung tabel Analytics → Summary. Endpoint ini mengembalikan sesi, chat, pencarian, klik, peristiwa add-to-cart, pembelian, dan pendapatan yang diatribusikan.

Endpoint

text
GET https://api.shoplyai.ai/admin_store_analytics

Parameter Query

ParameterWajibDeskripsi
store_keyYaDitambahkan oleh klien bersama
report_typeYadaily, weekly, atau monthly
start_dateHarian/mingguanTanggal UTC inklusif dengan format YYYYMMDD
end_dateHarian/mingguanTanggal UTC inklusif dengan format YYYYMMDD

Laporan bulanan menggunakan riwayat bulanan tersimpan milik Shoply dan tidak memerlukan batas tanggal.

Contoh Python

python
daily_report = shoply_get( "admin_store_analytics", report_type="daily", start_date="20260801", end_date="20260820", ) for row in daily_report["data"]: print(row["date"], row["sessions"], row["purchases"], row["revenue"]) print("Totals:", daily_report["totals"]) # Weekly rows use the Monday of each week as their date label. weekly_report = shoply_get( "admin_store_analytics", report_type="weekly", start_date="20260701", end_date="20260820", ) # Monthly requests do not need start_date or end_date. monthly_report = shoply_get("admin_store_analytics", report_type="monthly")

Contoh Respons

json
{ "data": [ { "date": "20260820", "sessions": 42, "chats": 18, "searches": 24, "clicks": 11, "add_to_cart": 5, "purchases": 2, "revenue": "$168.00", "revenue_usd": "$168.00" } ], "totals": { "date": "totals", "sessions": 42, "chats": 18, "searches": 24, "clicks": 11, "add_to_cart": 5, "purchases": 2, "revenue": "$168.00", "revenue_usd": "$168.00" }, "report_type": "daily" }

Pendapatan dapat berisi lebih dari satu mata uang. Perlakukan revenue sebagai teks tampilan. Gunakan revenue_usd saat Anda memerlukan nilai USD yang dinormalisasi seperti yang ditampilkan oleh Shoply.

Use Case Bisnis

  • Kirim ringkasan dampak penjualan harian kepada merchant atau tim ecommerce.
  • Bandingkan pencarian, klik produk, peristiwa add-to-cart, dan pembelian untuk menemukan penurunan di funnel.
  • Masukkan data ke dasbor business intelligence mingguan atau bulanan tanpa melakukan scraping pada halaman Shoply Admin.
  • Lacak pendapatan yang diatribusikan dari waktu ke waktu dan bandingkan dengan perubahan merchandising atau kampanye.

2. Mengambil Zona Waktu Toko

admin_get_store_metadata menyediakan badge zona waktu yang ditampilkan di Analytics → Chat & Search History. Halaman tersebut menggunakannya untuk menerjemahkan aktivitas UTC ke waktu lokal toko.

Endpoint

text
GET https://api.shoplyai.ai/admin_get_store_metadata

Parameter Query

ParameterWajibDeskripsi
store_keyYaDitambahkan oleh klien bersama
metadata_keyYaGunakan nilai literal time_zone

Contoh Python

python
timezone_payload = shoply_get( "admin_get_store_metadata", metadata_key="time_zone", ) timezone = timezone_payload["data"] print(timezone["ianaTimezone"], timezone["timezoneOffsetMinutes"])

Contoh Respons

json
{ "data": { "ianaTimezone": "America/Los_Angeles", "timezoneOffset": -7, "timezoneOffsetMinutes": -420 }, "statusCode": 200 }

Use Case Bisnis

  • Kelompokkan aktivitas UTC ke hari kalender lokal yang sama seperti yang dilihat merchant di Analytics.
  • Jadwalkan ekspor harian setelah hari lokal toko berakhir.
  • Beri label laporan dengan zona waktu IANA yang tidak ambigu seperti America/Los_Angeles.

Offset zona waktu dapat berubah karena aturan daylight-saving. Utamakan ianaTimezone saat sistem pelaporan Anda mendukungnya, alih-alih menyimpan satu offset numerik secara permanen.

3. Mengambil Jumlah Aktivitas

query_api_usage_count mengembalikan aktivitas toko yang dikelompokkan berdasarkan tanggal UTC atau menit UTC asli. Endpoint ini juga menjadi sumber untuk grafik aktivitas di Analytics → Chat & Search History.

Endpoint

text
GET https://api.shoplyai.ai/query_api_usage_count

Parameter Query

ParameterWajibDeskripsi
start_dt_utcYaWaktu mulai UTC sebagai YYYY-MM-DD HH:mm:ss
end_dt_utcYaWaktu akhir UTC sebagai YYYY-MM-DD HH:mm:ss
groupbyTidakutc_date untuk total harian atau utc_date_time untuk baris per menit

Contoh Python

python
activity = shoply_get( "query_api_usage_count", start_dt_utc="2026-08-01 00:00:00", end_dt_utc="2026-08-20 23:59:59", groupby="utc_date", ) for row in activity["data"]: print(row)

Contoh Respons

json
{ "data": [ { "utc_date": "2026-08-20", "QA": 18, "CHAT": 18, "SEARCH": 20, "CACHED_SEARCH": 4, "PRODUCT_SEARCH": 22, "CLICK": 11, "ADD_TO_CART": 5, "CHECKOUT": 2 } ] }

Baris mencakup penghitung aktivitas yang tersedia untuk periode tersebut, seperti pertanyaan chat, pencarian, klik, peristiwa add-to-cart, dan peristiwa checkout. Penghitung tanpa aktivitas mungkin tidak ada alih-alih disetel ke nol.

Use Case Bisnis

  • Bangun grafik aktivitas per jam atau harian seperti yang ada di Chat & Search History.
  • Deteksi lonjakan traffic yang tidak biasa atau penurunan mendadak dalam keterlibatan pelanggan.
  • Bandingkan volume pencarian produk dengan klik, peristiwa add-to-cart, dan checkout.
  • Perkirakan kapan tim dukungan dan merchandising harus meninjau periode tersibuk.

4. Mengambil Ringkasan Sesi Chat dan Pencarian

query_sessionized_chat mengembalikan satu record ringkas per sesi pelanggan. Endpoint ini juga mendukung daftar sesi di Analytics → Chat & Search History.

Endpoint

text
GET https://api.shoplyai.ai/query_sessionized_chat

Parameter Query

ParameterWajibDeskripsi
start_dt_utcYaWaktu mulai UTC, atau nilai literal undefined
end_dt_utcYaWaktu akhir UTC, atau nilai literal undefined
num_sessionsTidakJumlah sesi yang dipilih saat salah satu batas bernilai undefined
ScanIndexForwardTidakGunakan false untuk memilih sesi terbaru terlebih dahulu

Mengambil 40 Sesi Terbaru

python
summary_payload = shoply_get( "query_sessionized_chat", start_dt_utc="undefined", end_dt_utc="undefined", num_sessions=40, ScanIndexForward="false", ) sessions = summary_payload["data"] for conversation in sessions: print(conversation["customer_id"], conversation.get("user_questions", ""))

Mengambil Sesi dalam Rentang UTC

python
summary_payload = shoply_get( "query_sessionized_chat", start_dt_utc="2026-08-20 00:00:00", end_dt_utc="2026-08-20 23:59:59", ScanIndexForward="false", )

Saat kedua batas waktu tersedia, API mengembalikan sesi dalam rentang lengkap; num_sessions tidak membatasi query yang memiliki batas ini.

Contoh Respons

json
{ "data": [ { "customer_id": "customer-or-session-id", "user_questions": "Do you have this in blue?\nWhen will it ship?", "start_timestamp_ms": 1787184000000, "end_timestamp_ms": 1787184065000, "session_types": "product information, click", "customer_email": null, "customer_info": {}, "sentiment": "positive", "num_questions": 2, "num_searches": 1, "num_clicks": 1 } ] }

Field opsional bervariasi menurut sesi. Simpan customer_id, start_timestamp_ms, dan end_timestamp_ms jika Anda berencana mengambil linimasa lengkap.

Use Case Bisnis

  • Tinjau sampel percakapan terbaru untuk kualitas jawaban dan pelatihan dukungan.
  • Temukan pertanyaan pelanggan yang berulang dan seharusnya memengaruhi copy produk atau FAQ.
  • Identifikasi sesi dengan intent tinggi yang berisi pencarian, klik produk, atau tindakan belanja lainnya.
  • Ekspor satu baris per sesi untuk analisis tren sambil menghindari payload level peristiwa yang lebih besar.

5. Mengambil Satu Sesi Lengkap

Teruskan ringkasan yang dipilih ke query_log_visualization untuk mengambil peristiwa pelanggan, AI, pencarian, dan commerce-nya.

Endpoint

text
GET https://api.shoplyai.ai/query_log_visualization

Parameter Query

ParameterWajibDeskripsi
date_time_utc_startYaAwal sesi diformat sebagai UTC YYYY-MM-DD HH:mm:ss
date_time_utc_endYaAkhir sesi diformat sebagai UTC YYYY-MM-DD HH:mm:ss
session_idTidakcustomer_id dari ringkasan, digunakan untuk record riwayat yang lebih lama
start_timestamp_msDirekomendasikanTimestamp mulai milidetik persis dari ringkasan

Contoh Python

python
from datetime import datetime, timezone def utc_from_milliseconds(timestamp_ms: int) -> str: """Format a Shoply millisecond timestamp for the history API.""" value = datetime.fromtimestamp(timestamp_ms / 1000, tz=timezone.utc) return value.strftime("%Y-%m-%d %H:%M:%S") selected = sessions[0] timeline_payload = shoply_get( "query_log_visualization", date_time_utc_start=utc_from_milliseconds(selected["start_timestamp_ms"]), date_time_utc_end=utc_from_milliseconds(selected["end_timestamp_ms"]), session_id=selected["customer_id"], start_timestamp_ms=selected["start_timestamp_ms"], ) for event in timeline_payload["data"]: print(event.get("server_timestamp_ms"), event.get("action_type"))

Contoh Respons

json
{ "data": [ { "action_type": "QA", "session_id": "customer-or-session-id", "utc_date_time": "2026-08-20 00:00:00", "start_timestamp_ms": 1787184000000, "server_timestamp_ms": 1787184000123, "Q": { "question": "Do you have this in blue?", "question_context": {} }, "task_id": "task-id", "list_tokens": [ { "data_type": "LLMOutput", "data": "Yes. These blue options are currently available." } ], "dict_search_results": {} } ] }

Linimasa dapat berisi pertanyaan pelanggan, jawaban AI, hasil pencarian, klik produk, peristiwa add-to-cart, peristiwa checkout, dan partisipasi agen manusia. Gunakan server_timestamp_ms untuk mengurutkan berbagai jenis peristiwa campuran. Record lama mungkin berisi lebih sedikit field.

Use Case Bisnis

  • Audit secara tepat apa yang ditanyakan pelanggan dan apa yang dijawab Shoply selama investigasi dukungan.
  • Tinjau kualitas jawaban bersama hasil pencarian dan produk yang ditampilkan kepada pembeli.
  • Rekonstruksi perjalanan dari pertanyaan ke klik, add-to-cart, atau checkout.
  • Diagnosis satu sesi yang dilaporkan oleh pelanggan tanpa menelusuri riwayat lain yang tidak terkait.

Bisakah Saya Menggunakan Satu Secret untuk Setiap API?

Ya. store_owner_api_secrete yang valid dibatasi pada satu toko dan berfungsi di seluruh endpoint Merchant API di atas. Untuk akun SiteChat, secret yang sama juga mengautentikasi API upload katalog. Untuk operasi yang lebih aman, gunakan secret bernama terpisah untuk sistem yang berbeda—misalnya, satu untuk ekspor data malam hari dan satu lagi untuk dasbor internal.

Jika satu integrasi dihentikan atau mengalami kompromi, cabut hanya secret miliknya di Shoply Settings. Integrasi lainnya akan tetap berfungsi.

Apa yang Perlu Saya Ketahui Tentang Kedaluwarsa, Privasi, dan Error?

Tinjau juga sumber data dan privasi Shoply untuk memahami informasi apa saja yang tersedia bagi jawaban pelanggan.

  • Secret API pemilik toko kedaluwarsa setelah 90 hari. Buat pengganti dan perbarui integrasi sebelum tanggal kedaluwarsanya.
  • Periode retensi standar riwayat chat dan pencarian Shoply juga 90 hari. Kedaluwarsa secret dan retensi data adalah kebijakan yang terpisah.
  • Respons riwayat dapat berisi data pribadi, termasuk pengidentifikasi pelanggan, alamat email, perkiraan lokasi, pertanyaan, dan aktivitas belanja. Simpan dan proses sesuai dengan kebijakan privasi Anda dan hukum yang berlaku.
  • HTTP 403 berarti secret tidak ada, tidak valid, kedaluwarsa, dicabut, atau milik toko yang berbeda.
  • HTTP 422 biasanya berarti parameter query yang wajib tidak ada atau memiliki nama yang salah.
  • HTTP 500 atau respons dengan statusCode: 500 berarti permintaan telah mencapai Shoply tetapi tidak dapat diselesaikan. Coba lagi kegagalan sementara dengan backoff dan hubungi kami jika error berlanjut.
  • Gunakan rentang UTC yang dibatasi untuk ekspor dan job berulang agar respons tetap mudah dikelola.

Apakah Pencarian Produk Termasuk Bagian dari Merchant API?

API pencarian produk publik Shoply memiliki autentikasi dan kontrak permintaan yang berbeda. Lihat Cara Mengakses Shoply AI Search Melalui API jika Anda menginginkan hasil pencarian produk untuk pengalaman yang berhadapan dengan pembeli, bukan data merchant privat.

Bisakah Merchant SiteChat Mengunggah Katalog Produk?

Ya. Akun SiteChat dapat mengunggah produk terstruktur dan gambar produk dengan secret API pemilik toko yang sama. Endpoint katalog tersebut didokumentasikan secara terpisah di Cara Mengunggah Katalog Anda untuk SiteChat. Toko Shopify tetap menyinkronkan produk melalui Shopify dan tidak menggunakan rute upload tersebut.

Untuk bantuan integrasi, hubungi Shoply AI.