Shoply Merchant API Nasıl Kullanılır
Shoply Merchant API, bir satıcının kendi Shoply verilerini raporlama araçlarında, destek iş akışlarında, zamanlanmış dışa aktarımlarda ve özel iş uygulamalarında güvenli bir şekilde kullanmasını sağlar.
Her entegrasyon, Shoply Ayarları’nda oluşturulan, iptal edilebilir ve mağaza kapsamlı bir kimlik bilgisiyle kimlik doğrulaması yapar. Bir Shopify Admin API erişim belirtecini paylaşmanız gerekmez ve bir entegrasyon yalnızca kimlik bilgisini veren mağazaya erişebilir.
Merchant API ile Neler Yapabilirim?
Merchant API’yi şunlar için kullanabilirsiniz:
- Günlük, haftalık veya aylık performans sonuçlarını bir e-tabloya ya da veri ambarına aktarmak.
- Oturumlar, sohbetler, aramalar, ürün tıklamaları, sepete ekleme olayları, satın almalar ve ilişkilendirilmiş gelir için özel bir gösterge paneli oluşturmak.
- Müşteri etkinliğini izlemek ve etkileşimdeki olağandışı değişiklikleri keşfetmek.
- Destek, ürün sergileme ve yanıt kalitesi çalışmaları için sohbet ve arama oturumlarını incelemek.
- Bir müşteri sorununu araştırırken tek bir konuşmanın zaman çizelgesini almak.
- Shoply AI tarafından kullanılan özel bilgileri oluşturmak, güncellemek, listelemek ve silmek.
- Bilgi tabanına harici bir web sayfası veya yüklenmiş bir PDF, metin ya da Markdown dosyası eklemek.
- UTC olay verilerini mağazanın yerel saat dilimiyle hizalamak.
Bu kılavuz yedi endpoint’i belgeler. Bunların beşi Shoply Admin → Analytics tarafından kullanılan endpoint’lerin aynısıdır, ikisi ise bilgi tabanını yönetir:
| API | Kategori | Ne döndürür |
|---|---|---|
admin_store_analytics | Performans | Günlük, haftalık veya aylık performans satırları ve toplamları |
query_api_usage_count | Etkileşim | UTC dakika veya güne göre gruplanmış etkinlik sayıları |
query_sessionized_chat | Konuşmalar | Sohbet ve arama oturumu özetleri |
query_log_visualization | Konuşmalar | Seçilen tek bir oturum için tam olay zaman çizelgesi |
admin_get_store_metadata | Mağaza yapılandırması | UTC verilerini doğru görüntülemek için kullanılan mağaza saat dilimi |
admin_store_knowledge | Bilgi | Özel metin, harici sayfalar, yüklenen dosyalar, silme ve yeniden tarama |
user_generated_file | Bilgi dosyaları | Bilgi olarak kaydedilmeden önce bir PDF, metin veya Markdown dosyası yükler |
Aşağıdaki yanıt gövdeleri temsili örneklerdir. Alanlarınız ve değerleriniz, mağazanız için kaydedilen etkinliği yansıtacaktır.
Dağıtım gereksinimi: Mağaza sahibi sırrıyla kimlik doğrulaması, çağırdığınız API sunucusunda dağıtılmış olmalıdır. Geçerli bir sır HTTP
403ile birlikteNo access_token founddöndürüyorsa, o sunucu hâlâ yalnızca eski access-token kimlik doğrulama kodunu çalıştırıyordur.
API Sırrını Nasıl Oluştururum?
- Shoply AI yönetim panelinizi açın.
- Settings → Store owner API secret bölümüne gidin.
- Bir sır oluşturun ve
Weekly reporting exportgibi entegrasyonu tanımlayan bir ad verin. - Göründüğünde sırrı kopyalayın. Shoply düz metin değeri yalnızca bir kez gösterir.
Her sır 90 gün boyunca geçerlidir. Bir mağaza, farklı entegrasyonlar için ayrı sırlara sahip olabilir ve diğerlerini kesintiye uğratmadan tek bir sırrı iptal edebilirsiniz.
Bu değerleri sunucu tarafı ortam değişkenleri olarak kaydedin:
export SHOPLY_STORE_KEY="your-store.myshopify.com"
export SHOPLY_STORE_OWNER_API_SECRETE="shoply_owner_key_example123.secret-value"SHOPLY_STORE_KEY için, müşteriler normalde özel bir alan adını ziyaret etse bile mağazanın kalıcı myshopify.com alan adını kullanın.

Kimlik Doğrulama Nasıl Çalışır?
Her Merchant API isteği, değeri bir JSON dizesi olan bir Authorization başlığı gönderir:
{
"store_key": "your-store.myshopify.com",
"store_owner_api_secrete": "YOUR_STORE_OWNER_API_SECRET"
}store_owner_api_secrete, geçmişteki yazımı da dahil olmak üzere tam genel alan adıdır. Bu bir Bearer belirteci değildir. Tam JSON dizesini doğrudan Authorization başlığına koyun.
Sırrı yalnızca arka uç kodunda tutun. Onu bir URL’ye, tarayıcı paketine, herkese açık depoya, analiz olayına veya uygulama günlüğüne koymayın.
Resmî Python ve Node.js Paketleri Var mı?
Evet. Shoply, gerekli kimlik doğrulamayı otomatik olarak ekleyen ve Merchant API’yi türlendirilmiş işlevler olarak sunan iki sunucu tarafı paketi yayımlar. Her iki paket de shoplyai-public GitHub organizasyonu altında açık kaynaklıdır.
Python Paketi
shoply-merchant-api paketi Python 3.12’yi destekler ve Pydantic v2 yanıt modellerini kullanır. Sabitlenmiş 2.1.3 sürümünü yükleyin:
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"En yeni sohbet ve arama oturumlarını türlendirilmiş SessionSummary modelleri olarak alın:
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 ayrıca analizler, etkinlik sayıları, tam oturum zaman çizelgeleri, mağaza saat dilimi ve bilgi yönetimi için de işlevler sağlar. iş kullanım senaryoları kılavuzuna ve API referansına bakın.
Node.js ve TypeScript Paketi
shoply-merchant-api-js deposu, Node.js 20 veya daha yenisi için @shoplyai/merchant-api paketini sağlar. Yerleşik TypeScript bildirimlerine sahip bir ESM paketidir ve çalışma zamanı bağımlılığı yoktur. Sabitlenmiş 2.1.3 sürümünü doğrudan GitHub’dan yükleyin:
npm install "github:shoplyai-public/shoply-merchant-api-js#v2.1.3"Aynı en yeni oturumları bir Node.js sunucusundan alın:
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 paketi, Python paketiyle aynı Merchant API endpoint’lerini kapsar. iş kullanım senaryoları kılavuzuna ve API referansına bakın.
Her iki paket de güvenilir arka uç hizmetleri, zamanlanmış işler ve özel iç araçlar içindir. Bu paketlerin hiçbirini vitrin koduna aktarmayın veya API sırrını tarayıcı paketinde açığa çıkarmayın.
Bir Paket Olmadan HTTP API’yi Çağırabilir miyim?
Evet. Merchant API standart bir HTTPS API olarak kalır. Aşağıdaki düşük seviyeli Python örnekleri, tam aktarım sözleşmesini görebilmeniz veya başka bir dilden entegrasyon yapabilmeniz için Requests kullanır.
Ortamınız zaten içermiyorsa Requests’i yükleyin:
python -m pip install requestsAşağıdaki yardımcı, mağaza anahtarını ve kimlik doğrulama başlığını her isteğe ekler:
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 resultAşağıdaki örnekler bu paylaşılan istemciyi kullanır. Her iki yardımcı da kimliği doğrulanmış mağaza anahtarını otomatik olarak ekler.
API Üzerinden Shoply AI Bilgisini Yönetebilir miyim?
Evet. admin_store_knowledge, bilgiyi almak için GET, oluşturmak, güncellemek, silmek veya yeniden taratmak için POST kullanır. Mevcut bir bilgi kimliği kullanan bir POST o girdiyi günceller; yeni bir kimlik kullanmak ise yeni bir tane oluşturur.
Güncellemeleri otomatikleştirmeden önce, eğitim kılavuzumuzdaki örneklerle yararlı mağaza bilgisini planlayın.
Bilgi yazma işlemleri, müşterilere gösterilen yanıtları değiştirebilir. Bilgiyi yöneten sistem için özel bir sır kullanın, göndermeden önce içeriği doğrulayın ve yazma yetkisine sahip bu kimlik bilgisini vitrin JavaScript’inde asla açığa çıkarmayın.
Mevcut Bilgiyi Listele
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"))Örnek Yanıt
{
"data": {
"knowledge::shipping-policy": {
"title": "Shipping policy",
"text": "Orders leave our warehouse within two business days.",
"epoch_edit": 1787211246
}
}
}Özel Metin Bilgisini Oluştur veya Güncelle
Kararlı ve benzersiz bir bilgi kimliği seçin. O girdiyi güncellerken aynı kimliği yeniden kullanın.
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)Örnek Yanıt
{
"statusCode": 200
}Başarılı bir yanıt, bilginin kaydedildiği anlamına gelir. Arama indekslemesi birkaç dakika sürebilir, bu nedenle yeni bir yanıt hemen görünmeyebilir. API içeriğin kaydedildiğini ancak indekslemenin geciktiğini bildirirse, yazma işlemini yeniden denemeden önce saklanan girdiyi GET ile doğrulayın.
Harici Bir Web Sayfası Ekle
external_url:: ile başlayan bir kimlik kullanın. Tam http:// veya https:// URL’sini text içine koyun.
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()),
}
},
)Bir Bilgi Dosyası Yükle ve Kaydet
Bilgi dosyaları PDF, TXT veya Markdown olmalı ve 5 MB’tan küçük olmalıdır. Önce dosyayı yükleyin, ardından dönen özel S3 konumunu bir bilgi girdisi olarak kaydedin.
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()),
}
},
)Örnek Yükleme Yanıtı
{
"message": "File uploaded successfully",
"statusCode": 200,
"file_url": "s3://shoplystores/your-store.myshopify.com/uploads/shipping-policy.md"
}file_url değerini Shoply tarafından döndürülen opak özel bir konum olarak değerlendirin. Onu kendiniz oluşturmayın veya değiştirmeyin.
Bilgiyi Sil
Silme kalıcıdır. Önce mevcut girdileri alın ve yalnızca kaldırmayı amaçladığınız tam kimlikleri gönderin.
result = shoply_post(
"admin_store_knowledge",
{
"knowledge_ids_to_delete": [
"knowledge::shipping-policy",
"external_url::returns-policy",
"knowledge_file::shipping-policy",
]
},
)Web Sitesinin Yeniden Taranmasını İste
Satıcının web sitesindeki içerik değiştiğinde yeniden tarama kullanın. Her özel metin güncellemesinden sonra normalde gerekli değildir.
result = shoply_post(
"admin_store_knowledge",
re_crawl_ind="true",
)İş Kullanım Senaryoları
- Kargo, iade, garanti, beden veya ürün bakım yönergelerini dahili bir içerik sisteminden senkronize etmek.
- Geçici kampanya veya tatil bilgilerini manuel olarak Shoply Admin’e kopyalamadan yayımlamak.
- Bir dağıtım iş akışının parçası olarak bir politika web sayfasını veya onaylı belgeyi bilgi tabanına eklemek.
- Bir politika veya promosyon sona erer ermez eski yönergeleri kaldırmak.
Merchant API Örnekleri
1. Performans Analitiklerini Al
admin_store_analytics, Analytics → Summary tablosunu destekler. Oturumlar, sohbetler, aramalar, tıklamalar, sepete ekleme olayları, satın almalar ve ilişkilendirilmiş gelir döndürür.
Endpoint
GET https://api.shoplyai.ai/admin_store_analyticsSorgu Parametreleri
| Parametre | Gerekli | Açıklama |
|---|---|---|
store_key | Evet | Paylaşılan istemci tarafından eklenir |
report_type | Evet | daily, weekly veya monthly |
start_date | Günlük/haftalık | YYYYMMDD biçiminde dahil UTC tarihi |
end_date | Günlük/haftalık | YYYYMMDD biçiminde dahil UTC tarihi |
Aylık raporlar, Shoply’nin saklanan aylık geçmişini kullanır ve tarih sınırları gerektirmez.
Python Örneği
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")Örnek Yanıt
{
"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"
}Gelir birden fazla para birimi içerebilir. revenue değerini görüntüleme metni olarak değerlendirin. Shoply tarafından gösterilen normalize edilmiş USD değerine ihtiyaç duyduğunuzda revenue_usd kullanın.
İş Kullanım Senaryoları
- Satıcıya veya e-ticaret ekibine günlük bir satış etkisi özeti göndermek.
- Dönüşüm hunisindeki kaybı bulmak için aramaları, ürün tıklamalarını, sepete ekleme olaylarını ve satın almaları karşılaştırmak.
- Shoply Admin sayfasını kazımadan haftalık veya aylık bir iş zekâsı gösterge panelini beslemek.
- İlişkilendirilmiş geliri zaman içinde izlemek ve bunu ürün sergileme veya kampanya değişiklikleriyle karşılaştırmak.
2. Mağaza Saat Dilimini Al
admin_get_store_metadata, Analytics → Chat & Search History bölümünde gösterilen saat dilimi rozetini sağlar. Sayfa bunu UTC etkinliğini mağazanın yerel saatine çevirmek için kullanır.
Endpoint
GET https://api.shoplyai.ai/admin_get_store_metadataSorgu Parametreleri
| Parametre | Gerekli | Açıklama |
|---|---|---|
store_key | Evet | Paylaşılan istemci tarafından eklenir |
metadata_key | Evet | Birebir time_zone değerini kullanın |
Python Örneği
timezone_payload = shoply_get(
"admin_get_store_metadata",
metadata_key="time_zone",
)
timezone = timezone_payload["data"]
print(timezone["ianaTimezone"], timezone["timezoneOffsetMinutes"])Örnek Yanıt
{
"data": {
"ianaTimezone": "America/Los_Angeles",
"timezoneOffset": -7,
"timezoneOffsetMinutes": -420
},
"statusCode": 200
}İş Kullanım Senaryoları
- UTC etkinliğini, satıcının Analytics’te gördüğü aynı yerel takvim günlerine göre gruplamak.
- Mağazanın yerel günü bittikten sonra günlük dışa aktarımları zamanlamak.
- Raporları
America/Los_Angelesgibi açık bir IANA saat dilimiyle etiketlemek.
Saat dilimi ofsetleri yaz saati kuralları nedeniyle değişebilir. Raporlama sisteminiz destekliyorsa, kalıcı olarak tek bir sayısal ofset kaydetmek yerine ianaTimezone tercih edin.
3. Etkinlik Sayılarını Al
query_api_usage_count, mağaza etkinliğini UTC tarihine veya orijinal UTC dakikasına göre gruplanmış şekilde döndürür. Ayrıca Analytics → Chat & Search History içindeki etkinlik grafiğinin de kaynağıdır.
Endpoint
GET https://api.shoplyai.ai/query_api_usage_countSorgu Parametreleri
| Parametre | Gerekli | Açıklama |
|---|---|---|
start_dt_utc | Evet | YYYY-MM-DD HH:mm:ss olarak UTC başlangıç zamanı |
end_dt_utc | Evet | YYYY-MM-DD HH:mm:ss olarak UTC bitiş zamanı |
groupby | Hayır | Günlük toplamlar için utc_date veya dakika satırları için utc_date_time |
Python Örneği
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)Örnek Yanıt
{
"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
}
]
}Satırlar, ilgili dönem için kullanılabilen etkinlik sayaçlarını içerir; örneğin sohbet soruları, aramalar, tıklamalar, sepete ekleme olayları ve ödeme olayları. Etkinliği olmayan sayaçlar sıfıra ayarlanmak yerine hiç bulunmayabilir.
İş Kullanım Senaryoları
- Chat & Search History içindekine benzer saatlik veya günlük bir etkinlik grafiği oluşturmak.
- Olağandışı trafik sıçramalarını veya müşteri etkileşimindeki ani düşüşleri tespit etmek.
- Ürün arama hacmini tıklamalar, sepete ekleme olayları ve ödemelerle karşılaştırmak.
- Destek ve ürün sergileme ekiplerinin en yoğun dönemleri ne zaman gözden geçirmesi gerektiğini tahmin etmek.
4. Sohbet ve Arama Oturumu Özetlerini Al
query_sessionized_chat, müşteri oturumu başına bir kompakt kayıt döndürür. Ayrıca Analytics → Chat & Search History içindeki oturum listesini de destekler.
Endpoint
GET https://api.shoplyai.ai/query_sessionized_chatSorgu Parametreleri
| Parametre | Gerekli | Açıklama |
|---|---|---|
start_dt_utc | Evet | UTC başlangıç zamanı veya birebir undefined değeri |
end_dt_utc | Evet | UTC bitiş zamanı veya birebir undefined değeri |
num_sessions | Hayır | Sınırların herhangi biri undefined olduğunda seçilecek oturum sayısı |
ScanIndexForward | Hayır | Önce en yeni oturumları seçmek için false kullanın |
En Son 40 Oturumu Al
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", ""))Bir UTC Aralığındaki Oturumları Al
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",
)Her iki zaman sınırı da mevcut olduğunda, API tam aralıktaki oturumları döndürür; num_sessions bu sınırlı sorguyu kısıtlamaz.
Örnek Yanıt
{
"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
}
]
}İsteğe bağlı alanlar oturuma göre değişir. Tam zaman çizelgesini almayı planlıyorsanız customer_id, start_timestamp_ms ve end_timestamp_ms alanlarını saklayın.
İş Kullanım Senaryoları
- Yanıt kalitesi ve destek eğitimi için son konuşmalardan bir örnek incelemek.
- Ürün metnini veya SSS’leri etkilemesi gereken tekrarlayan müşteri sorularını bulmak.
- Aramalar, ürün tıklamaları veya diğer alışveriş eylemlerini içeren yüksek niyetli oturumları belirlemek.
- Daha büyük olay düzeyi yükten kaçınırken eğilim analizi için oturum başına bir satır dışa aktarmak.
5. Tek Bir Tam Oturumu Al
Müşteri, AI, arama ve ticaret olaylarını almak için seçilmiş bir özeti query_log_visualization’a iletin.
Endpoint
GET https://api.shoplyai.ai/query_log_visualizationSorgu Parametreleri
| Parametre | Gerekli | Açıklama |
|---|---|---|
date_time_utc_start | Evet | UTC YYYY-MM-DD HH:mm:ss olarak biçimlendirilmiş oturum başlangıcı |
date_time_utc_end | Evet | UTC YYYY-MM-DD HH:mm:ss olarak biçimlendirilmiş oturum bitişi |
session_id | Hayır | Eski geçmiş kayıtları için kullanılan özetin customer_id değeri |
start_timestamp_ms | Önerilir | Özetin tam milisaniye başlangıç zaman damgası |
Python Örneği
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"))Örnek Yanıt
{
"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": {}
}
]
}Zaman çizelgesi müşteri soruları, AI yanıtları, arama sonuçları, ürün tıklamaları, sepete ekleme olayları, ödeme olayları ve insan temsilci katılımını içerebilir. Karışık olay türlerini sıralamak için server_timestamp_ms kullanın. Daha eski kayıtlar daha az alan içerebilir.
İş Kullanım Senaryoları
- Bir destek incelemesi sırasında müşterinin tam olarak ne sorduğunu ve Shoply’nin ne yanıtladığını denetlemek.
- Yanıt kalitesini, alışverişçiye gösterilen arama sonuçları ve ürünlerle birlikte gözden geçirmek.
- Sorudan tıklamaya, sepete eklemeye veya ödemeye giden yolculuğu yeniden oluşturmak.
- Alakasız geçmiş içinde arama yapmadan bir müşteri tarafından bildirilen tek bir oturumu teşhis etmek.
Her API İçin Tek Bir Sır Kullanabilir miyim?
Evet. Geçerli bir store_owner_api_secrete, tek bir mağaza kapsamındadır ve yukarıdaki Merchant API endpoint’leri genelinde çalışır. SiteChat hesapları için aynı sır, katalog yükleme API’lerinde de kimlik doğrular. Daha güvenli işlemler için, farklı sistemler için ayrı adlandırılmış sırlar kullanın; örneğin gece çalışan bir veri dışa aktarımı için bir tane ve dahili bir gösterge paneli için başka bir tane.
Bir entegrasyon kullanımdan kalkarsa veya tehlikeye girerse, Shoply Ayarları’nda yalnızca o entegrasyonun sırrını iptal edin. Diğer entegrasyonlar çalışmaya devam eder.
Süre Sonu, Gizlilik ve Hatalar Hakkında Ne Bilmeliyim?
Müşteri yanıtlarına hangi bilgilerin sunulduğunu anlamak için ayrıca Shoply veri kaynaklarını ve gizliliği inceleyin.
- Mağaza sahibi API sırlarının süresi 90 gün sonra dolar. Bir yedek oluşturun ve entegrasyonu son kullanma tarihinden önce güncelleyin.
- Shoply’nin standart sohbet ve arama geçmişi saklama süresi de 90 gündür. Sır süresinin dolması ve veri saklama ayrı politikalardır.
- Geçmiş yanıtları; müşteri tanımlayıcıları, e-posta adresleri, yaklaşık konum, sorular ve alışveriş etkinliği dahil olmak üzere kişisel veriler içerebilir. Bunları gizlilik politikanıza ve geçerli yasalara uygun şekilde saklayın ve işleyin.
- HTTP
403, sırrın eksik, geçersiz, süresi dolmuş, iptal edilmiş veya farklı bir mağazaya ait olduğu anlamına gelir. - HTTP
422genellikle gerekli bir sorgu parametresinin eksik olduğu veya yanlış ada sahip olduğu anlamına gelir. - HTTP
500veyastatusCode: 500içeren bir yanıt, isteğin Shoply’ye ulaştığı ancak tamamlanamadığı anlamına gelir. Geçici hataları geri çekilme ile yeniden deneyin ve hata devam ederse bizimle iletişime geçin. - Yanıtların yönetilebilir kalması için dışa aktarımlar ve yinelenen işler için sınırlı UTC aralıkları kullanın.
Ürün Arama, Merchant API’nin Bir Parçası mı?
Shoply’nin herkese açık ürün arama API’si farklı bir kimlik doğrulama ve istek sözleşmesine sahiptir. Özel satıcı verileri yerine müşteriye dönük bir deneyim için ürün arama sonuçları istiyorsanız API Üzerinden Shoply AI Search’e Nasıl Erişilir sayfasına bakın.
SiteChat Satıcıları Bir Ürün Kataloğu Yükleyebilir mi?
Evet. SiteChat hesapları, aynı mağaza sahibi API sırrıyla yapılandırılmış ürünleri ve ürün görsellerini yükleyebilir. Bu katalog endpoint’leri ayrı olarak SiteChat için Kataloğunuzu Nasıl Yüklersiniz bölümünde belgelenmiştir. Shopify mağazaları ürünleri Shopify üzerinden senkronize etmeye devam eder ve bu yükleme rotalarını kullanmaz.
Bir entegrasyonla ilgili yardım için Shoply AI ile iletişime geçin.
