Geliştirici API'si, MCP, GitHub ve tetikleyici simülasyonu

Geliştirici API'si, MCP, GitHub ve tetikleyici simülasyonu

Sayfayı kopyala

Tetikleyicileri simüle edin, anahtarları yönetin ve REST API veya Shopify Flow için MCP aracılığıyla özel tetikleyici kodu için GitHub'a bağlanın.

Tetikleyicilerinizi inceleyebilir, bunları etkinleştirebilir veya devre dışı bırakabilir, olay geçmişini okuyabilir ve kendi kodunuzdan ya da bir yapay zeka asistanından bir tetikleyiciyi simüle edebilirsiniz. Workflow Trigger Extensions, bir REST API’si ve bir MCP sunucusu sunar; ayrıca bir GitHub deposuna bağlanabilir, böylece özel tetikleyici kodunuz sürüm kontrolü altında tutulur. Bu üç öğenin tümü, Geliştirici sayfasında yönetilir.

Bir tetikleyicinin simülasyonu

Shopify Flow iş akışını test etmek, genellikle mağazanızda gerçek bir işlem gerçekleştirmeyi gerektirir: bir ürünü düzenlemek, sipariş vermek, bir oylama sonucunu beklemek gibi. Simülasyon ise bu bekleme süresini ortadan kaldırır: bir tetikleyici seçin, onu bir kaynağa yönlendirin; tetikleyici, sanki gerçek olay az önce gerçekleşmiş gibi devreye girer.

Bunu çalıştırmanın iki yolu:

  • Uygulamada, Etkinlik Geçmişi'nden herhangi bir etkinliği açın ve tekrar Simüle Et seçeneğini seçin. Bu, o etkinliği tam olarak yeniden tetikler.
  • API veya MCP üzerinden, bir kaynak kimliği veya geçmiş bir olay kullanılarak.

Simülasyon, kasıtlı olarak gerçeğe sadık kalır. Kısayol niteliğinde bir veri yükü oluşturmaz; gerçek bir Shopify webhook’unun izlediği aynı iş akışını takip eder; dolayısıyla iş akışınızın aldığı veriler, üretim ortamında alacağı verilerle tam olarak aynıdır.

Dry run firstbash
curl -X POST https://shopify.workflow-trigger-extensions.app/api/v1/triggers/product-update-trigger/simulate \
  -H "Authorization: Bearer ftk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"resourceId":"gid://shopify/Product/123456789","dryRun":true}'

Bir deneme çalıştırması, tetikleyiciyi doğrular, konuyu çözer ve yükü gösterir; ancak hiçbir şey tetiklemez. Gerçek bir tetikleme yapmak için dryRun ifadesini kaldırın. Ayrıca, yeni bir olay oluşturmak yerine {"fromHistoryId":"456"} değerini aktararak geçmişteki bir olayı yeniden tetikleyebilirsiniz.

Webhook yerine yoklama yoluyla tetiklenen tetikleyiciler simüle edilemez; bu tetikleyiciler, tetikleyici listesinde simulatable: false değerini gösterir.

API anahtarları

Geliştirici sayfasında bir anahtar oluşturun ve erişim düzeyini seçin:

  • Yalnızca okuma - tetikleyicileri ve durumlarını görüntüleme, olay geçmişini, istatistikleri ve izinleri okuma.
  • Okuma ve yazma - ayrıca tetikleyicileri açıp kapatma.
  • Okuma, yazma ve yürütme - ayrıca tetikleyicileri simüle etme ve özel tetikleyici kodunu test etme.

Anahtarın tam metni, oluşturulduğunda bir kez gösterilir. Anahtarlar karma olarak saklanır ve herhangi bir zamanda iptal edilebilir. Bunu bir Bearer belirteci olarak gönderin:

Authorization: Bearer ftk_your_key_here

Simülasyon, yukarıda belirtilen nedenden ötürü kendi seviyesinin arkasında yer alır: Otomasyonlarınızı gerçek ortamda çalıştırır; bu nedenle, günlük okuma işlemleri için kullanılan bir anahtar, bu otomasyonları tetikleyemez.

REST API temel URL’si, bir test isteği ve “API anahtarı oluştur” düğmesini içeren Geliştirici sayfası
Geliştirici sayfası: REST API’sinin temel URL’si, bir anahtarı test etmek için kullanılacak istek ve anahtarların oluşturulduğu yer.

REST API

