Repository: n8n-io/n8n
Pull request #13751: feat(WhatsApp Trigger Node): New option to opt-out from message status updates
Author: login: michael-radency
Labels: name: node/improvement
description: New feature or request
name: n8n team
description: Authored by the n8n team
name: node/issue
description: Issue with a node
name: Released
Created: 2025-03-07T06:57:34Z | Merged: 2025-03-11T09:27:58Z

## Summary

![image](https://github.com/user-attachments/assets/db81d26d-569a-4727-b6bd-caed27c57229)


## Related Linear tickets, Github issues, and Community forum posts

https://linear.app/n8n/issue/NODE-2051/whatsapp-node-triggers-multiple-times-on-whatsapp-sending-meta-data
https://community.n8n.io/t/multiple-workflow-executions-per-individual-whatsapp-message/61675


## Review / Merge checklist

- [ ] PR title and summary are descriptive. ([conventions](../blob/master/.github/pull_request_title_conventions.md)) <!--
   **Remember, the title automatically goes into the changelog.
   Use `(no-changelog)` otherwise.**
-->
- [ ] [Docs updated](https://github.com/n8n-io/n8n-docs) or follow-up ticket created.
- [ ] Tests included. <!--
   A bug is not considered fixed, unless a test is added to prevent it from happening again.
   A feature is not complete without tests.
-->
- [ ] PR Labeled with `release/backport` (if the PR is an urgent fix that needs to be backported)



Diff:
diff --git a/packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts b/packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
index adeb6b4901b4f..1a8c012eff14d 100644
--- a/packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
+++ b/packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
@@ -8,7 +8,6 @@ import {
 	type IWebhookFunctions,
 	type IWebhookResponseData,
 	NodeConnectionType,
-	type INodeProperties,
 } from 'n8n-workflow';
 
 import {
@@ -18,57 +17,30 @@ import {
 } from './GenericFunctions';
 import type { WhatsAppPageEvent } from './types';
 
-const whatsappTriggerDescription: INodeProperties[] = [
-	{
-		displayName: 'Trigger On',
-		name: 'updates',
-		type: 'multiOptions',
-		required: true,
-		default: [],
-		options: [
-			{
-				name: 'Account Review Update',
-				value: 'account_review_update',
-			},
-			{
-				name: 'Account Update',
-				value: 'account_update',
-			},
-			{
-				name: 'Business Capability Update',
-				value: 'business_capability_update',
-			},
-			{
-				name: 'Message Template Quality Update',
-				value: 'message_template_quality_update',
-			},
-			{
-				name: 'Message Template Status Update',
-				value: 'message_template_status_update',
-			},
-			{
-				name: 'Messages',
-				value: 'messages',
-			},
-			{
-				name: 'Phone Number Name Update',
-				value: 'phone_number_name_update',
-			},
-			{
-				name: 'Phone Number Quality Update',
-				value: 'phone_number_quality_update',
-			},
-			{
-				name: 'Security',
-				value: 'security',
-			},
-			{
-				name: 'Template Category Update',
-				value: 'template_category_update',
-			},
-		],
-	},
-];
+export const filterStatuses = (
+	events: Array<{ statuses?: Array<{ status: string }> }>,
+	allowedStatuses: string[] | undefined,
+) => {
+	if (!allowedStatuses) return events;
+
+	// If allowedStatuses is empty filter out events with statuses
+	if (!allowedStatuses.length) {
+		return events.filter((event) => (event?.statuses ? false : true));
+	}
+
+	// If 'all' is not in allowedStatuses, return only events with allowed status
+	if (!allowedStatuses.includes('all')) {
+		return events.filter((event) => {
+			const statuses = event.statuses;
+			if (statuses?.length) {
+				return statuses.some((status) => allowedStatuses.includes(status.status));
+			}
+			return true;
+		});
+	}
+
+	return events;
+};
 
 export class WhatsAppTrigger implements INodeType {
 	description: INodeTypeDescription = {
@@ -112,7 +84,99 @@ export class WhatsAppTrigger implements INodeType {
 				type: 'notice',
 				default: '',
 			},
-			...whatsappTriggerDescription,
+			{
+				displayName: 'Trigger On',
+				name: 'updates',
+				type: 'multiOptions',
+				required: true,
+				default: [],
+				options: [
+					{
+						name: 'Account Review Update',
+						value: 'account_review_update',
+					},
+					{
+						name: 'Account Update',
+						value: 'account_update',
+					},
+					{
+						name: 'Business Capability Update',
+						value: 'business_capability_update',
+					},
+					{
+						name: 'Message Template Quality Update',
+						value: 'message_template_quality_update',
+					},
+					{
+						name: 'Message Template Status Update',
+						value: 'message_template_status_update',
+					},
+					{
+						name: 'Messages',
+						value: 'messages',
+					},
+					{
+						name: 'Phone Number Name Update',
+						value: 'phone_number_name_update',
+					},
+					{
+						name: 'Phone Number Quality Update',
+						value: 'phone_number_quality_update',
+					},
+					{
+						name: 'Security',
+						value: 'security',
+					},
+					{
+						name: 'Template Category Update',
+						value: 'template_category_update',
+					},
+				],
+			},
+			{
+				displayName: 'Options',
+				name: 'options',
+				type: 'collection',
+				default: {},
+				placeholder: 'Add option',
+				options: [
+					{
+						// https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples#message-status-updates
+						displayName: 'Receive Message Status Updates',
+						name: 'messageStatusUpdates',
+						type: 'multiOptions',
+						default: ['all'],
+						description:
+							'WhatsApp sends notifications to the Trigger when the status of a message changes (for example from Sent to Delivered and from Delivered to Read). To avoid multiple executions for one WhatsApp message, you can set the Trigger to execute only on selected message status updates.',
+						options: [
+							{
+								name: 'All',
+								value: 'all',
+							},
+							{
+								name: 'Deleted',
+								value: 'deleted',
+							},
+							{
+								name: 'Delivered',
+								value: 'delivered',
+							},
+							{
+								name: 'Failed',
+								value: 'failed',
+							},
+							{
+								name: 'Read',
+								value: 'read',
+							},
+							{
+								name: 'Sent',
+								value: 'sent',
+							},
+						],
+					},
+				],
+			},
 		],
 	};
 
@@ -228,12 +292,14 @@ export class WhatsAppTrigger implements INodeType {
 				.map((change) => ({ ...change.value, field: change.field })),
 		);
 
-		if (events.length === 0) {
-			return {};
-		}
+		const options = this.getNodeParameter('options', {}) as { messageStatusUpdates?: string[] };
+
+		const returnData = filterStatuses(events, options.messageStatusUpdates);
+
+		if (returnData.length === 0) return {};
 
 		return {
-			workflowData: [this.helpers.returnJsonArray(events)],
+			workflowData: [this.helpers.returnJsonArray(returnData)],
 		};
 	}
 }
diff --git a/packages/nodes-base/nodes/WhatsApp/tests/utils.trigger.test.ts b/packages/nodes-base/nodes/WhatsApp/tests/utils.trigger.test.ts
new file mode 100644
index 0000000000000..0ab5a9a43accd
--- /dev/null
+++ b/packages/nodes-base/nodes/WhatsApp/tests/utils.trigger.test.ts
@@ -0,0 +1,34 @@
+import { filterStatuses } from '../WhatsAppTrigger.node';
+
+describe('filterStatuses', () => {
+	const mockEvents = [
+		{ statuses: [{ status: 'deleted' }] },
+		{ statuses: [{ status: 'delivered' }] },
+		{ statuses: [{ status: 'failed' }] },
+		{ statuses: [{ status: 'read' }] },
+		{ statuses: [{ status: 'sent' }] },
+	];
+
+	test('returns events with no statuses when allowedStatuses is empty', () => {
+		expect(filterStatuses(mockEvents, [])).toEqual([]);
+	});
+
+	test("returns all events when 'all' is in allowedStatuses", () => {
+		expect(filterStatuses(mockEvents, ['all'])).toEqual(mockEvents);
+	});
+
+	test('filters events correctly when specific statuses are provided', () => {
+		expect(filterStatuses(mockEvents, ['deleted', 'read'])).toEqual([
+			{ statuses: [{ status: 'deleted' }] },
+			{ statuses: [{ status: 'read' }] },
+		]);
+	});
+
+	test('returns only event with matching status', () => {
+		expect(filterStatuses(mockEvents, ['failed'])).toEqual([{ statuses: [{ status: 'failed' }] }]);
+	});
+
+	test('returns unchanged event when allowedStatuses is undefined', () => {
+		expect(filterStatuses(mockEvents, undefined)).toEqual(mockEvents);
+	});
+});
diff --git a/packages/nodes-base/nodes/WhatsApp/types.ts b/packages/nodes-base/nodes/WhatsApp/types.ts
index 6cf3dc8fe17a1..cb5b83586b96b 100644
--- a/packages/nodes-base/nodes/WhatsApp/types.ts
+++ b/packages/nodes-base/nodes/WhatsApp/types.ts
@@ -1,4 +1,4 @@
-import type { GenericValue, IDataObject } from 'n8n-workflow';
+import type { GenericValue } from 'n8n-workflow';
 
 export type BaseFacebookResponse<TData> = { data: TData };
 export type BasePaginatedFacebookResponse<TData> = BaseFacebookResponse<TData> & {
@@ -70,15 +70,15 @@ export interface WhatsAppPageEvent {
 	entry: WhatsAppEventEntry[];
 }
 
+export type WhatsAppEventChanges = Array<{
+	field: string;
+	value: { statuses?: Array<{ status: string }> };
+}>;
+
 export interface WhatsAppEventEntry {
 	id: string;
 	time: number;
-	changes: [
-		{
-			field: string;
-			value: IDataObject;
-		},
-	];
+	changes: WhatsAppEventChanges;
 }
 
 export interface FacebookFormLeadData {


Reviews:
user: login: elsmr
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-10T08:24:12Z
user: login: michael-radency
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-10T13:12:29Z
user: login: elsmr
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-11T09:06:27Z

Review comments:
diff_hunk: @@ -112,7 +81,99 @@ export class WhatsAppTrigger implements INodeType {
 				type: 'notice',
 				default: '',
 			},
-			...whatsappTriggerDescription,
+			{
+				displayName: 'Trigger On',
+				name: 'updates',
+				type: 'multiOptions',
+				required: true,
+				default: [],
+				options: [
+					{
+						name: 'Account Review Update',
+						value: 'account_review_update',
+					},
+					{
+						name: 'Account Update',
+						value: 'account_update',
+					},
+					{
+						name: 'Business Capability Update',
+						value: 'business_capability_update',
+					},
+					{
+						name: 'Message Template Quality Update',
+						value: 'message_template_quality_update',
+					},
+					{
+						name: 'Message Template Status Update',
+						value: 'message_template_status_update',
+					},
+					{
+						name: 'Messages',
+						value: 'messages',
+					},
+					{
+						name: 'Phone Number Name Update',
+						value: 'phone_number_name_update',
+					},
+					{
+						name: 'Phone Number Quality Update',
+						value: 'phone_number_quality_update',
+					},
+					{
+						name: 'Security',
+						value: 'security',
+					},
+					{
+						name: 'Template Category Update',
+						value: 'template_category_update',
+					},
+				],
+			},
+			{
+				displayName: 'Options',
+				name: 'options',
+				type: 'collection',
+				default: {},
+				placeholder: 'Add option',
+				options: [
+					{
+						// https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples#message-status-updates
+						displayName: 'Receive Message Status Updates',
path: packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
user: login: elsmr
body: Should this only show if "Trigger On" is `messages`?
created_at: 2025-03-10T08:19:06Z
author_association: MEMBER
diff_hunk: @@ -112,7 +81,99 @@ export class WhatsAppTrigger implements INodeType {
 				type: 'notice',
 				default: '',
 			},
-			...whatsappTriggerDescription,
+			{
+				displayName: 'Trigger On',
+				name: 'updates',
+				type: 'multiOptions',
+				required: true,
+				default: [],
+				options: [
+					{
+						name: 'Account Review Update',
+						value: 'account_review_update',
+					},
+					{
+						name: 'Account Update',
+						value: 'account_update',
+					},
+					{
+						name: 'Business Capability Update',
+						value: 'business_capability_update',
+					},
+					{
+						name: 'Message Template Quality Update',
+						value: 'message_template_quality_update',
+					},
+					{
+						name: 'Message Template Status Update',
+						value: 'message_template_status_update',
+					},
+					{
+						name: 'Messages',
+						value: 'messages',
+					},
+					{
+						name: 'Phone Number Name Update',
+						value: 'phone_number_name_update',
+					},
+					{
+						name: 'Phone Number Quality Update',
+						value: 'phone_number_quality_update',
+					},
+					{
+						name: 'Security',
+						value: 'security',
+					},
+					{
+						name: 'Template Category Update',
+						value: 'template_category_update',
+					},
+				],
+			},
+			{
+				displayName: 'Options',
+				name: 'options',
+				type: 'collection',
+				default: {},
+				placeholder: 'Add option',
+				options: [
+					{
+						// https://developers.facebook.com/docs/whatsapp/cloud-api/webhooks/payload-examples#message-status-updates
+						displayName: 'Receive Message Status Updates',
+						name: 'messageStatusUpdates',
+						type: 'multiOptions',
+						default: ['all'],
+						description:
+							'The WhatsApp sends notifications to inform you of the status of the messages. Select the types of notifications you want to receive.',
path: packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
user: login: elsmr
body: I think wording here could be better, maybe sync with DavidA or Jake on the copy of this new option 
created_at: 2025-03-10T08:20:42Z
author_association: MEMBER
diff_hunk: @@ -18,57 +17,27 @@ import {
 } from './GenericFunctions';
 import type { WhatsAppPageEvent } from './types';
 
-const whatsappTriggerDescription: INodeProperties[] = [
-	{
-		displayName: 'Trigger On',
-		name: 'updates',
-		type: 'multiOptions',
-		required: true,
-		default: [],
-		options: [
-			{
-				name: 'Account Review Update',
-				value: 'account_review_update',
-			},
-			{
-				name: 'Account Update',
-				value: 'account_update',
-			},
-			{
-				name: 'Business Capability Update',
-				value: 'business_capability_update',
-			},
-			{
-				name: 'Message Template Quality Update',
-				value: 'message_template_quality_update',
-			},
-			{
-				name: 'Message Template Status Update',
-				value: 'message_template_status_update',
-			},
-			{
-				name: 'Messages',
-				value: 'messages',
-			},
-			{
-				name: 'Phone Number Name Update',
-				value: 'phone_number_name_update',
-			},
-			{
-				name: 'Phone Number Quality Update',
-				value: 'phone_number_quality_update',
-			},
-			{
-				name: 'Security',
-				value: 'security',
-			},
-			{
-				name: 'Template Category Update',
-				value: 'template_category_update',
-			},
-		],
-	},
-];
+export const filterStatuses = (events: IDataObject[], allowedStatuses: string[] | undefined) => {
+	if (!allowedStatuses) {
+		return events;
+	}
+
+	if (!allowedStatuses.length) {
+		return events.filter((event) => !event.statuses);
path: packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
user: login: elsmr
body: When do whatsapp messages not have `statuses`?  should it just return `[]` in this case?
created_at: 2025-03-10T08:22:33Z
author_association: MEMBER
diff_hunk: @@ -18,57 +17,27 @@ import {
 } from './GenericFunctions';
 import type { WhatsAppPageEvent } from './types';
 
-const whatsappTriggerDescription: INodeProperties[] = [
-	{
-		displayName: 'Trigger On',
-		name: 'updates',
-		type: 'multiOptions',
-		required: true,
-		default: [],
-		options: [
-			{
-				name: 'Account Review Update',
-				value: 'account_review_update',
-			},
-			{
-				name: 'Account Update',
-				value: 'account_update',
-			},
-			{
-				name: 'Business Capability Update',
-				value: 'business_capability_update',
-			},
-			{
-				name: 'Message Template Quality Update',
-				value: 'message_template_quality_update',
-			},
-			{
-				name: 'Message Template Status Update',
-				value: 'message_template_status_update',
-			},
-			{
-				name: 'Messages',
-				value: 'messages',
-			},
-			{
-				name: 'Phone Number Name Update',
-				value: 'phone_number_name_update',
-			},
-			{
-				name: 'Phone Number Quality Update',
-				value: 'phone_number_quality_update',
-			},
-			{
-				name: 'Security',
-				value: 'security',
-			},
-			{
-				name: 'Template Category Update',
-				value: 'template_category_update',
-			},
-		],
-	},
-];
+export const filterStatuses = (events: IDataObject[], allowedStatuses: string[] | undefined) => {
path: packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
user: login: elsmr
body: Instead of IDataObject, could you create a type for a whatsapp message/event? would prevent some type casts in this function
created_at: 2025-03-10T08:23:19Z
author_association: MEMBER
diff_hunk: @@ -18,57 +17,27 @@ import {
 } from './GenericFunctions';
 import type { WhatsAppPageEvent } from './types';
 
-const whatsappTriggerDescription: INodeProperties[] = [
-	{
-		displayName: 'Trigger On',
-		name: 'updates',
-		type: 'multiOptions',
-		required: true,
-		default: [],
-		options: [
-			{
-				name: 'Account Review Update',
-				value: 'account_review_update',
-			},
-			{
-				name: 'Account Update',
-				value: 'account_update',
-			},
-			{
-				name: 'Business Capability Update',
-				value: 'business_capability_update',
-			},
-			{
-				name: 'Message Template Quality Update',
-				value: 'message_template_quality_update',
-			},
-			{
-				name: 'Message Template Status Update',
-				value: 'message_template_status_update',
-			},
-			{
-				name: 'Messages',
-				value: 'messages',
-			},
-			{
-				name: 'Phone Number Name Update',
-				value: 'phone_number_name_update',
-			},
-			{
-				name: 'Phone Number Quality Update',
-				value: 'phone_number_quality_update',
-			},
-			{
-				name: 'Security',
-				value: 'security',
-			},
-			{
-				name: 'Template Category Update',
-				value: 'template_category_update',
-			},
-		],
-	},
-];
+export const filterStatuses = (events: IDataObject[], allowedStatuses: string[] | undefined) => {
+	if (!allowedStatuses) {
+		return events;
+	}
+
+	if (!allowedStatuses.length) {
+		return events.filter((event) => !event.statuses);
path: packages/nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts
user: login: michael-radency
body: no, message event does not have statuses property, statuses sent as separate events
created_at: 2025-03-10T13:00:59Z
author_association: CONTRIBUTOR

PR comments:
user: login: codecov[bot]
created_at: 2025-03-07T07:07:32Z
body: ## [Codecov](https://app.codecov.io/gh/n8n-io/n8n/pull/13751?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=n8n-io) Report
Attention: Patch coverage is `71.42857%` with `4 lines` in your changes missing coverage. Please review.
| [Files with missing lines](https://app.codecov.io/gh/n8n-io/n8n/pull/13751?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=n8n-io) | Patch % | Lines |
|---|---|---|
| [.../nodes-base/nodes/WhatsApp/WhatsAppTrigger.node.ts](https://app.codecov.io/gh/n8n-io/n8n/pull/13751?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=n8n-io#diff-cGFja2FnZXMvbm9kZXMtYmFzZS9ub2Rlcy9XaGF0c0FwcC9XaGF0c0FwcFRyaWdnZXIubm9kZS50cw==) | 71.42% | [4 Missing :warning: ](https://app.codecov.io/gh/n8n-io/n8n/pull/13751?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=n8n-io) |

:loudspeaker: Thoughts on this report? [Let us know!](https://github.com/codecov/feedback/issues/255)
author_association: NONE
user: login: cypress[bot]
created_at: 2025-03-11T09:19:28Z
body: 
<h3>
  <a href="https://cloud.cypress.io/projects/5hbsdn?utm_source=github&utm_medium=flaky&utm_campaign=project">n8n</a>&nbsp;
  <img src="https://assets.cypress.io/github-pr-comment-icons/chevron.svg" alt="" height="14" width="14" />&nbsp;
  <a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/overview?utm_source=github&utm_medium=flaky&utm_campaign=run%20number">Run #9689</a>
</h3>

<details>
  <summary>
    <strong>Run Properties:</strong>&nbsp;
    <code><img src="https://assets.cypress.io/github-pr-comment-icons/passed.svg" alt="status check passed" height="10" width="10" />&nbsp;Passed&nbsp;<a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/overview?utm_source=github&utm_medium=flaky&utm_campaign=run%20number">#9689</a></code> &nbsp;&bull;&nbsp;
    <code><img src="https://assets.cypress.io/github-pr-comment-icons/git-commit.svg" alt="git commit" width="10" height="10" /> <a href="https://github.com/n8n-io/n8n/commit/14c87b4ad22f819c9d521bb3725ebfff4cc5912e">14c87b4ad2</a>: 🌳  🖥️ browsers:node18.12.0-chrome107 🤖 michael-radency 🗃️ e2e/*</code>
  </summary><br />

  <table width="744">
    <tbody>
      <tr />
      <tr height="48">
        <td width="224">
          <strong>Project</strong>
        </td>
        <td width="520">
          <code><a href="https://cloud.cypress.io/projects/5hbsdn?utm_source=github&utm_medium=flaky&utm_campaign=project">n8n</a></code>
        </td>
      </tr>
      <tr />
      <tr height="48">
        <td width="224">
          <strong>Branch Review</strong>
        </th>
        <td>
          <code><a href="https://cloud.cypress.io/projects/5hbsdn/branches/node-2051-whatsapp-node-triggers-multiple-times-on-whatsapp-sending/review?utm_source=github&utm_medium=flaky&utm_campaign=review%20changes&changeRequest=13751">node-2051-whatsapp-node-triggers-multiple-times-on-whatsapp-sending</a></code>
        </td>
      </tr>
      <tr />
      <tr height="48">
        <td><strong>Run status</strong></td>
        <td>
          <code><img src="https://assets.cypress.io/github-pr-comment-icons/passed.svg" alt="status check passed" height="10" width="10" />&nbsp;Passed&nbsp;<a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/overview?utm_source=github&utm_medium=flaky&utm_campaign=run%20number">#9689</a></code>
        </td>
      </tr>
      <tr />
      <tr height="48">
        <td><strong>Run duration</strong></td>
        <td><code>04m 47s</code></td>
      </tr>
      <tr />
      <tr height="48">
        <td><strong>Commit</strong></td>
        <td>
          <code><img src="https://assets.cypress.io/github-pr-comment-icons/git-commit.svg" alt="git commit" width="10" height="10" /> <a href="https://github.com/n8n-io/n8n/commit/14c87b4ad22f819c9d521bb3725ebfff4cc5912e">14c87b4ad2</a>: 🌳  🖥️ browsers:node18.12.0-chrome107 🤖 michael-radency 🗃️ e2e/*</code>
        </td>
      </tr>
      <tr />
      <tr height="48">
        <td><strong>Committer</strong></td>
        <td><code>Michael Kret</code></td>
      </tr>
    </tbody>
    <tfoot>
      <tr />
      <tr height="48">
        <td colspan="2">
          <a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/properties?utm_source=github&utm_medium=flaky&utm_campaign=properties">View all properties for this run ↗︎</a>
        </td>
      </tr>
    </tfoot>
  </table>
  <hr />
</details>

<table width="744">
  <thead>
    <tr />
    <tr height="48">
      <th colspan="2" align="left" width="744">Test results</th>
    </tr>
  </thead>
  <tbody>
    <tr height="48">
      <td width="224">
        <img src="https://assets.cypress.io/github-pr-comment-icons/failed.svg" alt="Tests that failed" width="10" height="10" />&nbsp;
        <a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/overview?reviewViewBy=FAILED&utm_source=github&utm_medium=flaky&utm_campaign=failed%20tests">
          <strong>Failures</strong>
        </a>
      </td>
      <td>
        <code><strong>0</strong></code>
      </td>
    </tr>
    <tr />
    <tr height="48">
      <td width="224">
        <img src="https://assets.cypress.io/github-pr-comment-icons/flaky-v3.svg" alt="Tests that were flaky" width="10" height="10" />&nbsp;
        <a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/overview?reviewViewBy=FLAKY&utm_source=github&utm_medium=flaky&utm_campaign=flaky%20tests">
          <strong>Flaky</strong>
        </a>
      </td>
      <td>
        <code><strong>1</strong></code>
      </td>
    </tr>
    <tr />
    <tr height="48">
      <td width="224">
        <img src="https://assets.cypress.io/github-pr-comment-icons/pending.svg" alt="Tests that did not run due to a developer annotating a test with .skip" width="10" height="10" />&nbsp;
        <a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/test-results?utm_source=github&utm_medium=flaky&utm_campaign=pending%20tests&statuses=%5B%7B%22value%22%3A%22PENDING%22%2C%22label%22%3A%22PENDING%22%7D%5D">
          <strong>Pending</strong>
        </a>
      </td>
      <td>
        <code><strong>5</strong></code>
      </td>
    </tr>
    <tr />
    <tr height="48">
      <td width="224">
        <img src="https://assets.cypress.io/github-pr-comment-icons/skipped-v3.svg" alt="Tests that did not run due to a failure in a mocha hook" width="10" height="10" />&nbsp;
        <a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/test-results?utm_source=github&utm_medium=flaky&utm_campaign=skipped%20tests&statuses=%5B%7B%22value%22%3A%22SKIPPED%22%2C%22label%22%3A%22SKIPPED%22%7D%5D">
          <strong>Skipped</strong>
        </a>
      </td>
      <td>
        <code><strong>0</strong></code>
      </td>
    </tr>
    <tr />
    <tr height="48">
      <td width="224">
        <img src="https://assets.cypress.io/github-pr-comment-icons/passed.svg" alt="Tests that passed" width="10" height="10" />&nbsp;
        <a href="https://cloud.cypress.io/projects/5hbsdn/runs/9689/overview?utm_source=github&utm_medium=flaky&utm_campaign=passed%20tests">
          <strong>Passing</strong>
        </a>
      </td>
      <td>
        <code><strong>441</strong></code>
      </td>
    </tr><tfoot>
    <tr height="48"><td colspan="2"><a href="https://cloud.cypress.io/projects/5hbsdn/branches/node-2051-whatsapp-node-triggers-multiple-times-on-whatsapp-sending/review?utm_source=github&utm_medium=flaky&utm_campaign=review%20changes&changeRequest=13751">View all changes introduced in this branch ↗︎</a></td></tr></tfoot>
  </tbody>
</table>






author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-11T09:19:28Z
body: :white_check_mark: All Cypress E2E specs passed
author_association: CONTRIBUTOR
user: login: janober
created_at: 2025-03-17T14:23:46Z
body: Got released with [`n8n@1.84.0`](https://github.com/n8n-io/n8n/releases/tag/n8n%401.84.0)
author_association: MEMBER