diff --git a/packages/nodes-base/nodes/Form/test/utils.test.ts b/packages/nodes-base/nodes/Form/test/utils.test.ts
index b93b922d0f2..3705dc16373 100644
--- a/packages/nodes-base/nodes/Form/test/utils.test.ts
+++ b/packages/nodes-base/nodes/Form/test/utils.test.ts
@@ -547,6 +547,33 @@ describe('FormTrigger, formWebhook', () => {
});
});
+ it('should resolve expressions inside html field content', async () => {
+ const mockRender = jest.fn();
+
+ const formFields: FormFieldsParameter = [
+ {
+ fieldLabel: 'Custom HTML',
+ fieldType: 'html',
+ html: '
{{ $json.test }}
',
+ requiredField: false,
+ },
+ ];
+
+ executeFunctions.getNodeParameter.calledWith('formFields.values').mockReturnValue(formFields);
+ executeFunctions.evaluateExpression
+ .calledWith('{{ $json.test }}')
+ .mockReturnValue('TEST VALUE' as any);
+ executeFunctions.getResponseObject.mockReturnValue({
+ render: mockRender,
+ setHeader: jest.fn(),
+ } as any);
+
+ await formWebhook(executeFunctions);
+
+ const renderArgs = mockRender.mock.calls[0][1];
+ expect(renderArgs.formFields[0].html).toBe('TEST VALUE
');
+ });
+
it('should sanitize form descriptions', async () => {
const mockRender = jest.fn();
diff --git a/packages/nodes-base/nodes/Form/utils/utils.ts b/packages/nodes-base/nodes/Form/utils/utils.ts
index d79fbfb0e87..9d6a4b191ea 100644
--- a/packages/nodes-base/nodes/Form/utils/utils.ts
+++ b/packages/nodes-base/nodes/Form/utils/utils.ts
@@ -630,6 +630,16 @@ export async function formWebhook(
const mode = context.getMode() === 'manual' ? 'test' : 'production';
const formFields = context.getNodeParameter('formFields.values', []) as FormFieldsParameter;
+ for (const field of formFields) {
+ if (field.fieldType === 'html') {
+ let html = field.html ?? '';
+ for (const resolvable of getResolvables(html)) {
+ html = html.replace(resolvable, context.evaluateExpression(resolvable) as string);
+ }
+ field.html = html;
+ }
+ }
+
const method = context.getRequestObject().method;
validateResponseModeConfiguration(context);