Cara Menggunakan Shoply Merchant API
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:
| API | Kategori | Apa yang dikembalikan |
|---|---|---|
admin_store_analytics | Performa | Baris dan total performa harian, mingguan, atau bulanan |
query_api_usage_count | Keterlibatan | Jumlah aktivitas yang dikelompokkan berdasarkan menit atau hari UTC |
query_sessionized_chat | Percakapan | Ringkasan sesi chat dan pencarian |
query_log_visualization | Percakapan | Linimasa peristiwa lengkap untuk satu sesi yang dipilih |
admin_get_store_metadata | Konfigurasi toko | Zona waktu toko yang digunakan untuk menampilkan data UTC dengan benar |
admin_store_knowledge | Pengetahuan | Teks kustom, halaman eksternal, file yang diunggah, penghapusan, dan crawl ulang |
user_generated_file | File pengetahuan | Mengunggah 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
403denganNo access_token found, server tersebut masih menjalankan kode autentikasi lama yang hanya mendukung access token.
Bagaimana Cara Membuat API Secret?
- Buka admin Shoply AI Anda.
- Buka Settings → Store owner API secret.
- Buat secret dan beri nama yang mengidentifikasi integrasi tersebut, seperti
Weekly reporting export. - Salin secret saat ditampilkan. Shoply hanya menampilkan nilai plaintext satu kali.
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:
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.

Bagaimana Cara Kerja Autentikasi?
Setiap permintaan Merchant API mengirim header Authorization yang nilainya berupa string 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:
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:
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:
npm install "github:shoplyai-public/shoply-merchant-api-js#v2.1.3"Ambil sesi terbaru yang sama dari server Node.js:
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:
python -m pip install requestsHelper di bawah menambahkan store key dan header autentikasi ke setiap permintaan:
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 resultContoh-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
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
{
"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.
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
{
"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.
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.
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
{
"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.
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.
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
GET https://api.shoplyai.ai/admin_store_analyticsParameter Query
| Parameter | Wajib | Deskripsi |
|---|---|---|
store_key | Ya | Ditambahkan oleh klien bersama |
report_type | Ya | daily, weekly, atau monthly |
start_date | Harian/mingguan | Tanggal UTC inklusif dengan format YYYYMMDD |
end_date | Harian/mingguan | Tanggal UTC inklusif dengan format YYYYMMDD |
Laporan bulanan menggunakan riwayat bulanan tersimpan milik Shoply dan tidak memerlukan batas tanggal.
Contoh 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
{
"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
GET https://api.shoplyai.ai/admin_get_store_metadataParameter Query
| Parameter | Wajib | Deskripsi |
|---|---|---|
store_key | Ya | Ditambahkan oleh klien bersama |
metadata_key | Ya | Gunakan nilai literal time_zone |
Contoh Python
timezone_payload = shoply_get(
"admin_get_store_metadata",
metadata_key="time_zone",
)
timezone = timezone_payload["data"]
print(timezone["ianaTimezone"], timezone["timezoneOffsetMinutes"])Contoh Respons
{
"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
GET https://api.shoplyai.ai/query_api_usage_countParameter Query
| Parameter | Wajib | Deskripsi |
|---|---|---|
start_dt_utc | Ya | Waktu mulai UTC sebagai YYYY-MM-DD HH:mm:ss |
end_dt_utc | Ya | Waktu akhir UTC sebagai YYYY-MM-DD HH:mm:ss |
groupby | Tidak | utc_date untuk total harian atau utc_date_time untuk baris per menit |
Contoh 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
{
"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
GET https://api.shoplyai.ai/query_sessionized_chatParameter Query
| Parameter | Wajib | Deskripsi |
|---|---|---|
start_dt_utc | Ya | Waktu mulai UTC, atau nilai literal undefined |
end_dt_utc | Ya | Waktu akhir UTC, atau nilai literal undefined |
num_sessions | Tidak | Jumlah sesi yang dipilih saat salah satu batas bernilai undefined |
ScanIndexForward | Tidak | Gunakan false untuk memilih sesi terbaru terlebih dahulu |
Mengambil 40 Sesi Terbaru
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
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
{
"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
GET https://api.shoplyai.ai/query_log_visualizationParameter Query
| Parameter | Wajib | Deskripsi |
|---|---|---|
date_time_utc_start | Ya | Awal sesi diformat sebagai UTC YYYY-MM-DD HH:mm:ss |
date_time_utc_end | Ya | Akhir sesi diformat sebagai UTC YYYY-MM-DD HH:mm:ss |
session_id | Tidak | customer_id dari ringkasan, digunakan untuk record riwayat yang lebih lama |
start_timestamp_ms | Direkomendasikan | Timestamp mulai milidetik persis dari ringkasan |
Contoh 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
{
"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
403berarti secret tidak ada, tidak valid, kedaluwarsa, dicabut, atau milik toko yang berbeda. - HTTP
422biasanya berarti parameter query yang wajib tidak ada atau memiliki nama yang salah. - HTTP
500atau respons denganstatusCode: 500berarti 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.