Yöntem Yol Seviye Amaç
AL /api/v1 yok API endeksi - API'nin çalışır durumda olduğunu gösterir
AL /api/v1/me oku Yetkilendirmeyi kontrol edin ve anahtarınızın seviyesini görün
AL /api/v1/triggers oku Mağazanız için her bir tetikleyicinin durumu
AL /api/v1/triggers/:handle oku Bir tetikleyiciyi ayrıntılı olarak inceleme
PUT /api/v1/triggers/:handle yaz Bir tetikleyiciyi açın veya kapatın
PUT /api/v1/triggers yaz Tek bir çağrı ile birden fazla cihazı açın veya kapatın
YAYIN /api/v1/triggers/:handle/simulate yürütmek Bir tetikleyiciyi simüle et
AL /api/v1/triggers/custom oku Kendi özel tetikleyicileriniz ve bunlara ait kodlar
AL /api/v1/triggers/custom/:handle/test oku Özel bir tetikleyici için yakalanan örnek olay
YAYIN /api/v1/triggers/custom/:handle/test yürütmek Kaydetmeden veya tetiklemeden özel tetikleyici kodunu çalıştır
AL /api/v1/history oku Tetikleyici olayları listele
AL /api/v1/history/:id oku Bir olayı, içerdiği verilerle birlikte al
AL /api/v1/stats oku Toplamlar, başarı oranı, durum dağılımı
AL /api/v1/permissions oku Hangi veri izinlerini verdiniz ve her birinin hangi işlevleri etkinleştirdiği

Kurulum için GET /api/v1/triggers komutu oldukça kullanışlıdır: Her bir tetikleyici için gerekli izinleri, bu izinlerin verilip verilmediğini, tetikleyicinin açık olup olmadığını ve uygulamanın hangi bölümünden yönetilebileceğini gösterir.

Tetikleyicileri açma ve kapatma

PATCH yerine PUT kullanılır, çünkü bu çağrı idempotenttir - zaman aşımından sonra tekrar gerçekleştirilmesi durumunda hiçbir işlemin iki kez uygulanması söz konusu olmaz; bu durum, API’yi bir asistanın yönettiği durumlarda önemlidir.

Enable one triggerbash
curl -X PUT https://shopify.workflow-trigger-extensions.app/api/v1/triggers/order-tags-added-trigger \
  -H "Authorization: Bearer ftk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true}'

"Enabling" işlevi hiçbir zaman bir izin vermez. Tetikleyicinin, sizin henüz vermediğiniz bir izne ihtiyacı varsa, çağrı yine de başarılı olur ve tam olarak neyin eksik olduğunu ve izni nereden vermeniz gerektiğini size bildirir:

{
  "enabled": true,
  "scopeGranted": false,
  "missingScopeLabels": ["Order Data Access"],
  "permissionsUrl": "https://admin.shopify.com/store/.../app/permissions?permission=read_orders",
  "warning": "Enabled, but this trigger cannot fire until Order Data Access is granted."
}

Bu bağlantı, İzinler sayfasını açar ve sayfa doğrudan ihtiyacınız olan karta kaydırılmış olarak görüntülenir.

Veri senkronizasyonunu da başlatmak için "sync": true ekleyin; böylece tetikleyici, yalnızca bundan sonra oluşturulacak kayıtlar üzerinde değil, halihazırda mevcut olan kayıtlar üzerinde de çalışır.

Birden fazla tetikleyiciyi aynı anda değiştirmek için, PUT /api/v1/triggers komutu hem açık bir listeyi hem de tüm kategoriyi kabul eder:

{ "enabled": true, "handles": ["order-tags-added-trigger", "order-note-changed-trigger"] }
{ "enabled": true, "category": "orders" }

GitHub'a bağlan

Geliştirici sayfasında, Bağlantılar sekmesi, Özel tetikleyiciler kodunuz için bir GitHub deposu bağlamanıza olanak tanır. Değişiklikler bir çekme isteğinde incelemeye açılır; kimin neyi değiştirdiğini görebilir ve artık çalışmayan bir dönüştürmeyi geri alabilirsiniz.

"Bağlan" seçeneği, seçtiğiniz hesaba GitHub Uygulamamızı yükler. Uygulamanın hangi depolara erişebileceğini siz belirlersiniz ve bu erişim iznini GitHub üzerinden istediğiniz zaman iptal edebilirsiniz. Bir depo seçtiğinizde, mevcut tüm özel tetikleyicileriniz anında bu depoya yazılır; böylece uygulama zamanla doldurulmak yerine başlangıçtan itibaren uyumlu hale gelir.

Ne yapıyorsunuz? Ne olur?
Uygulamada bir tetikleyici oluşturun, düzenleyin veya kopyalayın Dosya, deponuza kaydedildi
Uygulamada bir tetikleyiciyi silme Dosya, deponuzdan kaldırıldı
Bağlı dalda bir değişikliği kaydet Uygulamada tetikleyicinin kodu güncellendi

