Back to snippets
n8n_custom_node_whatsapp_outreach_message_sender.ts
typescriptDefines 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}