כיצד להשתמש ב-Merchant API של Shoply
ה-Merchant API של Shoply מאפשר לסוחר להשתמש באופן מאובטח בנתוני Shoply שלו בכלי דיווח, בתהליכי תמיכה, בייצואים מתוזמנים וביישומים עסקיים פרטיים.
כל אינטגרציה מזדהה באמצעות אישור בר-ביטול, תחום לחנות, שנוצר ב-Shoply Settings. אין צורך לשתף אסימון גישה של Shopify Admin API, ואינטגרציה יכולה לגשת רק לחנות שהנפיקה את האישור שלה.
מה אפשר לעשות עם ה-Merchant API?
אפשר להשתמש ב-Merchant API כדי:
- לייצא תוצאות ביצועים יומיות, שבועיות או חודשיות לגיליון אלקטרוני או למחסן נתונים.
- לבנות לוח מחוונים פרטי עבור סשנים, צ’אטים, חיפושים, הקלקות על מוצרים, אירועי הוספה לעגלה, רכישות והכנסות משויכות.
- לנטר פעילות לקוחות ולגלות שינויים חריגים במעורבות.
- לסקור סשנים של צ’אט וחיפוש לצורכי תמיכה, מרצ’נדייזינג ועבודה על איכות התשובות.
- לאחזר ציר זמן של שיחה בודדת בעת חקירת בעיה של לקוח.
- ליצור, לעדכן, להציג ולמחוק את הידע המותאם אישית שבו Shoply AI משתמש.
- להוסיף דף אינטרנט חיצוני או קובץ PDF, טקסט או Markdown שהועלה לבסיס הידע.
- להתאים נתוני אירועים ב-UTC לאזור הזמן המקומי של החנות.
מדריך זה מתעד שבעה endpoints. חמישה מהם הם אותם endpoints שבהם משתמשים Shoply Admin → Analytics, בעוד ששניים מנהלים את בסיס הידע:
| API | קטגוריה | מה הוא מחזיר |
|---|---|---|
admin_store_analytics | ביצועים | שורות וסיכומים של ביצועים יומיים, שבועיים או חודשיים |
query_api_usage_count | מעורבות | ספירות פעילות המקובצות לפי דקה או יום ב-UTC |
query_sessionized_chat | שיחות | סיכומי סשנים של צ’אט וחיפוש |
query_log_visualization | שיחות | ציר הזמן המלא של אירועים עבור סשן נבחר אחד |
admin_get_store_metadata | תצורת חנות | אזור הזמן של החנות המשמש להצגה נכונה של נתוני UTC |
admin_store_knowledge | ידע | טקסט מותאם אישית, דפים חיצוניים, קבצים שהועלו, מחיקה וסריקה מחדש |
user_generated_file | קובצי ידע | העלאה של קובץ PDF, טקסט או Markdown לפני רישומו כידע |
גופי התשובה להלן הם דוגמאות מייצגות. השדות והערכים שלכם ישקפו את הפעילות שנרשמה עבור החנות שלכם.
דרישת פריסה: אימות באמצעות סוד של בעל החנות חייב להיות פרוס בשרת ה-API שאליו אתם פונים. אם סוד תקף מחזיר HTTP
403עםNo access_token found, השרת הזה עדיין מריץ את קוד האימות הישן שתומך רק ב-access token.
איך יוצרים סוד API?
- פתחו את ממשק הניהול של Shoply AI.
- עברו אל Settings → Store owner API secret.
- צרו סוד ותנו לו שם שמזהה את האינטגרציה, למשל
Weekly reporting export. - העתיקו את הסוד כשהוא מופיע. Shoply מציג את ערך הטקסט הגלוי פעם אחת בלבד.
כל סוד תקף ל-90 ימים. לחנות יכולים להיות סודות נפרדים עבור אינטגרציות נפרדות, ואפשר לבטל סוד אחד בלי להפריע לאחרים.
שמרו את הערכים האלה כמשתני סביבה בצד השרת:
export SHOPLY_STORE_KEY="your-store.myshopify.com"
export SHOPLY_STORE_OWNER_API_SECRETE="shoply_owner_key_example123.secret-value"השתמשו בדומיין הקבוע myshopify.com של החנות עבור SHOPLY_STORE_KEY, גם אם לקוחות בדרך כלל מבקרים בדומיין מותאם אישית.

