From 476460dad8086a4f29055027dc296129d25aae6e Mon Sep 17 00:00:00 2001 From: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com> Date: Tue, 9 Dec 2025 18:52:13 +0530 Subject: [PATCH] fix: Add custom payload template support for form submission webhooks (#25719) * fix: Add custom payload template support for form submission webhooks * delete * Update applyTemplate function signature Refactor applyTemplate function to accept specific data type. --- packages/features/webhooks/lib/sendPayload.ts | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/features/webhooks/lib/sendPayload.ts b/packages/features/webhooks/lib/sendPayload.ts index b5686ca657..d8ee69a521 100644 --- a/packages/features/webhooks/lib/sendPayload.ts +++ b/packages/features/webhooks/lib/sendPayload.ts @@ -173,7 +173,11 @@ function getZapierPayload(data: WithUTCOffsetType, + contentType: ContentType +) { const compiled = compile(template)(data).replace(/"/g, '"'); if (contentType === "application/json") { @@ -268,15 +272,27 @@ export const sendGenericWebhookPayload = async ({ data: Record; rootData?: Record; }) => { - const body = JSON.stringify({ + const { payloadTemplate: template } = webhook; + + const contentType = + !template || jsonParse(template) ? "application/json" : "application/x-www-form-urlencoded"; + + const defaultPayload = { // Added rootData props first so that using the known(i.e. triggerEvent, createdAt, payload) properties in rootData doesn't override the known properties ...rootData, triggerEvent: triggerEvent, createdAt: createdAt, payload: data, - }); + }; - return _sendPayload(secretKey, webhook, body, "application/json"); + let body: string; + if (template) { + body = applyTemplate(template, defaultPayload, contentType); + } else { + body = JSON.stringify(defaultPayload); + } + + return _sendPayload(secretKey, webhook, body, contentType); }; export const createWebhookSignature = (params: { secret?: string | null; body: string }) =>