Udvikler-API, MCP, GitHub og udløsersimulering
Simuler udløsere, administrer nøgler og opret forbindelse til GitHub for at bruge brugerdefineret udløser-code via REST API eller MCP (Shopify Flow).
Du kan gennemse dine udløsere, aktivere eller deaktivere dem, se hændelseshistorikken og simulere en udløser fra din egen kode eller fra en AI-assistent. »Workflow Trigger Extensions« stiller en REST-API og en MCP-server til rådighed og kan oprette forbindelse til et GitHub-repository, så din brugerdefinerede udløserkode er under versionsstyring. Alle tre elementer administreres på siden »Developer«.
Simulering af en udløser
Når man tester en Shopify Flow-arbejdsgang, indebærer det normalt, at man gennemfører den faktiske handling i sin butik - redigerer et produkt, afgiver en ordre eller afventer en afstemning. Simulering fjerner denne ventetid: Vælg en udløser, knyt den til en ressource, og den udløses, som om den virkelige begivenhed netop var sket.
To måder at køre en på:
- I appen. Åbn en vilkårlig begivenhed i »Begivenhedshistorik«, og vælg »Simuler« igen. Det udløser netop den pågældende begivenhed på ny.
- Via API’et eller MCP’en, ved hjælp af et ressource-ID eller en tidligere begivenhed.
Simuleringen er bevidst tro mod virkeligheden. Den opretter ikke en genvej til payload - den gennemgår den samme proces som en rigtig webhook fra Shopify, så det, din arbejdsgang modtager, er præcis det samme, som den ville modtage i produktionsmiljøet.
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ørsel validerer udløseren, afslutter emnet og viser dig payloaden - uden at udløse noget. Fjern dryRun for at udløse den for alvor. Du kan også angive {"fromHistoryId":"456"} for at genudløse en tidligere begivenhed i stedet for at oprette en ny.
Udløsere, der styres via polling i stedet for en webhook, kan ikke simuleres; de vises som »simulatable: false« på triggerlisten.
API-nøgler
Opret en nøgle på siden »Udvikler«, og vælg dens adgangsniveau:
- Skrivebeskyttet - vis udløsere og deres status, læs hændelseshistorik, statistikker og tilladelser.
- Læs og skriv - og slå desuden udløserne til og fra.
- Læs, skriv og udfør - du kan også simulere udløsere og teste brugerdefineret udløserkode.
Den fulde nøgle vises én gang, når den oprettes. Nøglerne gemmes i hashform og kan til enhver tid tilbagekaldes. Send den som et Bearer-token:
Authorization: Bearer ftk_your_key_here
Simulationen ligger på et eget niveau af ovenstående årsag: Den kører dine automatiseringer i praksis, så en nøgle, der bruges til daglige læsninger, kan ikke udløse dem.

