Documentation Frappe Framework

Frappe Framework

Webhooks

On choisit le DocType, l’événement, l’URL et la méthode. Seuls les webhooks cochés Enabled partent. Chaque succès laisse un journal.

2 min de lectureMis à jour le Source : docs.frappe.io

Rôle

Un webhook est un rappel HTTP défini par l’utilisateur. Pour un DocType, il part sur un événement, et seulement si des conditions facultatives sont vraies. Le site source appelle l’URI configurée. Un événement d’un site peut ainsi déclencher un comportement sur un autre.

Réglage

Integrations, Webhook, Webhook.

  1. DocType, par exemple Quotation.
  2. Doc Event, par exemple on_update.
  3. Conditions facultatives sur le document.
  4. URL valide.
  5. Méthode. POST par défaut.
  6. En-têtes facultatifs, par exemple une clé d’API.

Décocher Enabled arrête le webhook. Seuls ceux qui sont activés partent.

En structure formulaire, la table choisit des champs : le fieldname est la clé. En JSON, les champs s’insèrent en Jinja, entre guillemets doubles.

Signature

Un Webhook Secret, à ne pas publier, prouve que l’appel vient de Frappe. L’en-tête X-Frappe-Webhook-Signature est alors ajouté. Sa valeur est le HMAC-SHA256 de la charge utile, encodé en base64, calculé avec le secret.

Exemple

Quotation, on_update, https://httpbin.org/post, structure Form URL-Encoded. L’en-tête publié a pour clé Content-Type: (deux-points inclus) et pour valeur application/x-www-form-urlencoded. Les données : fieldname name vers la clé id, fieldname items vers lineItems. La réponse d’exemple montre id égal à QTN-00001 et lineItems comme la table des lignes, avec quantités, taux et entrepôt.

Corps JSON d’une transaction de vente :

json
{
  "id": "{{ doc.name }}",
  "total": "{{ doc.total }} EUR",
  "total_net_weight": "{{ doc.total_net_weight }} kg",
  "customer": "{{ doc.customer }}",
  "created": "{{ doc.creation }}",
  "items": {{ doc["items"] | tojson }}
}

items n’est pas entre guillemets : le filtre tojson produit déjà du JSON.

Chaque requête réussie crée un journal avec les détails. La page ne décrit pas de journal pour un échec.

Point d’attention

Les champs Jinja du corps JSON doivent être entre guillemets, sauf un filtre qui émet déjà du JSON, comme tojson sur items. Le secret ne se partage pas.

Webhooks Frappe vers une URL HTTP | ERPNext Lab