Utvecklings-API, MCP, GitHub och simulering av utlösare

Utvecklings-API, MCP, GitHub och simulering av utlösare

Kopiera sidan

Simulera utlösare, hantera nycklar och anslut GitHub för anpassad utlösarkod via REST API eller MCP för Shopify Flow.

Du kan granska dina triggare, aktivera eller inaktivera dem, läsa händelsehistoriken och simulera en trigger från din egen kod eller från en AI-assistent. Workflow Trigger Extensions tillhandahåller ett REST-API och en MCP-server, och kan anslutas till ett GitHub-repository så att din anpassade triggerkod hanteras med versionskontroll. Alla tre hanteras på sidan ”Developer”.

Simulering av en utlösare

Att testa ett Shopify Flow-arbetsflöde innebär vanligtvis att man genomför den verkliga händelsen i sin butik - redigerar en produkt, lägger en beställning, väntar på en omröstning. Med simulering slipper man den väntetiden: välj en utlösare, koppla den till en resurs, så aktiveras den som om den verkliga händelsen just hade inträffat.

Två sätt att köra en:

  • I appen. Öppna valfri händelse i händelsehistoriken och välj ”Simulera” igen. Då utlöses just den händelsen på nytt.
  • Via API:et eller MCP:et, med ett resurs-ID eller en tidigare händelse.

Simuleringen är medvetet trogen originalet. Den skapar inte någon genvägs-payload - den går igenom samma pipeline som en riktig Shopify-webhook gör, så det som ditt arbetsflöde tar emot är exakt detsamma som det skulle ta emot i produktionsmiljön.

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

En testkörning validerar utlösaren, hanterar ämnet och visar nyttolasten - utan att utlösa något. Ta bort dryRun för att utlösa händelsen på riktigt. Du kan också skicka {"fromHistoryId":"456"} för att återutlösa en tidigare händelse istället för att skapa en ny.

Triggers som styrs via polling istället för via en webhook kan inte simuleras; de visar simulatable: false i listan över triggers.

API-nycklar

Skapa en nyckel på sidan ”Utvecklare” och välj åtkomstnivå:

  • Skrivskyddad - visa listor över utlösare och deras status, läs händelsehistorik, statistik och behörigheter.
  • Läsa och skriva - samt aktivera och inaktivera utlösare.
  • Läs, skriv och kör - simulera även triggare och testa anpassad triggarkod.

Den fullständiga nyckeln visas en gång, vid skapandet. Nycklarna lagras i hashform och kan återkallas när som helst. Skicka den som ett Bearer-token:

Authorization: Bearer ftk_your_key_here

Simuleringen ligger på en egen nivå av ovanstående skäl: den kör dina automatiseringar på riktigt, så en nyckel som används för vanliga läsningar kan inte utlösa dem.

Sidan ”Utvecklare” med bas-URL:en för REST-API:et, en testförfrågan och knappen ”Skapa API-nyckel”
Sidan ”Developer”: REST-API:ets bas-URL, en förfrågan att testa en nyckel med samt var nycklar skapas.

REST-API

Metod Sökväg Nivå Syfte
HÄMTA /api/v1 ingen API-index - bekräftar att API:et är i drift
HÄMTA /api/v1/me läs Kontrollera autentiseringen och se vilken nivå din nyckel har
HÄMTA /api/v1/triggers läs Varje utlösare, med dess status för din butik
HÄMTA /api/v1/triggers/:handle läs En utlösande faktor i detalj
PUT /api/v1/triggers/:handle skriva Slå på eller stänga av en utlösare
PUT /api/v1/triggers skriva Slå på eller stäng av flera samtidigt i ett enda samtal
INLÄGG /api/v1/triggers/:handle/simulate utföra Simulera en utlösare
HÄMTA /api/v1/triggers/custom läs Dina egna anpassade utlösare, med tillhörande kod
HÄMTA /api/v1/triggers/custom/:handle/test läs Händelsen för det insamlade provet för en anpassad utlösare
INLÄGG /api/v1/triggers/custom/:handle/test utföra Kör anpassad triggarkod utan att spara eller utlösa
HÄMTA /api/v1/history läs Lista över utlösande händelser
HÄMTA /api/v1/history/:id läs Hämta en händelse med dess data
HÄMTA /api/v1/stats läs Totalsiffror, framgångsgrad, fördelning efter status
HÄMTA /api/v1/permissions läs Vilka datatillstånd du har beviljat och vad de ger tillgång till