REST-API
| Metode | Sti | Niveau | Formål |
|---|---|---|---|
| HENT | /api/v1 |
ingen | API-indeks - bekræfter, at API’en er oppe |
| HENT | /api/v1/me |
læs | Kontroller godkendelsen, og se, hvilket niveau din nøgle har |
| HENT | /api/v1/triggers |
læs | Hver udløser med sin tilstand for din butik |
| HENT | /api/v1/triggers/:handle |
læs | En udløser i detaljer |
| PUT | /api/v1/triggers/:handle |
skrive | Slå en udløser til eller fra |
| PUT | /api/v1/triggers |
skrive | Slå flere til eller fra i ét opkald |
| INDLÆG | /api/v1/triggers/:handle/simulate |
udføre | Simuler en udløser |
| HENT | /api/v1/triggers/custom |
læs | Dine egne brugerdefinerede udløsere med tilhørende kode |
| HENT | /api/v1/triggers/custom/:handle/test |
læs | Begivenheder »Indsamlet prøve« for en brugerdefineret udløser |
| INDLÆG | /api/v1/triggers/custom/:handle/test |
udføre | Kør brugerdefineret udløserkode uden at gemme eller udløse den |
| HENT | /api/v1/history |
læs | Liste over udløsende hændelser |
| HENT | /api/v1/history/:id |
læs | Hent en begivenhed sammen med dens payload |
| HENT | /api/v1/stats |
læs | Samlede tal, succesrate, statusfordeling |
| HENT | /api/v1/permissions |
læs | Hvilke datatilladelser du har givet, og hvad de hver især giver adgang til |
GET /api/v1/triggers er den, der er nyttig ved opsætningen: For hver udløser angiver den, hvilken tilladelse den kræver, om tilladelsen er tildelt, om udløseren er aktiveret, og hvor i appen man kan administrere den.
Aktivering og deaktivering af udløsere
PUT bruges i stedet for PATCH, fordi opkaldet er idempotent - en gentagelse af det efter en timeout kan ikke medføre, at noget anvendes to gange, hvilket er vigtigt, når en assistent styrer API’et.
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 tildeler aldrig en tilladelse. Hvis udløseren har brug for en tilladelse, som du ikke har tildelt, gennemføres opkaldet alligevel, og du får at vide præcis, hvad der mangler, og hvor du skal tildele den:
{
"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."
}
Dette link åbner siden »Tilladelser«, hvor der allerede er rullet direkte til det kort, du har brug for.
Tilføj »"sync": true« for også at starte en datasynkronisering, så udløseren virker på poster, der allerede findes, og ikke kun på dem, der oprettes fremover.
Hvis man vil skifte flere på én gang, accepterer PUT /api/v1/triggers enten en eksplicit liste eller en hel kategori:
{ "enabled": true, "handles": ["order-tags-added-trigger", "order-note-changed-trigger"] }
{ "enabled": true, "category": "orders" }
Forbind til GitHub
På siden »Udvikler« kan du under fanen »Forbindelser« forbinde et GitHub-repository til din »Brugerdefinerede udløsere«-kode. Ændringer bliver tilgængelige for gennemgang i en pull-anmodning, du kan se, hvem der har ændret hvad, og du kan fortryde en transformation, der ikke længere fungerer.
Når du klikker på »Forbind«, installeres vores GitHub-app på den konto, du vælger. Du bestemmer selv, hvilke repositorier appen skal have adgang til, og du kan til enhver tid tilbagekalde denne adgang via GitHub. Når du vælger et repository, overføres alle de brugerdefinerede udløsere, du allerede har, straks til det, så det fra starten stemmer overens med appen i stedet for at blive udfyldt efterhånden.
| Hvad du laver | Hvad sker der? |
|---|---|
| Opret, rediger eller dupliker en udløser i appen | Filen er blevet lagt ind i dit repository |
| Slet en udløser i appen | Filen er blevet fjernet fra dit repository |
| Send en ændring til den tilknyttede gren | Udløserenes kode opdateres i appen |
Hver udløser er en fil, der er opkaldt efter sit handle, og som indeholder præcis det modul, du ser i editoren - intet andet omkring det. Du kan altså åbne den i din egen editor, køre den og køre lint på den ligesom enhver anden JavaScript-fil, og derefter bruge ovenstående endpoint /test til at køre den mod en reel indfanget begivenhed, før du committer.
Tilbage til en tidligere version
Du behøver ikke at kende Git for at fortryde en ændring. Når et repository er tilknyttet, viser udløseren en rullemenu under »Version«, der viser alle tidligere versioner af den pågældende fil med dato og forfatter. Vælg en af dem, så indlæses den i editoren som en ikke-gemt ændring, så du først kan læse den - det er først, når du gemmer, at den genindsættes som en ny commit.
Ændring eller afbrydelse
»Skift repository« fører dig tilbage til vælgeren uden at ændre installationen. »Afbryd forbindelse« ophæver installationen på GitHub og fjerner den også her - så det betyder præcis, hvad der står. »Administrer tilladelser« åbner installationsindstillingerne på GitHub, hvor du kan tilføje eller fjerne repositorier.
Test af brugerdefineret udløser
Hvis du gemmer din brugerdefinerede udløser i et repository og redigerer den i din egen editor, kan du køre den på den indsamlede eksempelbegivenhed uden først at gemme den i appen.
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 de oplysninger, som appens »Test«-knap viser: om den ville blive udløst, output-objektet, dine »ctx.log«-linjer og køretiden.
Der udføres intet, og intet gemmes - ingen arbejdsgange køres, ingen begivenheder registreres, ingen kvoter forbruges, og den gemte kode forbliver uændret. Det er sikkert at køre ved hver gemning fra en filovervåger. Se Brugerdefinerede udløsere for den fulde arbejdsgang.
MCP-server
Fanen »MCP« på siden »Udvikler« viser serverens URL og en forbindelseskommando, der er klar til at blive kopieret, til Claude, Cursor, VS Code, Gemini CLI og andre. Værktøjerne afspejler REST-endpunkterne, og værktøjssættet afspejler din nøgles niveau - en skrivebeskyttet nøgle har slet ikke adgang til værktøjerne til skrivning eller udførelse.
| Værktøj | Niveau | Hvad det gør |
|---|---|---|
list_triggers |
læs | Hver udløser og dens tilstand |
list_custom_triggers |
læs | Dine egne brugerdefinerede udløsere med tilhørende kode |
get_custom_trigger_sample |
læs | Den registrerede hændelse, som en brugerdefineret udløser tester i forhold til |
list_history |
læs | Nylige udløsere |
get_event |
læs | En enhed inklusive dens payload |
get_stats |
læs | Samlede statistikker |
get_permissions |
læs | Tildelte tilladelser og hvad de giver adgang til |
get_trigger |
skrive | En udløser i detaljer |
set_trigger |
skrive | Slå en udløser til eller fra |
set_triggers_bulk |
skrive | Tænd eller sluk for flere på én gang |
simulate_trigger |
udføre | Udløs en udløser efter behov |
test_custom_trigger |
udføre | Kør brugerdefineret udløser uden at gemme eller udløse den |
Det er netop det, der gør en assistent virkelig nyttig: Den kan give en oversigt over, hvad der findes, forklare, hvad en udløser kræver, aktivere den, udløse en testbegivenhed, læse resultatet op - og for brugerdefinerede udløsere omskrive koden og teste den - uden at du behøver at forlade samtalen.
Sådan beskyttes dine data
Begivenhedsdata returneres med personoplysninger maskeret: e-mailadresser, telefonnumre, kortnumre og felter med personnavne erstattes med ***. Shopify ressource-ID’er og forretningsfelter forbliver uændrede, så dataene fortsat kan bruges.
Maskeringen virker på feltnavne og værdimønstre, så den er omhyggelig, men udgør ikke en garanti - personoplysninger i et fritekstfelt kan stadig slippe igennem. Fejlmeddelelser renses desuden for interne diagnostiske oplysninger, inden de forlader serveren.
GitHub-forbindelsen gemmer ingen loginoplysninger, som du kan lække: Der gemmes kun installations-id’et, og adgangen til repositoriet sker via et token, der genereres ved behov og udløber inden for en time.
Næste skridt
- Brugerdefinerede udløsere - Lav din egen udløser med blot et par linjer JavaScript.
- Planer og anvendelse - hvad der regnes som en begivenhed, og hvordan godtgørelsen fungerer.
- Introduktion til Workflow Trigger Extensions - hvordan udløsere fungerer, og hvordan man aktiverer dem.
Hastighedsbegrænsninger
REST-API’en og MCP-serveren deler ét budget pr. API-nøgle.
- 300 anmodninger pr. 60 sekunder pr. nøgle, som et fast tidsvindue.
- Opkald på eksekveringsniveau tildeles et sekundært, strammere budget på 60 pr. time. De bruger begge dele, så en række eksekveringer trækker også på den fælles kvote. For denne app betyder det, at man simulerer en udløser og kører brugerdefineret udløserkode, hvilket begge dele virkelig sætter gang i dine arbejdsgange.
- Det er det samme på alle planer. Det er dit abonnements målere, der udløser begivenheder, ikke API-kald, så en opgradering medfører ikke en stigning i disse tal.
- Ved gennemgang af svar returneres HTTP 429. Vent et stykke tid, og prøv igen - helst med eksponentiel ventetid.
- Hvis vores cache kortvarigt er utilgængelig, fungerer begrænsningsmekanismen som en sikkerhedsforanstaltning, der forhindrer, at din integration blokeres.
Webhooks fra Inbound Shopify er ikke underlagt nogen hastighedsbegrænsning
Vi begrænser ikke de webhooks, som Shopify sender os - de modtages, så snart de ankommer, og sættes i kø. Den øvre grænse er din plans 30-dages kvote for begivenheder.
En ting, der er værd at vide, hvis du skriver brugerdefinerede udløsere: Din kode kører for hver begivenhed i det emne, den lytter til, og hver kørsel tæller som én begivenhed, også dem, du filtrerer fra ved at returnere null. Det koster det samme, som hvis den indbyggede udløser kørte på den samme begivenhed.
Shopify
Dette er Shopifys begrænsninger for Shopifys API’er, ikke vores. De gælder for, hvad denne app (og dine arbejdsgange) kan udføre på Shopify-siden, og du kan støde på dem i en stor butik, selvom du holder dig godt inden for vores begrænsninger.
- Indgangsarrayer er begrænset til 250 elementer på tværs af alle Shopify-API’er. En anmodning med et større array afvises.
- Paginering stopper ved 25.000 objekter. Tællingerne er nøjagtige op til 25.000; derover returnerer Shopify
25001, hvilket betyder »mere end 25.000«. Hvis du har brug for at gå dybere ned, skal du først filtrere. - GraphQL Admin API måles ud fra den beregnede forespørgselsomkostning, udtrykt i point pr. sekund, og loftet afhænger af butikkens »Shopify«-plan:
| Shopify plan | Point pr. sekund |
|---|---|
| Standard | 100 |
| Avanceret | 200 |
| Plus | 1000 |
| Enterprise (handelskomponenter) | 2000 |
Webshop API er ikke underlagt nogen hastighedsbegrænsning.
Alle detaljer: Shopify API-begrænsninger
