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

Siden »Hemmeligheder« med knappen »Opret hemmelighed«

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

Indtastning af en hemmelig nøgle, en værdi og en beskrivelse

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

Siden »HTTP-anmodninger« med knappen »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:

Hvordan Airtable-endpoint-URL’en svarer til basen

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:

Den færdige Airtable-HTTP-anmodning

Siden »HTTP-anmodninger«, der viser en gemt anmodning med dens metode og URL
Under »HTTP-anmodninger« vises en liste over alle gemte anmodninger; med »Opret anmodning« oprettes en ny.
HTTP-anmodningseditoren med metode, URL, overskrifter og brødtekst
Anmodningen: metode, URL, overskrifter og brødtekst, hvor der i hver enkelt del kan anvendes variabler og hemmelige nøgler.

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.

En planlagt udløser i Shopify Flow

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

Hentning af produkter uden mærker på Shopify Flow

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.

Tilføjelse af handlingen »Kør kode«

Konfigurer trinnet på følgende måde:

Konfiguration af trinnet »Kør kode«

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:

Forhåndsvisning af udskriften fra »Kør kode«

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

Tilføjelse af handlingen »HTTP-anmodning«

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.

Valg af den gemte HTTP-anmodnings

I feltet »Variabler« i handlingen skal du indsætte de poster, du netop har formateret:

{
  "records": "{{runCode.records}}"
}

Overførsel af de formaterede poster til anmodningsen

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.

Mærkning af produkterne efter afsendelse

Gem og aktiver arbejdsgangen.

Trin 4: Kontroller, om det virkede

Under »Historik« kan du se, om anmodningen lykkedes, og hvad Airtable returnerede.

Listen »Historie«, der viser anmodningen

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

Detaljevisningen for anmodningen

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