Her tetikleyici, kendi tanıtıcısının adını taşıyan tek bir dosyadır ve bu dosya, düzenleyicide gördüğünüz modülü tam olarak içerir - etrafında hiçbir ek unsur bulunmaz. Dolayısıyla, bu dosyayı kendi düzenleyicinizde açabilir, çalıştırabilir ve diğer JavaScript dosyaları gibi lint kontrolünden geçirebilirsiniz; ardından, commit yapmadan önce yukarıdaki /test uç noktasını kullanarak dosyayı gerçek bir yakalanmış olay üzerinde çalıştırabilirsiniz.

Daha önceki bir sürüme dönmek

Bir değişikliği geri almak için Git bilmenize gerek yoktur. Bir depo bağlandığında, tetikleyici düzenleyicisi, o dosyanın tarihi ve yazarıyla birlikte önceki tüm sürümlerini listeleyen bir Sürüm açılır menüsü gösterir. Birini seçtiğinizde, bu sürüm düzenleniciye kaydedilmemiş bir değişiklik olarak yüklenir; böylece önce onu okuyabilirsiniz - kaydetme işlemi, onu yeni bir commit olarak geri yükler.

Değiştirme veya bağlantıyı kesme

Depoyu değiştir seçeneği, kuruluma herhangi bir değişiklik yapmadan sizi seçiciye geri döndürür. Bağlantıyı kes seçeneği, kurulumu buradan kaldırmanın yanı sıra GitHub’daki kurulumun da iptal edilmesini sağlar; yani adından da anlaşıldığı gibi çalışır. İzinleri yönet seçeneği, GitHub’daki kurulum ayarlarını açar; burada depolar ekleyebilir veya kaldırabilirsiniz.

Özel tetikleyici kodunun test edilmesi

Özel tetikleyici kodunuzu bir depoda saklıyor ve kendi düzenleyicinizde düzenliyorsanız, bu kodu önce uygulamaya kaydetmeden yakalanan örnek olay üzerinde çalıştırabilirsiniz.

Test the file you are editingbash
curl -X POST https://shopify.workflow-trigger-extensions.app/api/v1/triggers/custom/my-trigger/test \
  -H "Authorization: Bearer ftk_your_key_here" \
  -H "Content-Type: application/json" \
  -d "$(jq -Rn --rawfile c flow-triggers/my-trigger.js '{code:$c}')"

Uygulamanın “Test” düğmesinde gösterilen bilgileri alırsınız: komutun çalışıp çalışmayacağı, çıktı nesnesi, ctx.log satırlarınız ve çalışma süresi.

Hiçbir işlem gerçekleştirilmez ve hiçbir şey kaydedilmez - hiçbir iş akışı çalıştırılmaz, hiçbir olay kaydedilmez, hiçbir kota kullanılmaz ve depolanan kod üzerinde herhangi bir değişiklik yapılmaz. Bir dosya izleyicisi aracılığıyla her kaydetme işleminde güvenle çalıştırılabilir. Tam iş akışı için bkz. Özel tetikleyiciler.

MCP sunucusu

Geliştirici sayfasındaki MCP sekmesi, sunucu URL’sini ve Claude, Cursor, VS Code, Gemini CLI ve diğerleri için kopyalanmaya hazır bir bağlantı komutunu gösterir. Araçlar, REST uç noktalarını yansıtır ve araç seti, anahtarınızın seviyesini yansıtır; salt okunur bir anahtar, yazma veya yürütme araçlarını hiç görmez.

Araç Seviye Ne işe yarar?
list_triggers oku Her tetikleyici ve durumu
list_custom_triggers oku Kendi özel tetikleyicileriniz ve bunlara ait kodlar
get_custom_trigger_sample oku Özel bir tetikleyicinin karşılaştırma yaptığı yakalanan olay
list_history oku Son dönemde meydana gelen tetikleyici olaylar
get_event oku Yükünü de içeren bir olay
get_stats oku Toplam istatistikler
get_permissions oku Verilen izinler ve bu izinlerin sağladığı olanaklar
get_trigger yaz Bir tetikleyiciyi ayrıntılı olarak inceleme
set_trigger yaz Bir tetikleyiciyi açın veya kapatın
set_triggers_bulk yaz Birkaç tanesini aynı anda açın veya kapatın
simulate_trigger yürütmek İstenildiğinde bir tetikleyiciyi çalıştır
test_custom_trigger yürütmek Kaydetmeden veya tetiklemeden özel tetikleyici kodunu çalıştır

