Effectuez une requête HTTP depuis Shopify Flow

Pourquoi utiliser cette méthode pour les requêtes HTTP ?

Shopify Flow comprend une action intégrée « Envoyer une requête HTTP », mais celle-ci n'est disponible que sur certains forfaits Shopify. Si votre boutique est sous le forfait « Basic », vous pouvez tout de même appeler des API externes en utilisant à la place Workflow Transactional Email.

Vous créez la requête une seule fois dans l'application, puis vous la sélectionnez dans votre workflow à l'aide de l'action « Requête HTTP ». Le fait de conserver la requête dans l'application plutôt que dans le workflow signifie également que les identifiants ne figurent jamais dans la configuration de votre Shopify Flow, et que vous bénéficiez gratuitement d'une journalisation complète des requêtes et des réponses.

Ce que vous allez réaliser

Un workflow qui s'exécute toutes les 10 minutes, identifie les produits qui ne figurent pas encore dans Airtable et les y envoie.

Ceci utilise :

  • Les secrets pour conserver le jeton Airtable et l'identifiant de base
  • Requêtes HTTP pour définir le modèle de requête
  • L'action « Requête HTTP » disponible sur Shopify Flow pour l'exécuter
  • Historique permettant de vérifier le résultat

Guide vidéo

L'ensemble du processus : la création des secrets, la requête HTTP et le workflow. La vidéo est sans son.

Avant de commencer

  • Workflow Transactional Email est installé.
  • Vous avez accès à Shopify Flow.
  • Vous disposez d'un identifiant de base Airtable et d'une table prête à recevoir les données relatives aux produits.
  • Vous disposez d’un jeton d’accès Airtable () doté des autorisations nécessaires.

Étape 1 : Enregistrez les identifiants en tant que secrets

Au lieu de saisir vos identifiants dans la requête, enregistrez-les une seule fois en tant que « secrets » et faites-y référence à l'aide de l'{{ secrets.yourKeyName }}. Ils sont chiffrés au repos, réutilisables d'une requête à l'autre et supprimés de votre historique.

Ouvrez « Secrets » et cliquez sur « Créer un secret ».

La page « Secrets » avec le bouton « Créer un secret »

Saisissez la clé, la valeur et une description, puis enregistrez.

Saisie d'une clé secrète, d'une valeur et d'une description

Cet exemple stocke deux informations confidentielles : le jeton d'accès personnel et l'identifiant de la base Airtable.

Étape 2 : Créer la demande

Cet exemple utilise le point de terminaison « create-records » d'Airtable :.

Sélectionnez « Requêtes HTTP », puis cliquez sur « Créer une requête ».

La page « Requêtes HTTP » avec le bouton « Créer une requête »

Donnez-lui un nom clair, tel que « Créer une fiche produit Airtable » : c'est ce que vous rechercherez par la suite dans Shopify Flow.

Définissez la méthode. Pour créer des enregistrements Airtable, il s'agit de la méthode POST.

Saisissez le point de terminaison dans le champ URL. Le préfixe https:// est fixe ; saisissez donc le reste :

api.airtable.com/v0/{{ secrets.airTableProductsBaseId }}/Products

Cette image montre comment le point de terminaison Airtable correspond à votre base ; vous pouvez donc l'adapter à votre propre configuration :

Comment l'URL du point de terminaison Airtable est associée à la base

Ajoutez les en-têtes requis par Airtable :

Authorization: Bearer {{ secrets.airtableAccessToken }}
Content-Type: application/json

Dans le corps de la requête, utilisez une variable pour les enregistrements afin que Shopify Flow puisse les fournir :

{
  "records": {{ variables.records }}
}

Airtable s'attend à ce que cette variable soit une liste présentant la structure suivante :

"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
    }
  }
]

Nous allons créer ce tableau dans le workflow à l'étape suivante.

La requête finale se présente comme suit :

La requête HTTP Airtable complète :

La page « Requêtes HTTP » répertorie une requête enregistrée avec sa méthode et son URL
La rubrique « Requêtes HTTP » répertorie toutes les requêtes enregistrées ; la fonction « Créer une requête » permet d'en créer une nouvelle.
L'éditeur de requêtes HTTP avec la méthode, l'URL, les en-têtes et le corps
La requête : méthode, URL, en-têtes et corps, chacun pouvant utiliser des variables et des secrets.

Enregistrez la requête. Elle est désormais disponible dans l'action « Requête HTTP » de Shopify Flow.

Étape 3 : Créer le workflow

Ouvrez Shopify Flow et créez un nouveau workflow.

Choisissez un déclencheur basé sur un calendrier. Dans cet exemple, le déclencheur s'exécute toutes les 10 minutes à des fins de démonstration ; choisissez une fréquence adaptée à votre environnement de production.

Un déclencheur programmé dans Shopify Flow

Récupérez les produits qui ne figurent pas encore dans Airtable. Les produits déjà envoyés se voient attribuer la balise added-to-airtable lors de la dernière étape ; cette requête les exclut donc. Consultez la référence aux arguments de requête d’Shopify à l’adresse.

Récupération des produits non étiquetés dans Shopify Flow

Formatez à présent les données. Le corps de la requête attend une variable de type records ; utilisez donc l'action « Exécuter du code » de Shopify Flow pour organiser les produits récupérés sous la forme de ce tableau.

Ajouter l'action « Exécuter le code »

Veuillez configurer cette étape comme suit :

Configuration de l'étape « Exécuter le code »

La requête :

query {
  getProductData {
    id
    handle
    title
  }
}

Le code :

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)
  };
}

Le schéma de sortie :

"The output of Run Code"
type Output {
  "The message returned by the script"
  records: String
}

Vous pouvez prévisualiser le résultat à droite :

Aperçu de la sortie du code « Run »

Ajoutez l'action « Requête HTTP » proposée par cette application.

Ajout de l'action « Requête HTTP »

Lorsque vous y êtes invité, sélectionnez la demande que vous avez enregistrée - « Créer une fiche produit Airtable » - puis enregistrez et revenez au workflow.

Sélection de la requête HTTP enregistrée

Dans le champ « Variables » de l'action, transmettez les enregistrements que vous venez de mettre en forme :

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

Transmission des enregistrements formatés à l' de requête

Enfin, parcourez les produits récupérés et balisez-les avec la balise added-to-airtable afin que la prochaine exécution ne les reprenne pas.

Balise des produits après l'envoi d'

Enregistrez et activez le workflow.

Étape 4 : Vérifiez que cela a fonctionné

Dans l'historique, vous pouvez voir si la requête a abouti et quelle réponse Airtable a renvoyée.

La liste de l'historique affichant l' de la requête

Ouvrez l'entrée pour examiner les données de la requête, celles de la réponse ainsi que les délais.

La page de détail de la demande

Depuis la page de modification de la demande, le bouton « Historique de la demande » vous permet d'accéder directement à l'historique filtré en fonction de cette demande précise.

Les numéros que l'application ne vous permettra pas d'appeler

Les requêtes configurées par les marchands sont soumises à un filtre de sécurité. Les requêtes vers des adresses réseau internes ou privées sont refusées, notamment localhost, les points de terminaison de métadonnées cloud et toute adresse correspondant à une plage privée, même via une redirection. Si vous constatez une erreur mentionnant SSRF blocked, cela signifie que la destination figure sur cette liste. Les requêtes ne peuvent en outre pas dépasser 5 redirections et la taille de la réponse est plafonnée à 10 Mo.

Shopify Flow Elle limite elle-même la taille d'une réponse d'action à 50 Ko. Si la réponse d'un test dépasse cette limite, l'application bloque l'enregistrement plutôt que de laisser l'étape échouer au sein d'un workflow en cours d'exécution.

Bonnes pratiques

  • Utilisez des noms de requêtes clairs afin qu'ils soient faciles à retrouver dans Shopify Flow.
  • Enregistrez les jetons API en tant que secrets plutôt que de les saisir dans les en-têtes.
  • Veillez à ce que le programme se concentre sur les champs dont la destination a réellement besoin.
  • Vérifiez l'historique après chaque modification afin de vous assurer que la requête aboutit toujours.
  • Ajoutez une condition avant la requête afin qu'elle ne s'exécute pas lors de cycles vides.

Connexes