Udvikler-API, MCP, GitHub og udløsersimulering

Du kan gennemse dine triggere, aktivere eller deaktivere dem, se hændelseshistorikken og simulere en trigger 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 triggerkode er under versionsstyring. Alle tre elementer administreres på siden »Developer«.

Simulering af en udløser

Når man tester et Flow-workflow, indebærer det normalt, at man gennemfører den virkelige handling i sin butik - redigerer et produkt, afgiver en ordre eller afventer en afstemning. Simulering fjerner denne ventetid: Vælg en udløser, peg den mod 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 igen.
  • Via API’en 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 ægte webhook fra Shopify gør, så det, din arbejdsgang modtager, er præcis det samme, som den ville modtage i produktionsmiljøet.

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ørsel validerer udløseren, afslutter emnet og viser dig nyttelasten - 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.

Triggere, 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 begivenhedshistorik, 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 triggere og teste brugerdefineret triggerkode.

Den fulde nøgle vises én gang, når den oprettes. Nøgler gemmes i hashform og kan til enhver tid tilbagekaldes. Send den som et Bearer-token:

Authorization: Bearer ftk_your_key_here

Simulation kører på sit eget niveau af ovenstående årsag: Den kører dine automatiseringer i praksis, så en nøgle, der bruges til daglige aflæsninger, kan ikke udløse dem.

Udviklersiden med REST API’ens basis-URL, en testanmodning og knappen »Opret API-nøgle«
Siden »Udvikler«: REST-API’ets basis-URL, en anmodning til at teste en nøgle med, og hvor nøgler oprettes.

REST-API

Metode Sti Niveau Formål
HENT /api/v1 ingen API-indeks - bekræfter, at API'en er i drift
HENT /api/v1/me læs Kontroller godkendelsen, og se, hvilket niveau din nøgle har
HENT /api/v1/triggers læs Hver trigger 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 trigger
HENT /api/v1/triggers/custom læs Dine egne brugerdefinerede triggere med deres kode
HENT /api/v1/triggers/custom/:handle/test læs Begivenheden »Indsamlet prøve« for en brugerdefineret trigger
INDLÆG /api/v1/triggers/custom/:handle/test udføre Kør brugerdefineret triggerkode uden at gemme eller udløse den
HENT /api/v1/history læs Liste over udløsende begivenheder
HENT /api/v1/history/:id læs Hent én begivenhed med dens indhold
HENT /api/v1/stats læs Samlede tal, succesrate, statusoversigt
HENT /api/v1/permissions læs Hvilke datatilladelser du har givet, og hvad de enkelte giver adgang til

GET /api/v1/triggers er den, der er nyttig ved opsætningen: For hver trigger angiver den, hvilken tilladelse den kræver, om tilladelsen er tildelt, om triggeren 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 et timeout kan ikke medføre, at noget anvendes to gange, hvilket er vigtigt, når en assistent styrer 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}'

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« og ruller direkte ned til det kort, du har brug for.

Tilføj »"sync": true« for også at starte en datasynkronisering, så triggeren virker på poster, der allerede findes, i stedet for 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 triggere, du allerede har, straks til det, så det fra starten stemmer overens med appen i stedet for at blive udfyldt gradvist over tid.

Hvad du laver Hvad sker der?
Opret, rediger eller dupliker en trigger i appen Filen er gemt i dit repository
Slet en trigger i appen Filen er blevet fjernet fra dit repository
Send en ændring til den tilknyttede gren Triggerens kode opdateres i appen

Hver trigger er en fil, der er opkaldt efter sit handle, og som indeholder præcis det modul, du ser i editoren - uden noget ekstra omkring det. Du kan altså åbne den i din egen editor, køre den og tjekke den med lint ligesom enhver anden JavaScript-fil, og derefter bruge ovenstående endpoint /test til at køre den mod en reel registreret 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 trigger-editoren 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 triggerkode

Hvis du gemmer din brugerdefinerede triggerkode 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.

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 det tilbage, som appens »Test«-knap viser: om den ville blive udløst, output-objektet, dine »ctx.log«-linjer og køretiden.

Der udføres ingen handlinger, og intet gemmes - der kører ingen arbejdsgange, der registreres ingen begivenheder, der bruges ingen kvoter, 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 afhænger af 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 trigger og dens tilstand
list_custom_triggers læs Dine egne brugerdefinerede triggere med tilhørende kode
get_custom_trigger_sample læs Den registrerede begivenhed, som en brugerdefineret trigger tester mod
list_history læs Nylige udløsende begivenheder
get_event læs En enhed inklusive dens nyttelast
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 trigger efter behov
test_custom_trigger udføre Kør brugerdefineret triggerkode uden at gemme eller udløse

Det er netop det, der gør en assistent virkelig nyttig: Den kan give en oversigt over, hvad der findes, forklare, hvad en trigger kræver, aktivere den, udløse en testbegivenhed, læse resultatet op - og for brugerdefinerede triggere 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 omdannes til ***. 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 detaljer, inden de forlader serveren.

GitHub-forbindelsen gemmer ingen loginoplysninger, der kan lækkes: 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

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.
  • Kald 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 trigger og kører brugerdefineret triggerkode, hvilket begge dele virkelig sætter gang i dine arbejdsgange.
  • Det er det samme på alle abonnementer. Det er dit abonnements målere, der udløser hændelser, ikke API-kald, så en opgradering øger ikke 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 på den måde, at den lukker op i stedet for at blokere din integration.

Webhooks fra Inbound Shopify er ikke underlagt nogen hastighedsbegrænsning

Vi begrænser ikke de webhooks, som Shopify sender til os - de modtages, så snart de ankommer, og sættes i kø. Den øvre grænse er dit abonnementsprograms 30-dages kvote for begivenheder.

En ting, der er værd at vide, hvis du skriver brugerdefinerede triggere: 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 returnernull Det koster det samme som den indbyggede trigger ville gøre for 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, skal du først filtrere.
  • GraphQL Admin API-brugen måles ud fra den beregnede forespørgselsomkostning, angivet i point pr. sekund, og det maksimale forbrug afhænger af butikkens »Shopify«-abonnement:
Shopify plan Point pr. sekund
Standard 100
Avanceret 200
Plus 1000
Enterprise (handelskomponenter) 2000

Storefront API’et er ikke underlagt nogen begrænsninger på antallet af anmodninger.

Alle detaljer: Shopify API-begrænsninger