EL OUATINETECHNICIEN OUATINE
Nouveau service

Webhooks en tant que service

Connectez votre boutique ou votre site à la plateforme EL OUATINE : chaque nouvelle commande, chaque formulaire envoyé et chaque réservation arrive instantanément sur votre URL sous forme de notification JSON signée — sécurisée, fiable, avec nouvelles tentatives automatiques.

Ouvrir le tableau de bordDocumentation

Gratuit pour commencer

3 endpoints · 10 000 notifications par mois · sans carte bancaire.

🔏 Signature HMAC-SHA256

Chaque notification est signée avec votre secret et un horodatage intégré à la signature — vérifiez en deux lignes et rejetez toute falsification ou rejeu.

🔁 Nouvelles tentatives intelligentes

Si votre URL est injoignable, nous réessayons automatiquement : après 1 min, 5 min, 30 min, 2 h puis 12 h — aucun événement n’est perdu.

🛡️ Protection anti-SSRF

Nous refusons localhost, les IP privées et les protocoles autres que HTTP/HTTPS avant l’enregistrement — seule votre URL externe est acceptée.

📋 Journal de livraison complet

Chaque notification est journalisée : statut, nombre de tentatives, cause de l’échec — avec un bouton « Envoyer un test » pour valider votre URL.

Événements disponibles

Abonnez-vous uniquement à VOS événements — commandes de votre boutique, vos formulaires, vos réservations.

EventDescriptiondata.*
order.createdNouvelle commande payée dans votre boutiqueorder_id, service_name, price, currency, status, imei
order.statusLe statut d’une de vos commandes a changéorder_id, service_name, price, currency, status, imei
form.submittedNouveau formulaire soumisform_id, form_title, submission_id, fields{}
booking.createdNouvelle réservation sur l’un de vos servicesappointment_id, service_name, slot, customer_name, customer_phone
booking.statusLe statut d’une de vos réservations a changéappointment_id, service_name, status

Installation en 3 étapes

1. Créez un endpoint

Depuis votre compte : Webhooks ← nouvel endpoint. Collez l’URL réceptrice et choisissez les événements — vous recevez le secret de signature (affiché une seule fois).

2. Vérifiez la signature

Côté récepteur : recalculez le HMAC-SHA256 de l’horodatage + point + corps brut, comparez — et rejetez tout écart de plus de 5 minutes.

3. Testez puis adoptez

Cliquez « Envoyer un test » depuis le tableau — un événement webhook.test signé arrive aussitôt. Ensuite chaque événement réel arrive automatiquement.

Exemple : vérification de la signature (Node.js)

const crypto = require('crypto');
const express = require('express');
const app = express();

const SECRET = process.env.WH_SECRET; // shown once when you created the endpoint

app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
  const ts  = req.headers['x-elouatine-timestamp'];
  const sig = req.headers['x-elouatine-signature'];
  const evt = req.headers['x-elouatine-event'];
  const raw = req.body.toString('utf8'); // RAW body — do not JSON.parse first

  // 1) Reject skew > 5 minutes (replay protection)
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300)
    return res.status(401).send('stale timestamp');

  // 2) Recompute: HMAC-SHA256(secret, timestamp + '.' + rawBody)
  const expected = 'sha256=' + crypto.createHmac('sha256', SECRET)
    .update(ts + '.' + raw, 'utf8').digest('hex');

  // 3) Timing-safe compare
  const a = Buffer.from(sig || ''), b = Buffer.from(expected);
  if (a.length !== b.length || !crypto.timingSafeEqual(a, b))
    return res.status(401).send('bad signature');

  const payload = JSON.parse(raw); // { event, delivery_id, sent_at, data }
  console.log('event:', evt, 'delivery:', payload.delivery_id);
  // ... handle payload.data ...
  res.status(200).send('ok'); // 2xx = delivered
});

Structure de la notification

{
  "event": "order.created",
  "delivery_id": 12345,
  "sent_at": "2026-10-11T07:58:51.000Z",
  "data": {
    "order_id": 987,
    "service_name": "iCloud FMI OFF",
    "price": 12.5,
    "currency": "USD",
    "status": "paid",
    "imei": "3548..."
  }
}

⚖️ Politique d’utilisation équitable

Tout abus (rythme anormal, URL morte répétée) désactive l’endpoint automatiquement après 50 échecs consécutifs — réactivez-le via le support après avoir réparé votre URL.