n8n-nodes-whatsapp-message 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE.md ADDED
@@ -0,0 +1,19 @@
1
+ Copyright 2022 n8n
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,458 @@
1
+ # n8n-nodes-whatsapp-message
2
+
3
+ Un nodo personalizado para n8n que permite enviar mensajes por WhatsApp utilizando la API de WhatsApp Business con soporte completo para mensajes interactivos, detección de cierre de conversación y mensajes de espera automáticos.
4
+
5
+ ## Características
6
+
7
+ - **Mensajes de texto** simples o con imágenes
8
+ - **Listas interactivas** (hasta 10 opciones con descripciones)
9
+ - **Botones interactivos** (hasta 3 botones de respuesta)
10
+ - **Botones Call-to-Action (CTA)** con URLs externas
11
+ - **Soporte para imágenes** en todos los tipos de mensaje
12
+ - **Headers personalizables** (texto o imagen con URL)
13
+ - **Footers opcionales** para contexto adicional
14
+ - **Detección automática de cierre** de conversación
15
+ - **Dos outputs** (Continue/Close) para flujos condicionales
16
+ - **Mensajes de espera automáticos** mientras se procesan tareas largas
17
+ - **Procesamiento de webhooks** para respuestas de usuarios
18
+ - Soporte para números internacionales
19
+ - Reintentos automáticos configurables
20
+ - Integración completa con n8n
21
+
22
+ ## Instalación
23
+
24
+ ```bash
25
+ npm install n8n-nodes-whatsapp-message
26
+ ```
27
+
28
+ O en n8n, ve a **Settings > Community Nodes** y busca `n8n-nodes-whatsapp-message`.
29
+
30
+ ## Configuración
31
+
32
+ ### Requisitos previos
33
+
34
+ 1. Una cuenta de **WhatsApp Business API**
35
+ 2. Tu **Phone Number ID**
36
+ 3. Un **Access Token** válido de Meta/Facebook
37
+ 4. Tu número de WhatsApp debe estar verificado y activo
38
+
39
+ ### Pasos de configuración
40
+
41
+ 1. En n8n, abre tu workflow
42
+ 2. Agrega el nodo **WhatsApp Message**
43
+ 3. Haz clic en **Credentials** y selecciona **Create New Credentials**
44
+ 4. Completa los campos:
45
+ - **Phone Number ID**: El ID del número de teléfono de WhatsApp Business
46
+ - **Access Token**: Tu token de acceso (obtenido de Meta/Facebook)
47
+ - **API Version**: Selecciona la versión (por defecto v22.0)
48
+
49
+ ## Tipos de mensajes
50
+
51
+ ### 1. Mensaje de texto
52
+
53
+ Envía mensajes de texto simples o con imágenes adjuntas.
54
+
55
+ **Parámetros:**
56
+ - **Message**: El texto del mensaje
57
+ - **Include Image**: Opción para agregar una imagen
58
+ - **Image URL**: URL de la imagen (formato: https://...)
59
+ - **Caption**: Texto que acompaña la imagen
60
+
61
+ **Ejemplo:**
62
+ ```
63
+ Message Type: Text
64
+ Message: "¡Hola! Tenemos una promoción especial para ti"
65
+ Include Image: ✓
66
+ Image URL: https://mipanederia.com/promo.jpg
67
+ Caption: "20% de descuento en pan integral"
68
+ ```
69
+
70
+ ### 2. Lista interactiva
71
+
72
+ Crea menús con hasta 10 opciones que incluyen título, ID y descripción opcional.
73
+ **Nota importante sobre imágenes en listas:**
74
+ Debido a una limitación de la API de WhatsApp, cuando usas "Header Type: Image" en listas, la imagen se envía como un mensaje separado (0.3 segundos antes de la lista). Esto es automático y transparente - el usuario verá la imagen seguida inmediatamente de la lista. Este comportamiento solo ocurre en listas; los botones y CTA envían imágenes directamente en el header sin problema.
75
+
76
+ **Parámetros:**
77
+ - **Body Text**: Texto principal del mensaje
78
+ - **Button Text**: Texto del botón que abre la lista
79
+ - **Header Type**: None, Text o Image
80
+ - **Footer**: Texto opcional al final
81
+ - **Options**: Una opción por línea en formato: `Título|id|descripción|close`
82
+
83
+ **Formato de opciones:**
84
+ ```
85
+ Pizza Margarita|pizza_mg|Queso mozzarella y albahaca
86
+ Pasta Carbonara|pasta_cb|Receta italiana tradicional
87
+ Ensalada César|ensalada_cs|Lechuga fresca con aderezo
88
+ Salir|exit_id|Cerrar el pedido|true
89
+ ```
90
+
91
+ **Ejemplo completo:**
92
+ ```
93
+ Message Type: Interactive List
94
+ Body Text: "¿Qué te gustaría ordenar hoy?"
95
+ Button Text: "Ver menú completo"
96
+ Header Type: Image
97
+ Header Image URL: https://restaurante.com/logo.jpg
98
+ Footer: "Delivery gratis en órdenes mayores a $50"
99
+ Options:
100
+ Desayuno completo|desayuno|Huevos, pan y café
101
+ Almuerzo ejecutivo|almuerzo|Sopa, plato fuerte y jugo
102
+ Cena especial|cena|Proteína, acompañamiento
103
+ No tengo hambre|salir|Cerrar conversación|true
104
+ ```
105
+
106
+ ### 3. Botones interactivos
107
+
108
+ Crea hasta 3 botones de respuesta rápida.
109
+
110
+ **Parámetros:**
111
+ - **Body Text**: Texto principal del mensaje
112
+ - **Header Type**: None, Text o Image
113
+ - **Footer**: Texto opcional al final
114
+ - **Buttons**: Un botón por línea en formato: `Texto del botón|button_id|close`
115
+
116
+ **Formato de botones:**
117
+ ```
118
+ Sí, me interesa|yes_btn
119
+ No gracias|no_btn|true
120
+ Más información|info_btn
121
+ ```
122
+
123
+ **Ejemplo completo:**
124
+ ```
125
+ Message Type: Interactive Buttons
126
+ Body Text: "¿Te gustaría recibir nuestro catálogo de productos por email?"
127
+ Header Type: Text
128
+ Header Text: "Catálogo Digital 2025"
129
+ Footer: "Sin costo ni compromiso"
130
+ Buttons:
131
+ Sí, envíalo|send_catalog
132
+ No gracias|no_catalog|true
133
+ Ver muestra|preview_catalog
134
+ ```
135
+
136
+ ### 4. Call to Action (CTA)
137
+
138
+ Crea botones que redirigen a URLs externas (solo 1 botón por mensaje).
139
+
140
+ **Parámetros:**
141
+ - **Body Text**: Texto principal del mensaje
142
+ - **Header Type**: None, Text o Image
143
+ - **Footer**: Texto opcional al final
144
+ - **Action Buttons**: Formato: `Texto del botón|url|https://ejemplo.com`
145
+
146
+ **Ejemplo:**
147
+ ```
148
+ Message Type: Call to Action
149
+ Body Text: "Visita nuestra tienda online para ver todos nuestros productos"
150
+ Header Type: Image
151
+ Header Image URL: https://tienda.com/banner.jpg
152
+ Footer: "Envío gratis en tu primera compra"
153
+ Action Buttons: Ir a la tienda|url|https://tienda.com/productos
154
+ ```
155
+
156
+ ## Sistema de outputs (Continue/Close)
157
+
158
+ El nodo tiene **dos salidas** para crear flujos conversacionales inteligentes:
159
+
160
+ ### Output 1: Continue
161
+ Se activa cuando:
162
+ - El usuario selecciona una opción normal (sin marcar como `close`)
163
+ - Se envía un mensaje exitosamente
164
+ - El flujo debe continuar
165
+
166
+ ### Output 2: Close
167
+ Se activa cuando:
168
+ - El usuario selecciona una opción marcada como cierre (`|true` al final)
169
+ - El ID de la opción está en la lista de **Close Option IDs**
170
+ - Se debe terminar la conversación
171
+
172
+ ### Configuración de detección de cierre
173
+
174
+ **Parámetros:**
175
+ - **Enable Close Detection**: Activa la detección automática
176
+ - **Close Option IDs**: IDs separados por comas (ej: `exit_id,salir_id,no_thanks`)
177
+ - **Goodbye Message**: Mensaje automático que se envía al cerrar
178
+
179
+ **Ejemplo de configuración:**
180
+ ```
181
+ Enable Close Detection: ✓ Activado
182
+ Close Option IDs: salir,exit,no_gracias,cerrar
183
+ Goodbye Message: "Gracias por contactarnos. ¡Hasta pronto!"
184
+ ```
185
+
186
+ ### Ejemplo de workflow con outputs
187
+
188
+ ```
189
+ [Webhook Trigger]
190
+
191
+ [WhatsApp Message - Lista interactiva]
192
+
193
+ ├─→ Continue Output → [Procesar pedido] → [Confirmar orden]
194
+ └─→ Close Output → [Registro de abandono] → [Fin]
195
+ ```
196
+
197
+ ## Mensajes de espera automáticos
198
+
199
+ Mantén a tus usuarios informados durante procesos largos con mensajes automáticos.
200
+
201
+ **Parámetros:**
202
+ - **Send Waiting Messages**: Activa los mensajes automáticos
203
+ - **Wait Time Before First Check**: Segundos antes del primer mensaje (5-600)
204
+ - **Interval Between Messages**: Intervalo entre mensajes (10-300 segundos)
205
+ - **Waiting Messages**: Mensajes que se alternarán (uno por línea)
206
+ - **Max Messages**: Cantidad máxima de mensajes automáticos (1-20)
207
+
208
+ **Ejemplo:**
209
+ ```
210
+ Send Waiting Messages: ✓ Activado
211
+ Wait Time Before First Check: 30
212
+ Interval Between Messages: 45
213
+ Waiting Messages:
214
+ ¿Sigues ahí? Aún estoy procesando tu solicitud
215
+ Todavía trabajando en ello... gracias por esperar
216
+ Casi listo, un momento más por favor
217
+ Max Messages: 5
218
+ ```
219
+
220
+ **Caso de uso típico:**
221
+ 1. Usuario solicita un reporte complejo
222
+ 2. Envías mensaje: "Generando tu reporte, esto puede tomar unos minutos..."
223
+ 3. El sistema envía mensajes de espera mientras procesa
224
+ 4. Finalmente envías: "¡Listo! Aquí está tu reporte"
225
+
226
+ ## Procesamiento de webhooks
227
+
228
+ El nodo puede procesar webhooks de WhatsApp para capturar respuestas de usuarios.
229
+
230
+ **Detección automática:**
231
+ - El nodo detecta si el input es un webhook de WhatsApp
232
+ - Extrae automáticamente el número del remitente
233
+ - Identifica el ID de la opción seleccionada (en botones/listas)
234
+ - Aplica la lógica de cierre si corresponde
235
+
236
+ **Datos extraídos del webhook:**
237
+ ```json
238
+ {
239
+ "selectedId": "pizza_id",
240
+ "isCloseAction": false,
241
+ "webhookProcessed": true,
242
+ "recipient": "+573001234567"
243
+ }
244
+ ```
245
+
246
+ ## Configuración avanzada
247
+
248
+ ### Reintentos y tiempos de espera
249
+
250
+ **Parámetros:**
251
+ - **Number of Tries**: Cantidad de intentos de envío (1-10)
252
+ - **Message Wait Time**: Segundos de espera entre reintentos (0-60)
253
+
254
+ **Ejemplo:**
255
+ ```
256
+ Number of Tries: 3
257
+ Message Wait Time: 5
258
+ ```
259
+
260
+ Si el primer intento falla, esperará 5 segundos e intentará nuevamente, hasta 3 veces.
261
+
262
+ ## Ejemplos de workflows completos
263
+
264
+ ### Ejemplo 1: Menú de panadería con seguimiento
265
+
266
+ ```
267
+ [Webhook Trigger - WhatsApp]
268
+
269
+ [WhatsApp Message Node]
270
+ Message Type: Interactive List
271
+ Body Text: "¡Bienvenido a Panadería Artesanal! ¿Qué te gustaría ordenar?"
272
+ Button Text: "Ver productos"
273
+ Options:
274
+ Pan integral|pan_int|Recién horneado, $3
275
+ Croissant francés|croissant|Mantequilla premium, $2.5
276
+ Torta de chocolate|torta_choc|Porción grande, $4
277
+ Ver promociones|promos|Ofertas del día
278
+ Cancelar pedido|cancelar|Cerrar conversación|true
279
+
280
+ ├─→ Continue → [IF Node - Verificar opción]
281
+ │ ↓
282
+ │ [Procesar pedido específico]
283
+ │ ↓
284
+ │ [Confirmar con botones]
285
+ │ ↓
286
+ │ [WhatsApp Message - Confirmación]
287
+
288
+ └─→ Close → [Guardar en DB como "Abandonado"]
289
+
290
+ [Fin del workflow]
291
+ ```
292
+
293
+ ### Ejemplo 2: Generación de reporte con espera
294
+
295
+ ```
296
+ [Webhook Trigger]
297
+
298
+ [WhatsApp Message - Confirmación]
299
+ Message Type: Text
300
+ Message: "Iniciando generación de reporte. Esto puede tomar 2-3 minutos..."
301
+ Send Waiting Messages: ✓
302
+ Wait Time: 30 segundos
303
+ Interval: 45 segundos
304
+ Waiting Messages:
305
+ Procesando datos... por favor espera
306
+ Casi listo... gracias por tu paciencia
307
+ Max Messages: 4
308
+
309
+ [HTTP Request - API externa - Generar reporte]
310
+
311
+ [Code Node - Procesar datos]
312
+
313
+ [WhatsApp Message - Envío de resultado]
314
+ Message Type: Text
315
+ Include Image: ✓
316
+ Message: "¡Reporte generado exitosamente!"
317
+ ```
318
+
319
+ ### Ejemplo 3: Sistema de atención con CTA
320
+
321
+ ```
322
+ [Webhook Trigger]
323
+
324
+ [WhatsApp Message - Saludo]
325
+ Message Type: Interactive Buttons
326
+ Body: "¿Cómo podemos ayudarte hoy?"
327
+ Buttons:
328
+ Hacer un pedido|order
329
+ Rastrear envío|track
330
+ Atención al cliente|support
331
+
332
+ [Switch Node - Basado en selectedId]
333
+
334
+ ├─→ Case 'support' → [WhatsApp Message - CTA]
335
+ │ Message Type: Call to Action
336
+ │ Body: "Puedes chatear con nuestro equipo"
337
+ │ Action: Abrir chat|url|https://wa.me/573001234567
338
+
339
+ ├─→ Case 'track' → [HTTP Request - API rastreo]
340
+
341
+ └─→ Case 'order' → [WhatsApp Message - Lista de productos]
342
+ ```
343
+
344
+ ## Solución de problemas
345
+
346
+ ### El mensaje no se envía
347
+
348
+ **Verifica las credenciales:**
349
+ - Access Token válido y no expirado
350
+ - Phone Number ID correcto
351
+ - Permisos correctos en la app de Meta
352
+
353
+ **Formato del número:**
354
+ - Debe incluir `+` y código de país: `+573001234567`
355
+ - Sin espacios ni guiones
356
+ - Entre 10-15 dígitos después del `+`
357
+
358
+ **Créditos y límites:**
359
+ - Verifica que tengas créditos en tu cuenta de Meta
360
+ - Revisa los límites de envío diarios
361
+ - Confirma que el número esté verificado
362
+
363
+ ### Error de autenticación (403)
364
+
365
+ - Regenera tu Access Token en Meta/Facebook
366
+ - Verifica que el token tenga los permisos: `whatsapp_business_messaging`
367
+ - Confirma que la app esté en modo producción
368
+ - Asegúrate de usar la API version correcta
369
+
370
+ ### Las imágenes no se muestran
371
+
372
+ - La URL debe ser accesible públicamente (no localhost)
373
+ - La URL debe comenzar con `https://` (no `http://`)
374
+ - Formatos soportados: JPG, PNG, GIF, WEBP
375
+ - Tamaño máximo recomendado: 5MB
376
+
377
+ ### Los mensajes de espera no funcionan
378
+
379
+ - `Send Waiting Messages` debe estar activado
380
+ - `Wait Time Before First Check` mínimo 5 segundos
381
+ - `Interval Between Messages` mínimo 10 segundos
382
+ - Verifica que haya al menos un mensaje en `Waiting Messages`
383
+ - `Max Messages` debe estar entre 1-20
384
+
385
+ ### El output Close no se activa
386
+
387
+ - `Enable Close Detection` debe estar activado
388
+ - El ID de la opción debe estar en `Close Option IDs`
389
+ - O la opción debe terminar con `|true` en la configuración
390
+ - Verifica que el webhook esté enviando el `selectedId` correctamente
391
+
392
+ ### Problemas con listas o botones
393
+
394
+ - **Listas**: Máximo 10 opciones
395
+ - **Botones**: Máximo 3 botones
396
+ - **CTA**: Solo 1 botón por mensaje
397
+ - Formato correcto: `Título|id|descripción|close`
398
+ - Los títulos de botones máximo 20 caracteres
399
+ - Los títulos de opciones de lista máximo 24 caracteres
400
+
401
+ ## Limitaciones de la API de WhatsApp
402
+
403
+ - Máximo 3 botones interactivos por mensaje
404
+ - Máximo 10 opciones en listas interactivas
405
+ - Máximo 1 botón CTA por mensaje
406
+ - Los títulos de botones no pueden exceder 20 caracteres
407
+ - Los headers de imagen deben ser URLs públicas
408
+ - No se puede enviar Base64 directamente (solo URLs)
409
+ -Las imágenes en headers de listas se envían como mensaje separado (workaround automático para bug de WhatsApp API)
410
+
411
+ ## Desarrollo
412
+
413
+ ### Compilar el proyecto
414
+
415
+ ```bash
416
+ npm run build
417
+ ```
418
+
419
+ ### Ejecutar lint
420
+
421
+ ```bash
422
+ npm run lint
423
+ ```
424
+
425
+ ### Modo desarrollo
426
+
427
+ ```bash
428
+ npm run dev
429
+ ```
430
+
431
+ ## Contribuir
432
+
433
+ Las contribuciones son bienvenidas. Por favor:
434
+
435
+ 1. Haz fork del repositorio
436
+ 2. Crea una rama para tu feature (`git checkout -b feature/amazing-feature`)
437
+ 3. Commit tus cambios (`git commit -m 'Add amazing feature'`)
438
+ 4. Push a la rama (`git push origin feature/amazing-feature`)
439
+ 5. Abre un Pull Request
440
+
441
+ ## Recursos adicionales
442
+
443
+ - [Documentación oficial de WhatsApp Business API](https://developers.facebook.com/docs/whatsapp)
444
+ - [n8n Documentation](https://docs.n8n.io/)
445
+ - [Crear credenciales de WhatsApp Business](https://developers.facebook.com/docs/whatsapp/business-management-api/get-started)
446
+ - [Mensajes interactivos de WhatsApp](https://developers.facebook.com/docs/whatsapp/guides/interactive-messages)
447
+
448
+ ## Soporte
449
+
450
+ Para reportar bugs o solicitar features:
451
+ - [Abre un issue en GitHub](https://github.com/MayoB20/n8n-nodes-whatsapp-message/issues)
452
+ - Email: maryurialonso11@gmail.com
453
+
454
+ ## Licencia
455
+
456
+ MIT © 2025 Maryuri
457
+
458
+ ---
@@ -0,0 +1,14 @@
1
+ import { ICredentialType, INodeProperties, IAuthenticateGeneric, ICredentialTestRequest } from 'n8n-workflow';
2
+ export declare class WhatsappMessageApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ icon: {
7
+ readonly light: "file:WhatsappMessage.svg";
8
+ readonly dark: "file:WhatsappMessage.svg";
9
+ };
10
+ properties: INodeProperties[];
11
+ authenticate: IAuthenticateGeneric;
12
+ test: ICredentialTestRequest;
13
+ }
14
+ export default WhatsappMessageApi;
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WhatsappMessageApi = void 0;
4
+ class WhatsappMessageApi {
5
+ constructor() {
6
+ this.name = 'whatsAppBusinessApi';
7
+ this.displayName = 'WhatsApp Business API';
8
+ this.documentationUrl = 'https://developers.facebook.com/docs/whatsapp';
9
+ this.icon = {
10
+ light: 'file:WhatsappMessage.svg',
11
+ dark: 'file:WhatsappMessage.svg',
12
+ };
13
+ this.properties = [
14
+ {
15
+ displayName: 'WABA ID',
16
+ name: 'wabaId',
17
+ type: 'string',
18
+ default: '',
19
+ required: true,
20
+ description: 'ID de tu cuenta WhatsApp Business',
21
+ },
22
+ {
23
+ displayName: 'Phone Number ID',
24
+ name: 'phoneNumberId',
25
+ type: 'string',
26
+ default: '',
27
+ required: true,
28
+ description: 'ID del número de teléfono de WhatsApp',
29
+ },
30
+ {
31
+ displayName: 'Access Token',
32
+ name: 'accessToken',
33
+ type: 'string',
34
+ typeOptions: {
35
+ password: true,
36
+ },
37
+ default: '',
38
+ required: true,
39
+ description: 'Token de acceso de tu aplicación de WhatsApp Business',
40
+ },
41
+ {
42
+ displayName: 'API Version',
43
+ name: 'version_api',
44
+ type: 'options',
45
+ options: [
46
+ {
47
+ name: 'v22.0',
48
+ value: 'v22.0',
49
+ },
50
+ {
51
+ name: 'v19.0',
52
+ value: 'v19.0',
53
+ },
54
+ ],
55
+ default: 'v22.0',
56
+ description: 'Versión de la API de WhatsApp Business',
57
+ },
58
+ ];
59
+ this.authenticate = {
60
+ type: 'generic',
61
+ properties: {
62
+ headers: {
63
+ Authorization: '=Bearer {{$credentials.accessToken}}',
64
+ },
65
+ },
66
+ };
67
+ this.test = {
68
+ request: {
69
+ url: '/me',
70
+ baseURL: 'https://graph.facebook.com/v22.0',
71
+ },
72
+ };
73
+ }
74
+ }
75
+ exports.WhatsappMessageApi = WhatsappMessageApi;
76
+ exports.default = WhatsappMessageApi;
77
+ //# sourceMappingURL=WhatsappMessageApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WhatsappMessageApi.credentials.js","sourceRoot":"","sources":["../../credentials/WhatsappMessageApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,kBAAkB;IAA/B;QACC,SAAI,GAAG,qBAAqB,CAAC;QAC7B,gBAAW,GAAG,uBAAuB,CAAC;QACtC,qBAAgB,GAAG,+CAA+C,CAAC;QACnE,SAAI,GAAG;YACN,KAAK,EAAE,0BAA0B;YACjC,IAAI,EAAE,0BAA0B;SACvB,CAAC;QAEX,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,mCAAmC;aAChD;YACD;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,uCAAuC;aACpD;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,uDAAuD;aACpE;YACD;gBACC,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,OAAO;qBACd;oBACD;wBACC,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,OAAO;qBACd;iBACD;gBACD,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,wCAAwC;aACrD;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,sCAAsC;iBACrD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,GAAG,EAAE,KAAK;gBACV,OAAO,EAAE,kCAAkC;aAC3C;SACD,CAAC;IACH,CAAC;CAAA;AAvED,gDAuEC;AAED,kBAAe,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class WhatsappMessage implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }