Shoply Merchant API Nasıl Kullanılır

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

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:

APIKategoriNe döndürür
admin_store_analyticsPerformansGünlük, haftalık veya aylık performans satırları ve toplamları
query_api_usage_countEtkileşimUTC dakika veya güne göre gruplanmış etkinlik sayıları
query_sessionized_chatKonuşmalarSohbet ve arama oturumu özetleri
query_log_visualizationKonuşmalarSeçilen tek bir oturum için tam olay zaman çizelgesi
admin_get_store_metadataMağaza yapılandırmasıUTC verilerini doğru görüntülemek için kullanılan mağaza saat dilimi
admin_store_knowledgeBilgiÖzel metin, harici sayfalar, yüklenen dosyalar, silme ve yeniden tarama
user_generated_fileBilgi 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 403 ile birlikte No access_token found dö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?

  1. Shoply AI yönetim panelinizi açın.
  2. Settings → Store owner API secret bölümüne gidin.
  3. Bir sır oluşturun ve Weekly reporting export gibi entegrasyonu tanımlayan bir ad verin.
  4. Göründüğünde sırrı kopyalayın. Shoply düz metin değeri yalnızca bir kez gösterir.
Shoply Settings showing the Store owner API secret panel, Create API secret button, expiry date, and revoke control

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:

bash
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.

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.

Kimlik Doğrulama Nasıl Çalışır?

Her Merchant API isteği, değeri bir JSON dizesi olan bir Authorization başlığı gönderir:

json
{ "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:

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"

En yeni sohbet ve arama oturumlarını türlendirilmiş SessionSummary modelleri olarak alın:

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 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:

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

Aynı en yeni oturumları bir Node.js sunucusundan alın:

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); }

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:

bash
python -m pip install requests

Aşağıdaki yardımcı, mağaza anahtarını ve kimlik doğrulama başlığını her isteğe ekler:

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

Aş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

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"))

Örnek Yanıt

json
{ "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.

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)

Örnek Yanıt

json
{ "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.

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()), } }, )

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.

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()), } }, )

Örnek Yükleme Yanıtı

json
{ "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.

python
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.

python
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

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

Sorgu Parametreleri

ParametreGerekliAçıklama
store_keyEvetPaylaşılan istemci tarafından eklenir
report_typeEvetdaily, weekly veya monthly
start_dateGünlük/haftalıkYYYYMMDD biçiminde dahil UTC tarihi
end_dateGünlük/haftalıkYYYYMMDD 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

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")

Örnek Yanıt

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" }

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

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

Sorgu Parametreleri

ParametreGerekliAçıklama
store_keyEvetPaylaşılan istemci tarafından eklenir
metadata_keyEvetBirebir time_zone değerini kullanın

Python Örneği

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

Örnek Yanıt

json
{ "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_Angeles gibi 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

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

Sorgu Parametreleri

ParametreGerekliAçıklama
start_dt_utcEvetYYYY-MM-DD HH:mm:ss olarak UTC başlangıç zamanı
end_dt_utcEvetYYYY-MM-DD HH:mm:ss olarak UTC bitiş zamanı
groupbyHayırGünlük toplamlar için utc_date veya dakika satırları için utc_date_time

Python Örneği

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)

Örnek Yanıt

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 } ] }

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

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

Sorgu Parametreleri

ParametreGerekliAçıklama
start_dt_utcEvetUTC başlangıç zamanı veya birebir undefined değeri
end_dt_utcEvetUTC bitiş zamanı veya birebir undefined değeri
num_sessionsHayırSınırların herhangi biri undefined olduğunda seçilecek oturum sayısı
ScanIndexForwardHayırÖnce en yeni oturumları seçmek için false kullanın

En Son 40 Oturumu Al

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", ""))

Bir UTC Aralığındaki Oturumları Al

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", )

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

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 } ] }

İ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

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

Sorgu Parametreleri

ParametreGerekliAçıklama
date_time_utc_startEvetUTC YYYY-MM-DD HH:mm:ss olarak biçimlendirilmiş oturum başlangıcı
date_time_utc_endEvetUTC YYYY-MM-DD HH:mm:ss olarak biçimlendirilmiş oturum bitişi
session_idHayırEski 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

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"))

Örnek Yanıt

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": {} } ] }

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 422 genellikle gerekli bir sorgu parametresinin eksik olduğu veya yanlış ada sahip olduğu anlamına gelir.
  • HTTP 500 veya statusCode: 500 iç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.