Bir asistanı gerçekten kullanışlı kılan şey şudur: Siz sohbetten ayrılmanıza gerek kalmadan mevcut öğeleri listeleyebilir, bir tetikleyicinin neye ihtiyaç duyduğunu açıklayabilir, onu etkinleştirebilir, bir test olayı başlatabilir, sonucu geri okuyabilir ve özel tetikleyiciler için kodu yeniden yazıp test edebilir.

Verileriniz nasıl korunuyor?

Olay verileri, kişisel veriler gizlenmiş şekilde döndürülür: e-posta adresleri, telefon numaraları, kart numaraları ve kişi adlarının yer aldığı alanlar *** olarak gösterilir. Verilerin kullanışlılığını korumak amacıyla Shopify kaynak kimlikleri ve işletme alanları olduğu gibi bırakılır.

Gizleme işlemi alan adları ve değer kalıpları üzerinde çalışır; bu nedenle dikkatli bir işlemdir ancak bir garanti değildir - serbest metin alanındaki kişisel veriler yine de ortaya çıkabilir. Hata mesajları da sunucudan gönderilmeden önce iç tanılama ayrıntılarından arındırılır.

GitHub bağlantısı, sızdırılabilecek hiçbir kimlik bilgisini saklamaz: yalnızca kurulum kimliği tutulur ve depoya erişim, talep üzerine oluşturulan ve bir saat içinde geçerliliğini yitiren bir jeton kullanılarak sağlanır.

Sonraki adımlar

Hız sınırları

REST API ve MCP sunucusu, her API anahtarı başına tek bir bütçeyi paylaşır.

  • Anahtar başına 60 saniyede 300 istek, sabit bir zaman aralığı olarak.
  • Yürütme düzeyindeki çağrılar, saat başına 60 adetlik ikinci ve daha kısıtlı bir kota ile sınırlandırılır. Her iki kotayı da tüketirler; dolayısıyla yoğun bir yürütme dalgası, paylaşılan kotadan da pay alır. Bu uygulama için bu, bir tetikleyicinin simülasyonunu yapmak ve özel tetikleyici kodunu çalıştırmak anlamına gelir; her ikisi de iş akışlarınızı gerçekten tetikler.
  • Her planda durum aynıdır. Planınızın sayaçları API çağrılarını değil, olayları tetikler; bu nedenle, plana yükseltme yapmanız bu rakamları artırmaz.
  • İşlem sırasında HTTP 429 hatası döndü. Bekle ve yeniden dene; ideal olarak üstel bekleme yöntemi kullan.
  • Önbelleğimiz kısa bir süre kullanılamaz hale gelirse, sınırlayıcı entegrasyonunuzu engellemek yerine açık konumda kalır.

Shopify’dan gelen webhook’lar için hız sınırlaması uygulanmaz

Shopify’ın bize gönderdiği webhook’ları sınırlamıyoruz; bunlar geldiği gibi kabul edilip kuyruğa alınır. Üst sınır, planınızın 30 günlük olay kotasıdır.

Özel tetikleyiciler yazıyorsanız bilmeniz gereken bir şey var: Kodunuz, dinlediği konudaki her olay için çalışır ve her çalıştırma, null değerini döndürerek filtrelediğiniz olaylar da dahil olmak üzere, bir olay olarak sayılır. Bunun maliyeti, aynı olay için yerleşik tetikleyicinin maliyeti ile aynıdır.

Shopify

Bunlar, Shopify’ın API’leri için Shopify tarafından belirlenen sınırlamalardır, bizim sınırlamalarımız değildir. Bu sınırlamalar, bu uygulamanın (ve iş akışlarınızın) Shopify tarafında yapabilecekleri işlemler için geçerlidir; büyük bir mağazada, bizim sınırlarımız içinde olsanız bile bu sınırlamalara ulaşabilirsiniz.

  • Shopify API’lerinin tamamında girdi dizilerinin üst sınırı 250 öğedir. Bu sınırı aşan bir dizi içeren istek reddedilir.
  • Sayfalama, 25.000 nesneye kadar devam eder. Sayımlar 25.000'e kadar doğrudur; bu sayının üzerinde Shopify, "25.000'den fazla" anlamına gelen 25001 değerini döndürür. Daha fazla nesneye ulaşmanız gerekiyorsa, önce filtre uygulayın.
  • GraphQL Yönetici API’si, saniye başına puan cinsinden hesaplanan sorgu maliyetine göre ölçülür ve üst sınır, mağazanın Shopify planına bağlıdır:
Shopify planı Saniye başına puan
Standart 100
İleri Düzey 200
Ayrıca 1000
Kurumsal (Ticaret Bileşenleri) 2000

Storefront API’sinde kullanım sınırlaması yoktur.

Tüm ayrıntılar: Shopify API istek sınırları