# Respond to webhook

Renvoie une réponse personnalisée à l'appelant du webhook entrant et clôt la requête de façon synchrone.

## Vue d'ensemble

Quand un workflow est déclenché par un nœud **Webhook**, l'appelant HTTP reste en attente jusqu'à ce que le workflow termine (par défaut : `last_output` du dernier nœud) ou qu'un nœud Respond to webhook se déclenche. Ce nœud permet de composer précisément la réponse : code statut, content-type, headers personnalisés, redirections et corps.

Placez-le sur la branche qui doit répondre — typiquement juste avant la fin, ou dans une branche If/else précise. Les nœuds aval continuent (et peuvent avoir des effets de bord) mais ne peuvent pas changer ce que l'appelant a déjà reçu.

Sans Respond to webhook, le `responseMode` du Webhook contrôle la réponse (`lastNode` → `last_output`, `immediate` → `200 OK` avant exécution).

## Quand l'utiliser

Un nœud Respond n'a de sens que si un appelant HTTP attend une réponse. L'éditeur l'impose à la sauvegarde (`400`) :

- **Autorisé** avec un trigger **Webhook**, ou avec une entrée **Start** (API publiée). Dans les deux cas un appelant est maintenu en attente.
- **Bloqué** avec un trigger **Schedule** ou **Event listener** — ces runs sont internes, déclenchés par la plateforme, donc aucun appelant à qui répondre.
- **Un seul** nœud Respond est autorisé par workflow. Un second est rejeté à la sauvegarde.

Pour répondre différemment selon le cas, aiguillez avec If/else *en amont* puis convergez sur l'unique nœud Respond, ou pilotez ses `statusCode`/`responseBody` via des placeholders.

## Configuration

| Champ | Description |
| --- | --- |
| `statusCode` | Code HTTP renvoyé. Défaut `200`. |
| `responseBody` | Template de corps. Supporte les `{placeholders}`. Défaut `{last_output}`. |
| `contentType` | En-tête `Content-Type`. Défaut `application/json`. |
| `responseHeaders` | Objet JSON de headers de réponse. Les valeurs peuvent utiliser des `{placeholders}`. |
| `responseType` | `body` ou `redirect`. Une redirection définit le header `Location`. |
| `redirectUrl` | URL utilisée quand `responseType=redirect`. Supporte les `{placeholders}`. |
| `bodyEncoding` | `text` ou `base64`. Utilisez `base64` pour les réponses binaires. |

Le nœud écrit `ctx.webhook_response` (`{statusCode, body, contentType, headers, bodyEncoding}`) et réaffecte `last_output` au corps rendu pour les nœuds suivants.

## Exemple

Construire une petite API JSON :

```
Webhook (POST /orders)
  → Agent (valider + persister)
  → Respond to webhook
      statusCode: 201
      contentType: application/json
      responseBody: {"id": "{order_id}", "status": "created"}
```

Renvoyer un 4xx sur une branche de validation — aiguillez *avant* l'unique nœud Respond et pilotez ses champs depuis l'amont :

```
If/else (input.amount <= 0)
  ├─ true  → Set state (status=400, error="invalid amount")
  └─ false → Agent (traiter) → Set state (status=200, …)
            ↓
       Respond to webhook (statusCode: {state.status}, …)
```

## Pièges

- Valide uniquement si un appelant HTTP attend : trigger **Webhook** ou entrée **Start** (API publiée). Avec un trigger **Schedule** ou **Event listener** la sauvegarde est rejetée (`400`) — aucun appelant à qui répondre.
- **Un seul nœud Respond par workflow.** Un second échoue à la validation à la sauvegarde.
- Le corps est rendu en chaîne. Pour du vrai JSON, mettez `contentType: application/json` et écrivez le JSON en clair — les placeholders ne posent pas les guillemets pour vous.
- Pour une réponse binaire, mettez une chaîne base64 dans `responseBody`, définissez `bodyEncoding: base64`, puis choisissez le bon `contentType`.
- Le streaming direct du corps HTTP n'est pas supporté ici. Pour les runs longs, utilisez les URLs de polling/stream renvoyées par le mode immédiat.
- Une fois la réponse envoyée, l'appelant l'a reçue. Les nœuds suivants peuvent tourner mais ne changeront pas ce qui est parti.
- Pour des workflows longs, préférez `responseMode: immediate` sur le Webhook — l'appelant reçoit `200 OK` immédiatement et le workflow tourne en arrière-plan.

---

*Source: https://agentbuilder.systalink.sn/docs/node-respond-webhook — human documentation.*
*Other language: [/docs-md/en/node-respond-webhook.md](/docs-md/en/node-respond-webhook.md).*
*Machine-readable index: [/llms.txt](/llms.txt).*