איך האימות עובד?
כל בקשת Merchant API שולחת כותרת Authorization שהערך שלה הוא מחרוזת JSON:
{
"store_key": "your-store.myshopify.com",
"store_owner_api_secrete": "YOUR_STORE_OWNER_API_SECRET"
}store_owner_api_secrete הוא שם השדה הציבורי המדויק, כולל האיות ההיסטורי שלו. זה אינו אסימון Bearer. שימו את מחרוזת ה-JSON המלאה ישירות בכותרת Authorization.
שמרו את הסוד רק בקוד backend. אל תמקמו אותו ב-URL, בחבילת דפדפן, במאגר ציבורי, באירוע אנליטיקה או בלוג של היישום.
האם יש חבילות רשמיות ל-Python ול-Node.js?
כן. Shoply מפרסמת שתי חבילות צד-שרת שמוסיפות את האימות הנדרש אוטומטית וחושפות את ה-Merchant API כפונקציות עם טיפוסים. שתי החבילות הן קוד פתוח תחת ארגון GitHub של shoplyai-public.
חבילת Python
החבילה shoply-merchant-api תומכת ב-Python 3.12 ומשתמשת במודלי תגובה של Pydantic v2. התקינו את גרסת 2.1.3 המקובעת:
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"אחזרו את סשני הצ’אט והחיפוש החדשים ביותר כמודלים מטיפוס SessionSummary:
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)החבילה מספקת גם פונקציות עבור אנליטיקה, ספירות פעילות, צירי זמן מלאים של סשנים, אזור הזמן של החנות וניהול ידע. ראו את מדריך מקרי השימוש העסקיים ואת הפניית ה-API .
חבילת Node.js ו-TypeScript
מאגר ה-shoply-merchant-api-js מספק את החבילה @shoplyai/merchant-api עבור Node.js 20 ומעלה. זוהי חבילת ESM עם הצהרות TypeScript מובנות וללא תלויות זמן ריצה. התקינו את גרסת 2.1.3 המקובעת ישירות מ-GitHub:
npm install "github:shoplyai-public/shoply-merchant-api-js#v2.1.3"אחזרו את אותם הסשנים החדשים ביותר משרת 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);
}חבילת npm מכסה את אותם endpoints של Merchant API כמו חבילת Python. ראו את מדריך מקרי השימוש העסקיים ואת הפניית ה-API .
שתי החבילות מיועדות לשירותי backend מהימנים, למשימות מתוזמנות ולכלים פנימיים פרטיים. אל תייבאו אף אחת מהחבילות לקוד storefront ואל תחשפו את סוד ה-API בחבילת דפדפן.
האם אפשר לקרוא ל-HTTP API בלי חבילה?
כן. ה-Merchant API נשאר API סטנדרטי מעל HTTPS. דוגמאות ה-Python ברמה הנמוכה להלן משתמשות ב-Requests כדי שתוכלו לראות את חוזה התקשורת המלא או להשתלב משפה אחרת.
התקינו את Requests אם הסביבה שלכם אינה כוללת אותו כבר:
python -m pip install requestsהעוזר שלמטה מוסיף לכל בקשה את מפתח החנות ואת כותרת האימות:
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הדוגמאות להלן משתמשות בלקוח המשותף הזה. שני העוזרים מוסיפים אוטומטית את מפתח החנות המאומת.
האם אפשר לנהל את הידע של Shoply AI דרך ה-API?
כן. admin_store_knowledge משתמש ב-GET כדי לאחזר ידע וב-POST כדי ליצור, לעדכן, למחוק או לסרוק אותו מחדש. POST שמשתמש במזהה ידע קיים מעדכן את הרשומה הזו; שימוש במזהה חדש יוצר רשומה חדשה.
לפני אוטומציה של עדכונים, תכננו ידע חנות מועיל בעזרת הדוגמאות שבמדריך האימון שלנו.
כתיבות ידע יכולות לשנות תשובות שמוצגות לקונים. השתמשו בסוד ייעודי למערכת שמנהלת ידע, אמתו תוכן לפני שליחתו, ולעולם אל תחשפו את האישור הזה, שמאפשר כתיבה, ב-JavaScript של storefront.
הצגת ידע קיים
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"))תשובה לדוגמה
{
"data": {
"knowledge::shipping-policy": {
"title": "Shipping policy",
"text": "Orders leave our warehouse within two business days.",
"epoch_edit": 1787211246
}
}
}יצירה או עדכון של ידע טקסטואלי מותאם אישית
בחרו מזהה ידע יציב וייחודי. השתמשו באותו מזהה שוב בעת עדכון הרשומה הזו.
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)תשובה לדוגמה
{
"statusCode": 200
}תשובה מוצלחת פירושה שהידע נשמר. אינדוקס לחיפוש עשוי להימשך כמה דקות, ולכן תשובה חדשה לא בהכרח תופיע מיד. אם ה-API מדווח שהתוכן נשמר אך האינדוקס מתעכב, אשרו את הרשומה השמורה עם GET לפני שתנסו שוב את הכתיבה.
הוספת דף אינטרנט חיצוני
השתמשו במזהה שמתחיל ב-external_url::. שימו את כתובת ה-URL המלאה עם http:// או https:// בתוך 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()),
}
},
)העלאה ורישום של קובץ ידע
קובצי ידע חייבים להיות PDF, TXT או Markdown ובגודל קטן מ-5 MB. העלו את הקובץ תחילה, ואז שמרו את מיקום ה-S3 הפרטי שהוחזר כרשומת ידע.
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()),
}
},
)תשובת העלאה לדוגמה
{
"message": "File uploaded successfully",
"statusCode": 200,
"file_url": "s3://shoplystores/your-store.myshopify.com/uploads/shipping-policy.md"
}התייחסו אל file_url כמיקום פרטי אטום שמוחזר על ידי Shoply. אל תבנו אותו בעצמכם ואל תשנו אותו.
מחיקת ידע
המחיקה היא קבועה. אחזרו תחילה את הרשומות הנוכחיות ושלחו רק את המזהים המדויקים שאתם מתכוונים להסיר.
result = shoply_post(
"admin_store_knowledge",
{
"knowledge_ids_to_delete": [
"knowledge::shipping-policy",
"external_url::returns-policy",
"knowledge_file::shipping-policy",
]
},
)בקשת סריקה מחדש של אתר
השתמשו בסריקה מחדש לאחר שהתוכן באתר הסוחר משתנה. בדרך כלל אין צורך בכך אחרי כל עדכון טקסט מותאם אישית.
result = shoply_post(
"admin_store_knowledge",
re_crawl_ind="true",
)מקרי שימוש עסקיים
- לסנכרן הנחיות לגבי משלוחים, החזרות, אחריות, מידות או טיפול במוצר ממערכת תוכן פנימית.
- לפרסם מידע זמני על קמפיינים או חגים בלי להעתיק אותו ידנית ל-Shoply Admin.
- להוסיף דף מדיניות או מסמך מאושר לבסיס הידע כחלק מזרימת עבודה של פריסה.
- להסיר הנחיות מיושנות מיד כשמדיניות או קידום מכירות מסתיימים.
דוגמאות ל-Merchant API
1. אחזור אנליטיקת ביצועים
admin_store_analytics מניע את טבלת Analytics → Summary. הוא מחזיר סשנים, צ’אטים, חיפושים, הקלקות, אירועי הוספה לעגלה, רכישות והכנסות משויכות.
Endpoint
GET https://api.shoplyai.ai/admin_store_analyticsפרמטרי שאילתה
| Parameter | Required | Description |
|---|---|---|
store_key | Yes | נוסף על ידי הלקוח המשותף |
report_type | Yes | daily, weekly, או monthly |
start_date | Daily/weekly | תאריך UTC כולל בפורמט YYYYMMDD |
end_date | Daily/weekly | תאריך UTC כולל בפורמט YYYYMMDD |
דוחות חודשיים משתמשים בהיסטוריה החודשית השמורה של Shoply ואינם דורשים גבולות תאריכים.
דוגמת 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")תשובה לדוגמה
{
"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"
}הכנסה יכולה לכלול יותר ממטבע אחד. התייחסו ל-revenue כטקסט לתצוגה. השתמשו ב-revenue_usd כשאתם צריכים את ערך ה-USD המנורמל שמוצג על ידי Shoply.
מקרי שימוש עסקיים
- לשלוח לסוחר או לצוות המסחר האלקטרוני סיכום יומי של השפעת המכירות.
- להשוות חיפושים, הקלקות על מוצרים, אירועי הוספה לעגלה ורכישות כדי למצוא נשירה במשפך.
- להזין לוח מחוונים שבועי או חודשי של בינה עסקית בלי לגרד את דף Shoply Admin.
- לעקוב אחר הכנסות משויכות לאורך זמן ולהשוות אותן לשינויים במרצ’נדייזינג או בקמפיינים.
2. אחזור אזור הזמן של החנות
admin_get_store_metadata מספק את תג אזור הזמן שמוצג ב-Analytics → Chat & Search History. הדף משתמש בו כדי לתרגם פעילות UTC לשעה המקומית של החנות.
Endpoint
GET https://api.shoplyai.ai/admin_get_store_metadataפרמטרי שאילתה
| Parameter | Required | Description |
|---|---|---|
store_key | Yes | נוסף על ידי הלקוח המשותף |
metadata_key | Yes | השתמשו בערך המילולי time_zone |
דוגמת Python
timezone_payload = shoply_get(
"admin_get_store_metadata",
metadata_key="time_zone",
)
timezone = timezone_payload["data"]
print(timezone["ianaTimezone"], timezone["timezoneOffsetMinutes"])תשובה לדוגמה
{
"data": {
"ianaTimezone": "America/Los_Angeles",
"timezoneOffset": -7,
"timezoneOffsetMinutes": -420
},
"statusCode": 200
}מקרי שימוש עסקיים
- לקבץ פעילות UTC לאותם ימים קלנדריים מקומיים שהסוחר רואה ב-Analytics.
- לתזמן ייצואים יומיים לאחר שהיום המקומי של החנות הסתיים.
- לסמן דוחות עם אזור זמן חד-משמעי של IANA כגון
America/Los_Angeles.
היסטי אזור זמן יכולים להשתנות בגלל כללי שעון קיץ. העדיפו את ianaTimezone כאשר מערכת הדיווח שלכם תומכת בכך, במקום לשמור לצמיתות היסט מספרי אחד.
3. אחזור ספירות פעילות
query_api_usage_count מחזיר פעילות חנות המקובצת לפי תאריך UTC או לפי דקת ה-UTC המקורית. זהו גם המקור של תרשים הפעילות ב-Analytics → Chat & Search History.
Endpoint
GET https://api.shoplyai.ai/query_api_usage_countפרמטרי שאילתה
| Parameter | Required | Description |
|---|---|---|
start_dt_utc | Yes | זמן התחלה ב-UTC כ-YYYY-MM-DD HH:mm:ss |
end_dt_utc | Yes | זמן סיום ב-UTC כ-YYYY-MM-DD HH:mm:ss |
groupby | No | utc_date עבור סכומים יומיים או utc_date_time עבור שורות לפי דקה |
דוגמת 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)תשובה לדוגמה
{
"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
}
]
}השורות כוללות את מוני הפעילות הזמינים עבור התקופה הזו, כגון שאלות צ’אט, חיפושים, הקלקות, אירועי הוספה לעגלה ואירועי checkout. מונים ללא פעילות עשויים להיעדר במקום להיות מוגדרים לאפס.
מקרי שימוש עסקיים
- לבנות תרשים פעילות שעתי או יומי כמו זה שב-Chat & Search History.
- לזהות קפיצות חריגות בתעבורה או ירידות פתאומיות במעורבות לקוחות.
- להשוות נפח חיפוש מוצרים להקלקות, אירועי הוספה לעגלה ו-checkouts.
- להעריך מתי צוותי תמיכה ומרצ’נדייזינג צריכים לסקור את התקופות העמוסות ביותר.
4. אחזור סיכומי סשנים של צ’אט וחיפוש
query_sessionized_chat מחזיר רשומה קומפקטית אחת לכל סשן לקוח. הוא גם מניע את רשימת הסשנים ב-Analytics → Chat & Search History.
Endpoint
GET https://api.shoplyai.ai/query_sessionized_chatפרמטרי שאילתה
| Parameter | Required | Description |
|---|---|---|
start_dt_utc | Yes | זמן התחלה ב-UTC, או הערך המילולי undefined |
end_dt_utc | Yes | זמן סיום ב-UTC, או הערך המילולי undefined |
num_sessions | No | מספר הסשנים לבחירה כאשר אחד מהגבולות הוא undefined |
ScanIndexForward | No | השתמשו ב-false כדי לבחור קודם את הסשנים החדשים ביותר |
אחזור 40 הסשנים האחרונים
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", ""))אחזור סשנים בטווח 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",
)כאשר שני גבולות הזמן קיימים, ה-API מחזיר סשנים בכל הטווח המלא; num_sessions אינו מגביל את השאילתה התחומה הזו.
תשובה לדוגמה
{
"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
}
]
}שדות אופציונליים משתנים בין סשנים. שמרו את customer_id, start_timestamp_ms ו-end_timestamp_ms אם אתם מתכננים לאחזר את ציר הזמן המלא.
מקרי שימוש עסקיים
- לסקור מדגם של שיחות אחרונות לצורך איכות תשובות והכשרת תמיכה.
- למצוא שאלות חוזרות של לקוחות שצריכות להשפיע על תיאורי מוצרים או FAQs.
- לזהות סשנים בעלי כוונת רכישה גבוהה הכוללים חיפושים, הקלקות על מוצרים או פעולות קנייה אחרות.
- לייצא שורה אחת לכל סשן לניתוח מגמות תוך הימנעות ממטען גדול יותר ברמת האירוע.
5. אחזור סשן מלא אחד
העבירו סיכום נבחר אל query_log_visualization כדי לאחזר את אירועי הלקוח, ה-AI, החיפוש והמסחר שלו.
Endpoint
GET https://api.shoplyai.ai/query_log_visualizationפרמטרי שאילתה
| Parameter | Required | Description |
|---|---|---|
date_time_utc_start | Yes | התחלת סשן בפורמט UTC YYYY-MM-DD HH:mm:ss |
date_time_utc_end | Yes | סיום סשן בפורמט UTC YYYY-MM-DD HH:mm:ss |
session_id | No | ה-customer_id של הסיכום, המשמש עבור רשומות היסטוריה ישנות יותר |
start_timestamp_ms | Recommended | חותמת הזמן המדויקת במילישניות של תחילת הסשן מהסיכום |
דוגמת 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"))תשובה לדוגמה
{
"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": {}
}
]
}ציר הזמן יכול להכיל שאלות של לקוחות, תשובות AI, תוצאות חיפוש, הקלקות על מוצרים, אירועי הוספה לעגלה, אירועי checkout והשתתפות של נציג אנושי. השתמשו ב-server_timestamp_ms כדי לסדר סוגי אירועים מעורבים. רשומות ישנות יותר עשויות להכיל פחות שדות.
מקרי שימוש עסקיים
- לבדוק בדיוק מה לקוח שאל ומה Shoply ענה במהלך חקירת תמיכה.
- לסקור את איכות התשובה יחד עם תוצאות החיפוש והמוצרים שהוצגו לקונה.
- לשחזר את המסע משאלה להקלקה, להוספה לעגלה או ל-checkout.
- לאבחן סשן אחד שדווח על ידי לקוח בלי לחפש בהיסטוריה לא קשורה.
האם אפשר להשתמש באותו סוד לכל API?
כן. store_owner_api_secrete תקף תחום לחנות אחת ופועל בכל ה-endpoints של Merchant API שלעיל. עבור חשבונות SiteChat, אותו סוד גם מאמת את ממשקי העלאת הקטלוג. להפעלה בטוחה יותר, השתמשו בסודות נפרדים עם שמות נפרדים עבור מערכות נפרדות — למשל, אחד לייצוא נתונים לילי ואחר ללוח מחוונים פנימי.
אם אינטגרציה אחת יוצאת משימוש או נפרצת, בטלו רק את הסוד שלה ב-Shoply Settings. האינטגרציות האחרות ימשיכו לעבוד.
מה צריך לדעת על תפוגה, פרטיות ושגיאות?
כדאי גם לעיין במקורות הנתונים והפרטיות של Shoply כדי להבין איזה מידע זמין לתשובות ללקוחות.
- תוקף סודות API של בעל החנות פג לאחר 90 ימים. צרו תחליף ועדכנו את האינטגרציה לפני תאריך התפוגה שלה.
- תקופת השמירה הסטנדרטית של Shoply להיסטוריית צ’אט וחיפוש היא גם 90 ימים. תפוגת סוד ושמירת נתונים הן מדיניות נפרדות.
- תשובות היסטוריה עשויות להכיל נתונים אישיים, כולל מזהי לקוחות, כתובות אימייל, מיקום משוער, שאלות ופעילות קנייה. אחסנו ועבדו אותם בהתאם למדיניות הפרטיות שלכם ולחוק החל.
- HTTP
403פירושו שהסוד חסר, לא תקף, פג תוקפו, בוטל או שייך לחנות אחרת. - HTTP
422בדרך כלל פירושו שחסר פרמטר שאילתה נדרש או שיש לו שם שגוי. - HTTP
500או תשובה עםstatusCode: 500פירושם שהבקשה הגיעה ל-Shoply אך לא ניתן היה להשלים אותה. נסו שוב בכשלים זמניים עם backoff ופנו אלינו אם השגיאה נמשכת. - השתמשו בטווחי UTC תחומים לייצואים ולעבודות חוזרות כדי שהתשובות יישארו ניתנות לניהול.
האם חיפוש מוצרים הוא חלק מה-Merchant API?
ל-API הציבורי של חיפוש המוצרים של Shoply יש אימות וחוזה בקשה שונים. ראו How to Access Shoply AI Search Through the API אם אתם רוצים תוצאות חיפוש מוצרים עבור חוויית משתמש מול קונים במקום נתוני סוחר פרטיים.
האם סוחרי SiteChat יכולים להעלות קטלוג מוצרים?
כן. חשבונות SiteChat יכולים להעלות מוצרים מובנים ותמונות מוצרים עם אותו סוד API של בעל החנות. אותם endpoints של הקטלוג מתועדים בנפרד ב-How to Upload Your Catalog for SiteChat. חנויות Shopify ממשיכות לסנכרן מוצרים דרך Shopify ואינן משתמשות בנתיבי העלאה אלה.
לקבלת עזרה עם אינטגרציה, צרו קשר עם Shoply AI.
