X-Jelou-Signature header with format sha256=<HMAC_HEX> is used in both directions. The signingKey is required when you enable the channel.
- Inbound (your app → Jelou): you must generate the signature when calling
POST /v1/custom-channel/:botIdandPOST /v1/custom-channel/:botId/status. - Outbound (Jelou → your webhook): verify the signature on every delivery to your
webhookUrl, especially useful to ensure the message is legitimate and unmodified.
credentials.auth (api_key / bearer / basic).
Generate a signature on inbound requests
Sign the exact raw body you send (the same HTTP body bytes), not a differently re-serialized object. Applies to send interaction and check status.Verify signatures on events received at your webhook
Jelou signs the stringified JSON of the outbound payload (JSON.stringify of the full envelope).
X-Jelou-Signature header.
A retried delivery carries the same signature, because the signed body is identical. So rejecting requests whose signature you have already seen would silently drop legitimate retries — deduplicate by the authenticated
message.messageId instead. X-Jelou-Delivery-Attempt is unsigned and tells you which attempt it is, but it proves nothing: treat it as a log field, never as replay protection. See Delivery and retries.