GET /api/v1/triggers är användbart vid konfigurationen: för varje utlösare visar det vilken behörighet som krävs, om behörigheten har beviljats, om utlösaren är aktiverad och var i appen man kan hantera den.

Slå på och stänga av utlösare

PUT används istället för PATCH eftersom anropet är idempotent - om det körs igen efter en timeout kan inget tillämpas två gånger, vilket är viktigt när en assistent styr API:et.

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

Att aktivera ger aldrig någon behörighet. Om utlösaren behöver en behörighet som du inte har beviljat, genomförs anropet ändå och du får veta exakt vad som saknas och var du ska bevilja behörigheten:

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

Den länken öppnar sidan ”Behörigheter” och bläddrar direkt till det kort du behöver.

Lägg till "sync": true för att även starta en datasynkronisering, så att utlösaren fungerar på poster som redan finns istället för endast på de som skapas från och med nu.

För att växla flera samtidigt kan man i PUT /api/v1/triggers ange en specifik lista eller en hel kategori:

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

Anslut till GitHub

På sidan ”Developer” kan du via fliken ”Connections” ansluta ett GitHub-repository för din Anpassade utlösare-kod. Ändringarna blir tillgängliga för granskning i en pull-begäran, du kan se vem som har ändrat vad och du kan återställa en omvandling som slutat fungera.

När du klickar på ”Anslut” installeras vår GitHub-app på det konto du väljer. Du bestämmer själv vilka repositorier appen ska ha åtkomst till, och du kan när som helst återkalla den åtkomsten via GitHub. När du väljer ett repositorium skrivs alla anpassade utlösare som du redan har omedelbart in i det, så att det från början stämmer överens med appen istället för att fyllas på efter hand.

Vad du gör Vad händer?
Skapa, redigera eller duplicera en utlösare i appen Filen har lagts in i ditt arkiv
Ta bort en utlösare i appen Filen tas bort från ditt arkiv
Skicka en ändring till den anslutna grenen Triggerns kod uppdateras i appen

Varje trigger är en fil som har fått sitt namn efter sitt handtag och som innehåller exakt den modul du ser i redigeraren - utan något extra runt omkring. Du kan alltså öppna den i din egen redigerare, köra den och köra lint-kontroll på den precis som vilken annan JavaScript-fil som helst, och sedan använda slutpunkten /test ovan för att köra den mot en verklig händelse som har fångats in innan du gör en commit.

Återgå till en tidigare version

Du behöver inte kunna Git för att ångra en ändring. När ett arkiv är anslutet visar redigeraren en rullgardinsmeny under ”Version” där alla tidigare versioner av filen listas med datum och upphovsman. Välj en version så laddas den in i redigeraren som en osparad ändring, så att du kan läsa igenom den först - det är först när du sparar som den återställs som en ny commit.

Byta eller koppla bort

Med ”Byt repositorium” återgår du till urvalsfönstret utan att ändra installationen. ”Koppla bort” återkallar installationen på GitHub och tar bort den även här, så det betyder precis vad det står. ”Hantera behörigheter” öppnar installationsinställningarna på GitHub, där du kan lägga till eller ta bort repositorier.

Testa anpassad triggerkod

Om du förvarar din anpassade triggarkod i ett arkiv och redigerar den i din egen redigerare kan du köra den mot den insamlade exempelhändelsen utan att först spara den i appen.

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

Du får tillbaka det som visas på appens ”Test”-knapp: om den skulle utlösas, utdataobjektet, dina ctx.log-rader och körtiden.

Ingenting utlöses och ingenting sparas - inga arbetsflöden körs, inga händelser registreras, inga kvoter används och den lagrade koden förblir oförändrad. Det är säkert att köra vid varje sparning från en filövervakare. Se Anpassade utlösare för hela arbetsflödet.

MCP-server

Fliken ”MCP” på utvecklarsidan visar serverns URL och ett kopieringsklart anslutningskommando för Claude, Cursor, VS Code, Gemini CLI och andra verktyg. Verktygen speglar REST-ändpunkterna, och verktygsuppsättningen avspeglar din nyckels nivå - en skrivskyddad nyckel har inte tillgång till skriv- eller körverktygen alls.

