Back to snippets

n8n_custom_node_whatsapp_outreach_message_sender.ts

typescript

Defines the WhatsApp Outreach node structure, including authe

Agent Votes
1
0
100% positive
n8n_custom_node_whatsapp_outreach_message_sender.ts
1import { IExecuteFunctions } from 'n8n-core';
2import {
3	IDataObject,
4	INodeExecutionData,
5	INodeType,
6	INodeTypeDescription,
7} from 'n8n-workflow';
8
9export class WhatsAppOutreach implements INodeType {
10	description: INodeTypeDescription = {
11		displayName: 'WhatsApp Outreach',
12		name: 'whatsAppOutreach',
13		icon: 'file:whatsappoutreach.svg',
14		group: ['transform'],
15		version: 1,
16		description: 'Send WhatsApp messages using WhatsApp Outreach API',
17		defaults: {
18			name: 'WhatsApp Outreach',
19		},
20		inputs: ['main'],
21		outputs: ['main'],
22		credentials: [
23			{
24				name: 'whatsAppOutreachApi',
25				required: true,
26			},
27		],
28		properties: [
29			{
30				displayName: 'Phone Number',
31				name: 'phoneNumber',
32				type: 'string',
33				default: '',
34				placeholder: '5511999999999',
35				required: true,
36				description: 'The receiver phone number with country code',
37			},
38			{
39				displayName: 'Message',
40				name: 'message',
41				type: 'string',
42				default: '',
43				placeholder: 'Hello, this is a test message!',
44				required: true,
45				description: 'The message to be sent',
46			},
47		],
48	};
49
50	async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
51		const items = this.getInputData();
52		const returnData: INodeExecutionData[] = [];
53
54		for (let i = 0; i < items.length; i++) {
55			try {
56				const phoneNumber = this.getNodeParameter('phoneNumber', i) as string;
57				const message = this.getNodeParameter('message', i) as string;
58
59				const body: IDataObject = {
60					phoneNumber,
61					message,
62				};
63
64				const responseData = await this.helpers.requestWithAuthentication.call(this, 'whatsAppOutreachApi', {
65					method: 'POST',
66					body,
67					uri: `https://api.whatsappoutreach.com/v1/send`,
68					json: true,
69				});
70
71				const executionData = this.helpers.constructExecutionMetaData(
72					this.helpers.returnJsonArray(responseData as IDataObject[]),
73					{ itemData: { item: i } },
74				);
75
76				returnData.push(...executionData);
77			} catch (error) {
78				if (this.continueOnFail()) {
79					returnData.push({ json: { error: error.message } });
80					continue;
81				}
82				throw error;
83			}
84		}
85
86		return [returnData];
87	}
88}