Intégrations

Brancher Heurix sur votre plateforme.

Des guides techniques avec du vrai code, pas des promesses en l'air. Chaque intégration couvre deux choses : afficher les résultats Heurix à la place de la recherche native, et garder votre catalogue synchronisé.

Honnêteté d'abord, et la réponse n'est pas la même selon la plateforme. PrestaShop et WooCommerce ont chacun un module en bêta, fourni sur demande avec accompagnement pendant l'intégration — voir leur page. Shopify et Magento n'ont que le guide ci-dessous ; celui de Shopify n'a pas encore été éprouvé sur une boutique réelle. Aucun des quatre ne s'installe depuis le store officiel de sa plateforme aujourd'hui, et le code qui suit reste la voie si vous préférez brancher la recherche vous-même.

Sans développement

Import CSV depuis la console

Vous exportez votre catalogue depuis un ERP ou un PIM ? Déposez le fichier dans votre console, en CSV ou en XML : la structure est détectée, la correspondance de champs proposée, le pack de règles recommandé d'après votre contenu. Voir la marche à suivre →

Schéma : deux flux relient votre boutique à l'API Heurix. La synchronisation part de la boutique et pousse chaque fiche vers POST /v1/index/catalogue/items à chaque création, modification ou suppression. La recherche part de la requête d'un client et revient en résultats classés. Seul point où les plateformes diffèrent : PrestaShop, WooCommerce et Magento appellent l'API depuis leur code serveur, la clé restant dans la configuration, tandis que Shopify, dont un thème ne peut détenir de clé secrète, passe par un relais serverless qui la détient.
Particularité Shopify. Shopify ne permet pas d'exécuter du code serveur avec une clé secrète directement dans un thème (Liquid est rendu côté serveur mais sans appels sortants authentifiés possibles). La bonne architecture : une petite fonction serverless (Cloudflare Worker ci-dessous, gratuit jusqu'à 100 000 requêtes/jour) qui détient la vraie clé Heurix et sert de relais entre votre thème et l'API — votre clé n'est jamais exposée dans le navigateur.

1. Brancher la recherche

Le relais (Cloudflare Worker) :

// worker.js — déployé sur Cloudflare Workers (gratuit pour ce volume)
export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    const q = url.searchParams.get("q") || "";
    const res = await fetch("https://api.heurix.fr/v1/index/" + env.HEURIX_CATALOG + "/search", {
      method: "POST",
      headers: {
        "Authorization": "Bearer " + env.HEURIX_API_KEY,  // secret Cloudflare, jamais exposé
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ q, limit: 20 })
    });
    return new Response(await res.text(), {
      headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "https://votre-boutique.myshopify.com" }
    });
  }
}

Dans le thème (Online Store 2.0), remplacez le rendu de sections/search-results.liquid par un appel à ce relais :

<div id="heurix-results"></div>
<script>
  const params = new URLSearchParams(window.location.search);
  fetch("https://votre-worker.workers.dev/search?q=" + encodeURIComponent(params.get("q") || ""))
    .then(r => r.json())
    .then(data => {
      document.getElementById("heurix-results").innerHTML = data.hits.map(h =>
        `<a href="/products/${h.product.handle}" class="heurix-hit">
           <span>${h.product.name}</span><span>${h.product.price} €</span>
         </a>`
      ).join("");
    });
</script>

2. Synchroniser le catalogue

Enregistrez un webhook Shopify (Admin API ou shopify.app.toml pour une app custom) sur les sujets products/create, products/update, products/delete, pointé vers le même Worker :

// Ajout dans worker.js : gestion du webhook Shopify
async function handleWebhook(request, env) {
  const product = await request.json();
  await fetch("https://api.heurix.fr/v1/index/" + env.HEURIX_CATALOG + "/items", {
    method: "POST",
    headers: { "Authorization": "Bearer " + env.HEURIX_API_KEY, "Content-Type": "application/json" },
    body: JSON.stringify({
      rulepack: "mode",
      items: [{
        id: String(product.id),
        name: product.title,
        ref: product.variants?.[0]?.sku || "",
        description: product.body_html?.replace(/<[^>]+>/g, "") || "",
        stock: product.variants?.reduce((s, v) => s + (v.inventory_quantity || 0), 0) || 0,
        handle: product.handle,
        price: product.variants?.[0]?.price
      }]
    })
  });
}

Pensez à vérifier la signature HMAC du webhook Shopify (X-Shopify-Hmac-Sha256) avant de traiter la charge utile, pour ne pas accepter de requêtes forgées.

Une question sur votre plateforme ?

Ces guides sont un point de départ technique, pas un module clé en main. Si votre configuration sort de l'ordinaire, écrivez-nous.

Essai gratuit 14 jours

Testez Heurix sur votre catalogue, sans carte bancaire.

Voir les tarifs