Verktyg Nivå Vad den gör
list_triggers läs Varje utlösare och dess tillstånd
list_custom_triggers läs Dina egna anpassade utlösare, med tillhörande kod
get_custom_trigger_sample läs Den händelse som en anpassad utlösare testar mot
list_history läs Senaste utlösande händelser
get_event läs En enhet inklusive dess nyttolast
get_stats läs Sammanställd statistik
get_permissions läs Beviljade behörigheter och vad de ger tillgång till
get_trigger skriva En utlösande faktor i detalj
set_trigger skriva Slå på eller stänga av en utlösare
set_triggers_bulk skriva Slå på eller stäng av flera samtidigt
simulate_trigger utföra Avfyra en utlösare när så önskas
test_custom_trigger utföra Kör anpassad triggarkod utan att spara eller utlösa

Det är just detta som gör en assistent verkligen användbar: den kan lista vad som finns, förklara vad en utlösare behöver, aktivera den, utlösa en testhändelse, läsa upp resultatet - och när det gäller anpassade utlösare, skriva om koden och testa den - utan att du behöver lämna konversationen.

Hur dina uppgifter skyddas

Händelsedata returneras med personuppgifter maskerade: e-postadresser, telefonnummer, kortnummer och fält med personnamn ersätts med ***. Shopify-resurs-ID:n och företagsfält lämnas oförändrade så att data förblir användbara.

Maskeringen gäller fältnamn och värdemönster, så den är noggrann men utgör ingen garanti - personuppgifter i ett fritextfält kan fortfarande komma fram. Felmeddelanden rensas dessutom från interna diagnostiska uppgifter innan de lämnar servern.

GitHub-anslutningen lagrar inga inloggningsuppgifter som kan läcka ut: endast installations-ID:t sparas, och åtkomsten till repositoriet sker via ett token som genereras vid behov och som upphör att gälla inom en timme.

Nästa steg

Begränsningar av antalet förfrågningar

REST-API:et och MCP-servern delar på en budget per API-nyckel.

  • 300 förfrågningar per 60 sekunder per nyckel, som ett fast tidsfönster.
  • Anrop på exekveringsnivå tilldelas en andra, stramare kvot på 60 per timme. De förbrukar båda kvoterna, så en intensiv exekveringsvåg tär även på den gemensamma kvoten. För den här appen innebär det att man simulerar en utlösare och kör anpassad utlösarkod, vilket i båda fallen verkligen sätter fart på dina arbetsflöden.
  • Det är samma sak för alla abonnemang. Det är mätarna i ditt abonnemang som utlöser händelser, inte API-anrop, så en uppgradering påverkar inte dessa siffror.
  • Vid bearbetning av svar returneras HTTP-kod 429. Vänta en stund och försök igen, helst med exponentiell väntetid.
  • Om vår cache tillfälligt inte är tillgänglig öppnas begränsaren istället för att blockera din integration.

Inkommande webhooks i Shopify har ingen begränsning av antalet förfrågningar

Vi begränsar inte de webhooks som Shopify skickar till oss - de tas emot i den ordning de anländer och placeras i kö. Taket är den 30-dagars kvoten för händelser som ingår i ditt abonnemang.

En sak som är bra att veta om du skriver anpassade triggare: din kod körs för varje händelse inom det ämne som den lyssnar på, och varje körning räknas som en händelse - även de som du filtrerar bort genom att returnera null. Det kostar lika mycket som den inbyggda triggaren skulle göra för samma händelse.

Shopify

Detta är Shopifys begränsningar för Shopifys API:er, inte våra. De avgör vad den här appen (och dina arbetsflöden) kan göra på Shopifys sida, och du kan stöta på dem i en stor butik även om du ligger långt inom våra begränsningar.

  • Antalet poster i inmatningsmatriser är begränsat till 250 för alla Shopify-API:er. En begäran med en matris som innehåller fler poster avvisas.
  • Pagineringen slutar vid 25 000 objekt. Antalet är korrekt upp till 25 000; över det värdet returnerar Shopify 25001, vilket betyder ”mer än 25 000”. Om du behöver gå djupare, filtrera först.
  • GraphQL Admin API debiteras utifrån den beräknade kostnaden för frågor, uttryckt i poäng per sekund, och taket beror på butikens Shopify-abonnemang:
Shopify-abonnemang Poäng per sekund
Standard 100
Avancerat 200
Plus 1000
Företag (handelskomponenter) 2000

Storefront API har inga begränsningar vad gäller antalet förfrågningar.

Mer information: Begränsningar för Shopify-API