Udvikler-API, MCP, GitHub og udløsersimulering

Udvikler-API, MCP, GitHub og udløsersimulering

Kopier side

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.

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

Udviklersiden med REST API’ets 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, samt hvor nøgler oprettes.

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.

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«, 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.

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

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