Send en HTTP-anmodning fra Shopify Flow
Hvorfor bruge dette til HTTP-anmodninger?
Shopify Flow indeholder en indbygget handling til at sende HTTP-anmodninger, men den er kun tilgængelig på visse Shopify-planer. Hvis din butik kører på Basic-planen, kan du stadig kalde eksterne API’er ved i stedet at bruge Workflow Transactional Email.
Du opretter anmodningen én gang i appen og vælger den derefter i din arbejdsgang ved hjælp af handlingen »HTTP-anmodning«. Ved at opbevare anmodningen i appen i stedet for i arbejdsgangen sikrer du også, at adgangsoplysninger aldrig opbevares i din Shopify Flow-konfiguration, og du får fuld logning af anmodninger og svar helt gratis.
Hvad du skal bygge
En arbejdsgang, der kører hvert 10. minut, finder produkter, der endnu ikke findes i Airtable, og sender dem derhen.
Her anvendes:
- Tips til at gemme Airtable-tokenet og base-id’et
- HTTP-anmodninger til definition af anmodningsskabelonen
- HTTP-anmodningshandlingen i Shopify Flow for at køre den
- Historik til at kontrollere resultatet
Videovejledning
Hele opsætningen: oprettelse af hemmelighederne, HTTP-anmodningen og arbejdsgangen. Videoen har ingen lyd.
Før du går i gang
- Workflow Transactional Email er installeret.
- Du har adgang til Shopify Flow.
- Du har et Airtable-base-id og en tabel, der er klar til at modtage produktdata.
- Du har et Airtable-adgangstoken fra med de rette rettigheder.
Trin 1: Gem adgangsoplysningerne som hemmelige oplysninger
I stedet for at indtaste adgangsoplysninger direkte i anmodningen bør du gemme dem én gang som hemmeligheder og henvise til dem som {{ secrets.yourKeyName }}. De er krypteret, når de er gemt, kan genbruges på tværs af anmodninger og fjernes fra din historik.
Åbn »Hemmeligheder«, og klik på »Opret hemmelighed«.

Indtast nøglen, værdien og en beskrivelse, og gem derefter.

I dette eksempel gemmes to hemmeligheder: det personlige adgangstoken og Airtable-base-id’et.
Trin 2: Opret anmodningen
I dette eksempel bruges Airtables »create-records«-endpoint.
Åbn »HTTP-anmodninger«, og klik på »Opret anmodning«.

Giv den et tydeligt navn, f.eks. »Opret Airtable-produktpost« - det er det, du senere skal søge efter i Shopify Flow.
Vælg metode. Til oprettelse af Airtable-poster skal du vælge POST.
Indtast slutpunktet i URL-feltet. Præfikset https:// er fast, så indtast resten:
api.airtable.com/v0/{{ secrets.airTableProductsBaseId }}/Products
Dette billede viser, hvordan Airtable-endpointet er knyttet til din base, så du kan tilpasse det til dine egne behov:

Indsæt de overskrifter, som Airtable kræver:
Authorization: Bearer {{ secrets.airtableAccessToken }}
Content-Type: application/json
I anmodningens brødtekst skal du bruge en variabel til posterne, så Shopify Flow kan levere dem:
{
"records": {{ variables.records }}
}
Airtable forventer, at denne variabel vil udmønte sig i en matrix med følgende struktur:
"records": [
{
"fields": {
"Title": "Classic White T-Shirt",
"Handle": "classic-white-tshirt",
"Product ID": 1001
}
},
{
"fields": {
"Title": "Eco-Friendly Water Bottle",
"Handle": "eco-water-bottle",
"Product ID": 1002
}
}
]
Vi vil oprette den matrix i arbejdsgangen i det næste trin.
Den færdige anmodning ser således ud:



Gem anmodningen. Den kan nu vælges under handlingen »HTTP-anmodning« i »Shopify Flow«.
Trin 3: Opret arbejdsgangen
Åbn Shopify Flow og opret en ny arbejdsgang.
Vælg en tidsplanbaseret udløser. I dette eksempel kører den hvert 10. minut til demonstrationsformål - vælg en passende hyppighed til produktionsbrug.

Hent de produkter, der endnu ikke findes i Airtable. Produkter, der allerede er sendt, får mærket »added-to-airtable« i det sidste trin, så denne forespørgsel udelukker dem. Se Shopify’s reference til forespørgselsargumentet »« på.

Formater nu dataene. Anmodningens brødtekst forventer en variabel af typen »records«, så brug Shopify Flow-handlingen »Kør kode« til at omforme de hentede produkter til denne array.

Konfigurer trinnet på følgende måde:

Forespørgslen:
query {
getProductData {
id
handle
title
}
}
Koden:
export default function main(input) {
const records = input.getProductData.map((data) => {
const numericId = parseInt(data.id.replace("gid://shopify/Product/", ""));
return {
fields: {
"Product ID": numericId,
"Title": data.title,
"Handle": data.handle
}
};
});
return {
records: JSON.stringify(records)
};
}
Udgangsskemaet:
"The output of Run Code"
type Output {
"The message returned by the script"
records: String
}
Du kan se et eksempel på resultatet til højre:

Tilføj handlingen »HTTP-anmodning«, som denne app tilbyder.

Når du bliver bedt om det, skal du vælge den anmodning, du har gemt - Opret Airtable-produktpost - og derefter gemme og vende tilbage til arbejdsgangen.

I feltet »Variabler« i handlingen skal du indsætte de poster, du netop har formateret:
{
"records": "{{runCode.records}}"
}
en
Til sidst skal du gennemløbe de hentede produkter og tag dem som »added-to-airtable«, så de ikke hentes igen ved næste kørsel.

Gem og aktiver arbejdsgangen.
Trin 4: Kontroller, om det virkede
Under »Historik« kan du se, om anmodningen lykkedes, og hvad Airtable returnerede.

Åbn posten for at gennemgå anmodningsdataene, svardataene og tidsforløbet.

Fra redigeringssiden for anmodningen fører knappen »Anmodningshistorik« direkte til historikken, der er filtreret efter netop den pågældende anmodning.
Hvad appen ikke lader dig ringe til
Anmodninger, der er konfigureret af forhandleren, gennemgår en sikkerhedskontrol. Anmodninger til interne eller private netværksadresser afvises, herunder localhost, cloud-metadata-endepunkter og alt, der peger på et privat adressebånd - selv via en omdirigering. Hvis du ser en fejlmeddelelse, der nævner SSRF blocked, er destinationen på denne liste. Anmodninger følger desuden højst 5 omdirigeringer, og svaret er begrænset til 10 MB.
Shopify Flow Selve appen sætter en øvre grænse på 50 KB for et svar på en handling. Hvis et testsvar er større, blokerer appen gemningen i stedet for at lade trinnet mislykkes i en aktiv arbejdsgang.
Gode eksempler
- Brug tydelige navne på forespørgslerne, så de er nemme at finde i Shopify Flow.
- Gem API-tokens som hemmelige oplysninger i stedet for at indtaste dem i headere.
- Sørg for, at systemet fokuserer på de felter, som destinationen rent faktisk har brug for.
- Kontroller historikken efter enhver ændring for at sikre, at anmodningen stadig gennemføres.
- Indsæt en betingelse før anmodningen, så den ikke kører i tomgang.
Relateret
- Hemmeligheder - lagring af adgangsoplysninger.
- Variabler og væske - variabelhenvisningen, herunder overskrivning i koden.
- Historik og fejlfinding - læsning af en mislykket anmodning.

