@funnelchat-hq/sdk 0.2.2 → 0.3.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/dist/index.cjs CHANGED
@@ -306,6 +306,8 @@ var SEND_ERROR_CODES = {
306
306
  not_sent: 422,
307
307
  /** 422: the contact cannot be reached on WhatsApp (forms). */
308
308
  recipient_unreachable: 422,
309
+ /** 422: the contact is blocked on that number (forms). Unblock it in the panel to write to them again. */
310
+ contact_blocked: 422,
309
311
  /** 422: a template variable points to a field that does not exist (`placeholders`, `count`). */
310
312
  template_unresolved_placeholder: 422,
311
313
  /** 404: the template is not one this account can send. */
@@ -362,6 +364,32 @@ var NUMBER_ERROR_CODES = {
362
364
  /** 403: the connect page was opened with an API key or a session. The page is for your customer, without credentials. */
363
365
  credentials_not_allowed: 403
364
366
  };
367
+ var GROUP_ACTION_ERROR_CODES = {
368
+ /** 404: `device_id` is not a number of the key's workspace. */
369
+ device_not_found: 404,
370
+ /** 404: the group is not one of the key's workspace (`group` is the `uid`, `…@g.us`). */
371
+ group_not_found: 404,
372
+ /** 404: `groups.retrieveAction` of an action that does not exist or is of another workspace. */
373
+ action_not_found: 404,
374
+ /** 422: the `uid` is a community or a channel, not a group. */
375
+ unsupported_group_type: 422,
376
+ /** 422: the number is not connected. */
377
+ device_not_connected: 422,
378
+ /** 422: a QR number that is not admin of the group. */
379
+ device_not_group_admin: 422,
380
+ /** 422: an official group that belongs to another number. */
381
+ device_not_group_number: 422,
382
+ /** 422: the number cannot do it (`provider` and maybe `requires` in the body). */
383
+ provider_unsupported: 422,
384
+ /** 422: an official number outside the 24-hour window of the group. */
385
+ window_closed: 422,
386
+ /** 422: Meta restricted the official number. */
387
+ number_restricted: 422,
388
+ /** 422: that `type` cannot be sent to this group by this number. */
389
+ unsupported_type: 422,
390
+ /** 429: the number has 50 group actions open. Wait for some to finish; not worth retrying. */
391
+ too_many_pending_actions: 429
392
+ };
365
393
  var IDEMPOTENCY_ERROR_CODES = {
366
394
  /** 422: the key was already used with another body. Use a new key for a new resource. */
367
395
  idempotency_key_mismatch: 422,
@@ -384,7 +412,13 @@ var QUOTA_CODES = /* @__PURE__ */ new Set([
384
412
  function isNumberQuotaError(code) {
385
413
  return code !== void 0 && QUOTA_CODES.has(code);
386
414
  }
387
- var NOT_RETRYABLE_CODES = /* @__PURE__ */ new Set(["mac_lockout_24h", "mac_limit_reached", "too_many_open_links", "meta_connect_disabled"]);
415
+ var NOT_RETRYABLE_CODES = /* @__PURE__ */ new Set([
416
+ "mac_lockout_24h",
417
+ "mac_limit_reached",
418
+ "too_many_open_links",
419
+ "too_many_pending_actions",
420
+ "meta_connect_disabled"
421
+ ]);
388
422
 
389
423
  // src/generated/routes.ts
390
424
  var routes = [
@@ -437,10 +471,10 @@ var routes = [
437
471
  { "method": "GET", "path": "/api/v1/campaigns/{campaign}/pipelines/{pipeline}", "operationId": "campaign.showPipeline", "domain": "communities", "permission": "communities:read", "tag": "Grupos de una campa\xF1a y operaciones", "summary": "Ver un pipeline", "pending": false },
438
472
  { "method": "GET", "path": "/api/v1/campaigns/{campaign}/webhooks", "operationId": "campaignWebhook.index", "domain": "communities", "permission": "communities:read", "tag": "Webhooks de campa\xF1a (legado)", "summary": "Listar los webhooks de una campa\xF1a", "pending": false },
439
473
  { "method": "GET", "path": "/api/v1/campaigns/{campaign}/webhooks/logs", "operationId": "campaignWebhook.logs", "domain": "communities", "permission": "communities:read", "tag": "Webhooks de campa\xF1a (legado)", "summary": "Listar las entregas de los webhooks de una campa\xF1a", "pending": false },
440
- { "method": "GET", "path": "/api/v1/connect-links", "operationId": "pendingConnectLink.index", "domain": "accounts", "permission": "accounts:read", "tag": "ConnectLink", "summary": "List connect links", "pending": true },
441
- { "method": "POST", "path": "/api/v1/connect-links", "operationId": "pendingConnectLink.store", "domain": "accounts", "permission": "accounts:operate", "tag": "ConnectLink", "summary": "Create a connect link", "pending": true },
442
- { "method": "DELETE", "path": "/api/v1/connect-links/{link}", "operationId": "pendingConnectLink.destroy", "domain": "accounts", "permission": "accounts:operate", "tag": "ConnectLink", "summary": "Revoke a connect link", "pending": true },
443
- { "method": "GET", "path": "/api/v1/connect-links/{link}", "operationId": "pendingConnectLink.show", "domain": "accounts", "permission": "accounts:read", "tag": "ConnectLink", "summary": "Read a connect link", "pending": true },
474
+ { "method": "GET", "path": "/api/v1/connect-links", "operationId": "connectLink.index", "domain": "accounts", "permission": "accounts:read", "tag": "ConnectLink", "summary": "Listar los links de alta", "pending": false },
475
+ { "method": "POST", "path": "/api/v1/connect-links", "operationId": "connectLink.store", "domain": "accounts", "permission": "accounts:operate", "tag": "ConnectLink", "summary": "Crear un link de alta", "pending": false },
476
+ { "method": "DELETE", "path": "/api/v1/connect-links/{link}", "operationId": "connectLink.destroy", "domain": "accounts", "permission": "accounts:operate", "tag": "ConnectLink", "summary": "Revocar un link de alta", "pending": false },
477
+ { "method": "GET", "path": "/api/v1/connect-links/{link}", "operationId": "connectLink.show", "domain": "accounts", "permission": "accounts:read", "tag": "ConnectLink", "summary": "Ver un link de alta", "pending": false },
444
478
  { "method": "PUT", "path": "/api/v1/contact-flows/{contactFlowId}/cancel", "operationId": "flow.cancelContactFlow", "domain": "conversations", "permission": "conversations:write", "tag": "Flow", "summary": "Cancelar un flujo en curso", "pending": false },
445
479
  { "method": "GET", "path": "/api/v1/contact-flows/{contactId}", "operationId": "flow.contactFlowHistory", "domain": "conversations", "permission": "conversations:read", "tag": "Flow", "summary": "Listar los flujos en curso de un contacto", "pending": false },
446
480
  { "method": "GET", "path": "/api/v1/contacts", "operationId": "contact.index", "domain": "conversations", "permission": "conversations:read", "tag": "Contact", "summary": "Listar contactos", "pending": false },
@@ -453,20 +487,20 @@ var routes = [
453
487
  { "method": "GET", "path": "/api/v1/contacts/{contact}/lead-score", "operationId": "contactLeadScore.show", "domain": "conversations", "permission": "conversations:read", "tag": "ContactLeadScore", "summary": "Ver el lead score de un contacto", "pending": false },
454
488
  { "method": "POST", "path": "/api/v1/contacts/{contact}/lead-score/adjustments", "operationId": "leadScoreSettings.adjust", "domain": "conversations", "permission": "conversations:write", "tag": "LeadScoreSettings", "summary": "Ajustar el lead score de un contacto", "pending": false },
455
489
  { "method": "POST", "path": "/api/v1/contacts/{contact}/message", "operationId": "conversation.sendMessage", "domain": "conversations", "permission": "conversations:send", "tag": "Conversation", "summary": "Enviar un mensaje a un contacto", "pending": true },
456
- { "method": "POST", "path": "/api/v1/contacts/{contact}/message/contact-card", "operationId": "contactCard.store", "domain": "conversations", "permission": "conversations:send", "tag": "ContactCard", "summary": "Enviar una tarjeta de contacto", "pending": true },
457
- { "method": "POST", "path": "/api/v1/contacts/{contact}/message/event", "operationId": "interactiveMessage.storeEvent", "domain": "conversations", "permission": "conversations:send", "tag": "InteractiveMessage", "summary": "Enviar una invitaci\xF3n a un evento", "pending": false },
458
- { "method": "POST", "path": "/api/v1/contacts/{contact}/message/form", "operationId": "pendingForms.send", "domain": "conversations", "permission": "conversations:send", "tag": "Message", "summary": "Send a form to a contact", "pending": true },
459
- { "method": "POST", "path": "/api/v1/contacts/{contact}/message/poll", "operationId": "interactiveMessage.storePoll", "domain": "conversations", "permission": "conversations:send", "tag": "InteractiveMessage", "summary": "Enviar una encuesta", "pending": false },
460
- { "method": "GET", "path": "/api/v1/contacts/{contact}/messages/{message}", "operationId": "pendingMessage.show", "domain": "conversations", "permission": "conversations:read", "tag": "Message", "summary": "Read a message by id", "pending": true },
461
- { "method": "POST", "path": "/api/v1/contacts/{contact}/messages/{message}/forward", "operationId": "forwardMessage.store", "domain": "conversations", "permission": "conversations:send", "tag": "ForwardMessage", "summary": "Reenviar un mensaje", "pending": true },
490
+ { "method": "POST", "path": "/api/v1/contacts/{contact}/message/contact-card", "operationId": "contactCard.store", "domain": "conversations", "permission": "conversations:send", "tag": "ContactCard", "summary": "Enviar una tarjeta de contacto", "pending": false },
491
+ { "method": "POST", "path": "/api/v1/contacts/{contact}/message/form", "operationId": "whatsappFormSend.store", "domain": "conversations", "permission": "conversations:send", "tag": "WhatsappFormSend", "summary": "Enviar un formulario", "pending": true },
492
+ { "method": "GET", "path": "/api/v1/contacts/{contact}/messages/{message}", "operationId": "message.showMessage", "domain": "conversations", "permission": "conversations:read", "tag": "ShowMessage", "summary": "Ver un mensaje", "pending": false },
493
+ { "method": "POST", "path": "/api/v1/contacts/{contact}/messages/{message}/forward", "operationId": "forwardMessage.store", "domain": "conversations", "permission": "conversations:send", "tag": "ForwardMessage", "summary": "Reenviar un mensaje", "pending": false },
462
494
  { "method": "DELETE", "path": "/api/v1/contacts/{contact}/messages/{message}/reaction", "operationId": "messageReaction.destroy", "domain": "conversations", "permission": "conversations:send", "tag": "MessageReaction", "summary": "Quitar una reacci\xF3n", "pending": false },
463
495
  { "method": "PUT", "path": "/api/v1/contacts/{contact}/messages/{message}/reaction", "operationId": "messageReaction.update", "domain": "conversations", "permission": "conversations:send", "tag": "MessageReaction", "summary": "Reaccionar a un mensaje", "pending": false },
496
+ { "method": "POST", "path": "/api/v1/contacts/{contact}/messages/{message}/read", "operationId": "message.markMessageRead", "domain": "conversations", "permission": "conversations:send", "tag": "MarkMessageRead", "summary": "POST /contacts/{contact}/messages/{message}/read", "pending": false },
464
497
  { "method": "GET", "path": "/api/v1/contacts/{contact}/meta-window", "operationId": "contact.metaWindow", "domain": "conversations", "permission": "conversations:read", "tag": "Contact", "summary": "Ver la ventana de 24 horas de un contacto", "pending": false },
465
498
  { "method": "GET", "path": "/api/v1/contacts/{contact}/notes", "operationId": "contactNote.index", "domain": "conversations", "permission": "conversations:read", "tag": "ContactNote", "summary": "Listar las notas de un contacto", "pending": false },
466
499
  { "method": "POST", "path": "/api/v1/contacts/{contact}/notes", "operationId": "contactNote.store", "domain": "conversations", "permission": "conversations:write", "tag": "ContactNote", "summary": "Agregar una nota a un contacto", "pending": false },
467
500
  { "method": "DELETE", "path": "/api/v1/contacts/{contact}/notes/{note}", "operationId": "contactNote.destroy", "domain": "conversations", "permission": "conversations:write", "tag": "ContactNote", "summary": "Eliminar una nota", "pending": false },
468
501
  { "method": "POST", "path": "/api/v1/contacts/{contact}/pause", "operationId": "contactAutomation.pause", "domain": "conversations", "permission": "conversations:write", "tag": "ContactAutomation", "summary": "Pausar un contacto", "pending": false },
469
502
  { "method": "GET", "path": "/api/v1/contacts/{contact}/tags", "operationId": "contact.tags", "domain": "conversations", "permission": "conversations:read", "tag": "Contact", "summary": "Listar las etiquetas de un contacto", "pending": false },
503
+ { "method": "POST", "path": "/api/v1/contacts/{contact}/typing", "operationId": "message.typingIndicator", "domain": "conversations", "permission": "conversations:send", "tag": "TypingIndicator", "summary": "POST /contacts/{contact}/typing", "pending": false },
470
504
  { "method": "PUT", "path": "/api/v1/contacts/{contact}/update", "operationId": "conversation.update", "domain": "conversations", "permission": "conversations:write", "tag": "Conversation", "summary": "Actualizar la conversaci\xF3n de un contacto", "pending": false },
471
505
  { "method": "GET", "path": "/api/v1/contacts/{contactId}/messages", "operationId": "conversation.getLatestMessages", "domain": "conversations", "permission": "conversations:read", "tag": "Conversation", "summary": "Listar los mensajes de un contacto", "pending": false },
472
506
  { "method": "POST", "path": "/api/v1/contacts/attach-custom-field", "operationId": "contact.attachCustomField", "domain": "conversations", "permission": "conversations:write", "tag": "Contact", "summary": "Asignar un campo personalizado a contactos", "pending": false },
@@ -490,11 +524,11 @@ var routes = [
490
524
  { "method": "GET", "path": "/api/v1/custom-fields/{customField}", "operationId": "customField.show", "domain": "conversations", "permission": "conversations:read", "tag": "CustomField", "summary": "Ver un campo personalizado", "pending": false },
491
525
  { "method": "PUT", "path": "/api/v1/custom-fields/{customField}", "operationId": "customField.update", "domain": "conversations", "permission": "conversations:write", "tag": "CustomField", "summary": "Actualizar un campo personalizado", "pending": false },
492
526
  { "method": "POST", "path": "/api/v1/custom-fields/delete", "operationId": "customField.destroy", "domain": "conversations", "permission": "conversations:write", "tag": "CustomField", "summary": "Eliminar campos personalizados", "pending": false },
493
- { "method": "GET", "path": "/api/v1/devices", "operationId": "device.index", "domain": "accounts", "permission": "accounts:read", "tag": "Device", "summary": "Listar n\xFAmeros", "pending": true },
494
- { "method": "POST", "path": "/api/v1/devices", "operationId": "pendingDevice.store", "domain": "accounts", "permission": "accounts:operate", "tag": "Device", "summary": "Create a number connected by QR code", "pending": true },
527
+ { "method": "GET", "path": "/api/v1/devices", "operationId": "device.index", "domain": "accounts", "permission": "accounts:read", "tag": "Device", "summary": "Listar n\xFAmeros", "pending": false },
528
+ { "method": "POST", "path": "/api/v1/devices", "operationId": "deviceProvisioning.store", "domain": "accounts", "permission": "accounts:operate", "tag": "DeviceProvisioning", "summary": "Crear un n\xFAmero por QR", "pending": false },
495
529
  { "method": "DELETE", "path": "/api/v1/devices/{device}", "operationId": "device.destroy", "domain": "accounts", "permission": "accounts:operate", "tag": "Device", "summary": "Eliminar un n\xFAmero", "pending": false },
496
530
  { "method": "GET", "path": "/api/v1/devices/{device}", "operationId": "device.show", "domain": "accounts", "permission": "accounts:read", "tag": "Device", "summary": "Ver un n\xFAmero", "pending": false },
497
- { "method": "PUT", "path": "/api/v1/devices/{device}", "operationId": "device.update", "domain": "accounts", "permission": "accounts:write", "tag": "Device", "summary": "Actualizar un n\xFAmero", "pending": true },
531
+ { "method": "PUT", "path": "/api/v1/devices/{device}", "operationId": "device.update", "domain": "accounts", "permission": "accounts:write", "tag": "Device", "summary": "Actualizar un n\xFAmero", "pending": false },
498
532
  { "method": "GET", "path": "/api/v1/devices/{device}/ad-groups", "operationId": "group.adGroups", "domain": "communities", "permission": "communities:read", "tag": "Grupos", "summary": "Listar los grupos de anuncios de un n\xFAmero", "pending": false },
499
533
  { "method": "POST", "path": "/api/v1/devices/{device}/capi/dataset", "operationId": "capiConnection.dataset", "domain": "accounts", "permission": "accounts:write", "tag": "CapiConnection", "summary": "Configurar el dataset de Conversions API", "pending": false },
500
534
  { "method": "GET", "path": "/api/v1/devices/{device}/capi/test", "operationId": "capiConnection.test", "domain": "accounts", "permission": "accounts:read", "tag": "CapiConnection", "summary": "Probar la conexi\xF3n con Conversions API", "pending": false },
@@ -518,7 +552,7 @@ var routes = [
518
552
  { "method": "DELETE", "path": "/api/v1/devices/{device}/message-queue/all", "operationId": "device.clearQueue", "domain": "accounts", "permission": "accounts:operate", "tag": "Device", "summary": "Vaciar la cola de mensajes", "pending": false },
519
553
  { "method": "GET", "path": "/api/v1/devices/{device}/message-queue/count", "operationId": "device.getQueueCount", "domain": "accounts", "permission": "accounts:read", "tag": "Device", "summary": "Contar los mensajes en la cola", "pending": false },
520
554
  { "method": "GET", "path": "/api/v1/devices/{device}/open-conversations", "operationId": "device.openConversations", "domain": "accounts", "permission": "accounts:read", "tag": "Device", "summary": "Ver qu\xE9 tel\xE9fonos tienen conversaci\xF3n abierta", "pending": false },
521
- { "method": "GET", "path": "/api/v1/devices/{device}/qr", "operationId": "pendingDevice.qr", "domain": "accounts", "permission": "accounts:operate", "tag": "Device", "summary": "The QR code to connect a number", "pending": true },
555
+ { "method": "GET", "path": "/api/v1/devices/{device}/qr", "operationId": "deviceProvisioning.qr", "domain": "accounts", "permission": "accounts:operate", "tag": "DeviceProvisioning", "summary": "Pedir el QR de un n\xFAmero", "pending": true },
522
556
  { "method": "PUT", "path": "/api/v1/devices/{device}/reset", "operationId": "device.reset", "domain": "accounts", "permission": "accounts:operate", "tag": "Device", "summary": "Reiniciar la sesi\xF3n de un n\xFAmero", "pending": false },
523
557
  { "method": "GET", "path": "/api/v1/devices/{device}/status", "operationId": "device.status", "domain": "accounts", "permission": "accounts:read", "tag": "Device", "summary": "Ver el estado de conexi\xF3n", "pending": false },
524
558
  { "method": "DELETE", "path": "/api/v1/devices/{device}/templates/{template}", "operationId": "messageTemplate.delete", "domain": "conversations", "permission": "conversations:write", "tag": "MessageTemplate", "summary": "Eliminar una plantilla de un n\xFAmero", "pending": false },
@@ -563,9 +597,11 @@ var routes = [
563
597
  { "method": "GET", "path": "/api/v1/groups/{group}", "operationId": "group.show", "domain": "communities", "permission": "communities:read", "tag": "Grupos", "summary": "Ver un grupo", "pending": false },
564
598
  { "method": "GET", "path": "/api/v1/groups/{group}/actions", "operationId": "group.actions", "domain": "communities", "permission": "communities:read", "tag": "Grupos", "summary": "Listar las acciones de sesi\xF3n sobre un grupo", "pending": false },
565
599
  { "method": "GET", "path": "/api/v1/groups/{group}/messages", "operationId": "group.messages", "domain": "communities", "permission": "communities:read", "tag": "Grupos", "summary": "Listar los mensajes enviados a un grupo", "pending": false },
600
+ { "method": "POST", "path": "/api/v1/groups/{group}/messages", "operationId": "pendingGroups.sendMessage", "domain": "communities", "permission": "communities:send", "tag": "GroupAction", "summary": "Send a message to a group", "pending": true },
566
601
  { "method": "GET", "path": "/api/v1/groups/{group}/participant-events", "operationId": "group.participantEvents", "domain": "communities", "permission": "communities:read", "tag": "Participantes", "summary": "Listar entradas y salidas de un grupo", "pending": false },
567
602
  { "method": "GET", "path": "/api/v1/groups/{group}/scheduled-messages", "operationId": "group.scheduledMessages", "domain": "communities", "permission": "communities:read", "tag": "Grupos", "summary": "Listar los env\xEDos programados que incluyen un grupo", "pending": false },
568
603
  { "method": "GET", "path": "/api/v1/groups/{groupUid}/metadata", "operationId": "groupMetadata.show", "domain": "communities", "permission": "communities:read", "tag": "Grupos", "summary": "Ver los datos actuales de un grupo en WhatsApp", "pending": false },
604
+ { "method": "GET", "path": "/api/v1/groups/actions/{action}", "operationId": "pendingGroups.retrieveAction", "domain": "communities", "permission": "communities:read", "tag": "GroupAction", "summary": "A group action", "pending": true },
569
605
  { "method": "GET", "path": "/api/v1/groups/participants", "operationId": "group.participants", "domain": "communities", "permission": "communities:read", "tag": "Participantes", "summary": "Listar los participantes de un grupo", "pending": false },
570
606
  { "method": "GET", "path": "/api/v1/kanban-settings", "operationId": "kanbanSetting.index", "domain": "conversations", "permission": "conversations:read", "tag": "KanbanSetting", "summary": "Listar tableros", "pending": false },
571
607
  { "method": "POST", "path": "/api/v1/kanban-settings", "operationId": "kanbanSetting.store", "domain": "conversations", "permission": "conversations:write", "tag": "KanbanSetting", "summary": "Crear un tablero", "pending": false },
@@ -590,6 +626,8 @@ var routes = [
590
626
  { "method": "GET", "path": "/api/v1/mac/contacts/history", "operationId": "mac.contactsHistory", "domain": "conversations", "permission": "conversations:read", "tag": "Mac", "summary": "Ver el historial de MACs", "pending": false },
591
627
  { "method": "GET", "path": "/api/v1/mac/status", "operationId": "mac.status", "domain": "conversations", "permission": "conversations:read", "tag": "Mac", "summary": "Ver el consumo de MACs", "pending": false },
592
628
  { "method": "GET", "path": "/api/v1/me", "operationId": null, "domain": "accounts", "permission": "accounts:read", "tag": "Account", "summary": "Ver mi cuenta", "pending": false },
629
+ { "method": "GET", "path": "/api/v1/me/whatsapp-business-accounts", "operationId": "whatsAppBusinessAccount.index", "domain": "accounts", "permission": "accounts:read", "tag": "WhatsAppBusinessAccount", "summary": "Cuentas de WhatsApp Business (WABA) de la cuenta", "pending": false },
630
+ { "method": "GET", "path": "/api/v1/me/whatsapp-business-accounts/{wabaId}", "operationId": "whatsAppBusinessAccount.show", "domain": "accounts", "permission": "accounts:read", "tag": "WhatsAppBusinessAccount", "summary": "Una cuenta de WhatsApp Business (WABA) de la cuenta", "pending": false },
593
631
  { "method": "GET", "path": "/api/v1/me/whatsapp-costs", "operationId": "whatsappCost.index", "domain": "accounts", "permission": "accounts:read", "tag": "WhatsappCost", "summary": "Ver los costos de WhatsApp", "pending": false },
594
632
  { "method": "POST", "path": "/api/v1/message/send-message", "operationId": "message.sendMessage", "domain": "conversations", "permission": "conversations:send", "tag": "Message", "summary": "Enviar un mensaje", "pending": true },
595
633
  { "method": "GET", "path": "/api/v1/payments/products/{platform}", "operationId": "paymentProduct.index", "domain": "conversations", "permission": "conversations:read", "tag": "PaymentProduct", "summary": "Listar los productos de una plataforma de pagos", "pending": false },
@@ -624,10 +662,11 @@ var routes = [
624
662
  { "method": "PUT", "path": "/api/v1/tags/{tag}", "operationId": "tag.update", "domain": "conversations", "permission": "conversations:write", "tag": "Tag", "summary": "Actualizar una etiqueta", "pending": false },
625
663
  { "method": "GET", "path": "/api/v1/tags/{tag}/contacts", "operationId": "tag.contacts", "domain": "conversations", "permission": "conversations:read", "tag": "Tag", "summary": "Listar los contactos con una etiqueta", "pending": false },
626
664
  { "method": "POST", "path": "/api/v1/tags/delete", "operationId": "tag.destroy", "domain": "conversations", "permission": "conversations:write", "tag": "Tag", "summary": "Eliminar etiquetas", "pending": false },
627
- { "method": "GET", "path": "/api/v1/templates", "operationId": "messageTemplate.templates", "domain": "conversations", "permission": "conversations:read", "tag": "MessageTemplate", "summary": "Listar plantillas", "pending": false },
665
+ { "method": "GET", "path": "/api/v1/templates", "operationId": "messageTemplate.templates", "domain": "conversations", "permission": "conversations:read", "tag": "MessageTemplate", "summary": "Listar plantillas", "pending": true },
628
666
  { "method": "POST", "path": "/api/v1/templates", "operationId": "messageTemplate.store", "domain": "conversations", "permission": "conversations:write", "tag": "MessageTemplate", "summary": "Crear una plantilla", "pending": false },
629
667
  { "method": "GET", "path": "/api/v1/templates/{template}", "operationId": "messageTemplate.template", "domain": "conversations", "permission": "conversations:read", "tag": "MessageTemplate", "summary": "Ver una plantilla", "pending": false },
630
668
  { "method": "PUT", "path": "/api/v1/templates/{template}", "operationId": "messageTemplate.update", "domain": "conversations", "permission": "conversations:write", "tag": "MessageTemplate", "summary": "Actualizar una plantilla", "pending": false },
669
+ { "method": "GET", "path": "/api/v1/templates/{template}/metrics", "operationId": "message.templateMetrics", "domain": "conversations", "permission": "conversations:read", "tag": "TemplateMetrics", "summary": "GET /templates/{template}/metrics", "pending": false },
631
670
  { "method": "GET", "path": "/api/v1/templates/{template}/quick-reply-buttons", "operationId": "messageTemplate.quickReplyButtons", "domain": "conversations", "permission": "conversations:read", "tag": "MessageTemplate", "summary": "Ver los botones de respuesta r\xE1pida de una plantilla", "pending": false },
632
671
  { "method": "GET", "path": "/api/v1/tickets", "operationId": "ticket.index", "domain": "conversations", "permission": "conversations:read", "tag": "Ticket", "summary": "Listar tickets", "pending": false },
633
672
  { "method": "POST", "path": "/api/v1/tickets", "operationId": "ticket.store", "domain": "conversations", "permission": "conversations:write", "tag": "Ticket", "summary": "Crear un ticket", "pending": false },
@@ -636,14 +675,14 @@ var routes = [
636
675
  { "method": "POST", "path": "/api/v1/tickets/{id}/close", "operationId": "ticket.closeTicket", "domain": "conversations", "permission": "conversations:write", "tag": "Ticket", "summary": "Cerrar un ticket", "pending": false },
637
676
  { "method": "POST", "path": "/api/v1/tickets/{id}/reopen", "operationId": "ticket.reOpenTicket", "domain": "conversations", "permission": "conversations:write", "tag": "Ticket", "summary": "Reabrir un ticket", "pending": false },
638
677
  { "method": "POST", "path": "/api/v1/tickets/assign", "operationId": "ticket.assignTicketToUser", "domain": "conversations", "permission": "conversations:write", "tag": "Ticket", "summary": "Asignar tickets", "pending": false },
639
- { "method": "GET", "path": "/api/v1/webhooks", "operationId": "pendingWebhookSubscription.index", "domain": "accounts", "permission": "webhooks:read", "tag": "Webhooks", "summary": "List the webhook subscriptions", "pending": true },
640
- { "method": "POST", "path": "/api/v1/webhooks", "operationId": "pendingWebhookSubscription.store", "domain": "accounts", "permission": "webhooks:write", "tag": "Webhooks", "summary": "Create a webhook subscription", "pending": true },
641
- { "method": "DELETE", "path": "/api/v1/webhooks/{id}", "operationId": "pendingWebhookSubscription.destroy", "domain": "accounts", "permission": "webhooks:write", "tag": "Webhooks", "summary": "Delete a webhook subscription", "pending": true },
642
- { "method": "GET", "path": "/api/v1/webhooks/{id}", "operationId": "pendingWebhookSubscription.show", "domain": "accounts", "permission": "webhooks:read", "tag": "Webhooks", "summary": "Read a webhook subscription", "pending": true },
643
- { "method": "PUT", "path": "/api/v1/webhooks/{id}", "operationId": "pendingWebhookSubscription.update", "domain": "accounts", "permission": "webhooks:write", "tag": "Webhooks", "summary": "Update a webhook subscription", "pending": true },
644
- { "method": "GET", "path": "/api/v1/webhooks/{id}/deliveries", "operationId": "pendingWebhookSubscription.deliveries", "domain": "accounts", "permission": "webhooks:read", "tag": "Webhooks", "summary": "Read the delivery history", "pending": true },
678
+ { "method": "GET", "path": "/api/v1/webhooks", "operationId": "webhookSubscription.index", "domain": "accounts", "permission": "webhooks:read", "tag": "WebhookSubscription", "summary": "Listar webhooks", "pending": false },
679
+ { "method": "POST", "path": "/api/v1/webhooks", "operationId": "webhookSubscription.store", "domain": "accounts", "permission": "webhooks:write", "tag": "WebhookSubscription", "summary": "Crear un webhook", "pending": false },
680
+ { "method": "DELETE", "path": "/api/v1/webhooks/{id}", "operationId": "webhookSubscription.destroy", "domain": "accounts", "permission": "webhooks:write", "tag": "WebhookSubscription", "summary": "Eliminar un webhook", "pending": false },
681
+ { "method": "GET", "path": "/api/v1/webhooks/{id}", "operationId": "webhookSubscription.show", "domain": "accounts", "permission": "webhooks:read", "tag": "WebhookSubscription", "summary": "Ver un webhook", "pending": false },
682
+ { "method": "PUT", "path": "/api/v1/webhooks/{id}", "operationId": "webhookSubscription.update", "domain": "accounts", "permission": "webhooks:write", "tag": "WebhookSubscription", "summary": "Actualizar un webhook", "pending": true },
683
+ { "method": "GET", "path": "/api/v1/webhooks/{id}/deliveries", "operationId": "webhookSubscriptionDelivery.index", "domain": "accounts", "permission": "webhooks:read", "tag": "WebhookSubscriptionDelivery", "summary": "Listar entregas de un webhook", "pending": false },
645
684
  { "method": "POST", "path": "/api/v1/webhooks/{id}/rotate-secret", "operationId": "pendingWebhookSubscription.rotateSecret", "domain": "accounts", "permission": "webhooks:write", "tag": "Webhooks", "summary": "Generate a new secret", "pending": true },
646
- { "method": "POST", "path": "/api/v1/webhooks/{id}/test", "operationId": "pendingWebhookSubscription.test", "domain": "accounts", "permission": "webhooks:write", "tag": "Webhooks", "summary": "Send a test event now", "pending": true },
685
+ { "method": "POST", "path": "/api/v1/webhooks/{id}/test", "operationId": "webhookSubscriptionTest.test", "domain": "accounts", "permission": "webhooks:write", "tag": "WebhookSubscriptionTest", "summary": "Enviar un evento de prueba", "pending": false },
647
686
  { "method": "GET", "path": "/api/v1/webhooks/endpoints", "operationId": "webhookEndpoint.index", "domain": "accounts", "permission": "accounts:read", "tag": "WebhookEndpoint", "summary": "Listar webhooks", "pending": false },
648
687
  { "method": "POST", "path": "/api/v1/webhooks/endpoints", "operationId": "webhookEndpoint.store", "domain": "accounts", "permission": "accounts:write", "tag": "WebhookEndpoint", "summary": "Crear un webhook", "pending": false },
649
688
  { "method": "DELETE", "path": "/api/v1/webhooks/endpoints/{id}", "operationId": "webhookEndpoint.destroy", "domain": "accounts", "permission": "accounts:write", "tag": "WebhookEndpoint", "summary": "Eliminar un webhook", "pending": false },
@@ -1071,7 +1110,7 @@ var Forms = class extends Resource {
1071
1110
 
1072
1111
  // src/resources/groups.ts
1073
1112
  var Groups = class extends Resource {
1074
- /** `GET /api/v1/groups`, paginated. */
1113
+ /** `GET /api/v1/groups`, paginated. Each group's `uid` (`…@g.us`) is what {@link Groups.sendMessage} takes. */
1075
1114
  list(query, options) {
1076
1115
  return this.client.paginate("/api/v1/groups", { ...options, query });
1077
1116
  }
@@ -1107,6 +1146,28 @@ var Groups = class extends Resource {
1107
1146
  listActions(group, query, options) {
1108
1147
  return this.client.paginate("/api/v1/groups/{group}/actions", { ...options, path: { group }, query });
1109
1148
  }
1149
+ /**
1150
+ * `POST /api/v1/groups/{group}/messages`: sends a text (`type: 'text'`) or one file (`image`,
1151
+ * `video`, `audio` or `document`, by its `https` `media_url`) to the group, from `device_id`. It
1152
+ * answers `202` with `{ action_id, status: 'queued' }` and goes out in the background: the result
1153
+ * arrives by `group_action.completed` (or `group_action.failed`), with the same `action_id` in
1154
+ * `action.uuid`, or with {@link Groups.retrieveAction}; `result.message.uid` is the id of the message in
1155
+ * WhatsApp.
1156
+ *
1157
+ * `group` is the `uid` of the group (`…@g.us`). A QR number must be admin of the group; an official
1158
+ * number, the one the group belongs to. Rejections: `GROUP_ACTION_ERROR_CODES`. Like every send, it
1159
+ * is never retried automatically.
1160
+ */
1161
+ sendMessage(group, body, options) {
1162
+ return this.client.request("POST", "/api/v1/groups/{group}/messages", { ...options, path: { group }, body });
1163
+ }
1164
+ /**
1165
+ * `GET /api/v1/groups/actions/{action}`: where a group action, such as a message sent with
1166
+ * {@link Groups.sendMessage}, is (`queued`, `running`, `completed` or `failed`) and its `result`.
1167
+ */
1168
+ retrieveAction(action, options) {
1169
+ return this.client.request("GET", "/api/v1/groups/actions/{action}", { ...options, path: { action } });
1170
+ }
1110
1171
  };
1111
1172
 
1112
1173
  // src/resources/messages.ts
@@ -1387,7 +1448,7 @@ var Webhooks = class extends Resource {
1387
1448
  };
1388
1449
 
1389
1450
  // src/version.ts
1390
- var VERSION = "0.2.2";
1451
+ var VERSION = "0.3.0";
1391
1452
 
1392
1453
  // src/client.ts
1393
1454
  var BASE_URLS = {
@@ -1591,28 +1652,32 @@ var webhookEvents = [
1591
1652
  { "type": "billing.payment_failed", "domains": ["accounts"], "status": "live", "pending": true, "description": "A charge of the subscription could not be processed (Stripe subscriptions only)." },
1592
1653
  { "type": "billing.plan_blocked", "domains": ["accounts"], "status": "planned", "pending": true, "description": "The plan was blocked by an unprocessed charge. Planned: not emitted yet." },
1593
1654
  { "type": "billing.upcoming_charge", "domains": ["accounts"], "status": "live", "pending": true, "description": "The next charge of the subscription is coming up (Stripe subscriptions only)." },
1594
- { "type": "broadcast.finished", "domains": ["conversations"], "status": "live", "pending": false, "description": "Una campa\xF1a lleg\xF3 a su estado final (enviada, fallida o con fallos parciales), con sus conteos.\n\n`status` es `success`, `failed` o `partially_failed`. `reason` dice por qu\xE9 termin\xF3: `completed` (se enviaron todas las p\xE1ginas), `cancelled` (se cerr\xF3 una campa\xF1a pausada), `template_rejected` (Meta rechaz\xF3 la plantilla, o su categor\xEDa cambi\xF3, mientras la campa\xF1a esperaba), `approval_expired` (la plantilla no se aprob\xF3 a tiempo), `mac_lockout` (la cuenta alcanz\xF3 su l\xEDmite de contactos activos), `no_recipients` (la audiencia qued\xF3 vac\xEDa) o `error` (el env\xEDo no pudo despacharse). `totals` son los conteos del env\xEDo: `processed` (destinatarios procesados), `failed` y `skipped_unreachable` (destinatarios que el canal no puede alcanzar); valen 0 si la campa\xF1a termin\xF3 antes de enviar. Se emite una sola vez por campa\xF1a." },
1595
- { "type": "broadcast.paused", "domains": ["conversations"], "status": "live", "pending": false, "description": "Una campa\xF1a se paus\xF3 sola, por ejemplo porque baj\xF3 la calidad del n\xFAmero.\n\n`reason` es `quality_degraded` (la calidad del n\xFAmero baj\xF3 respecto de la del inicio, o lleg\xF3 a RED) o `quality_unreadable` (no se pudo leer la calidad en tres controles seguidos). `quality` y `quality_baseline` son la calidad de Meta le\xEDda en el control y la del inicio del env\xEDo (`GREEN`, `YELLOW`, `RED`), o `null` si no se pudo leer. S\xF3lo las campa\xF1as con env\xEDo inteligente se pausan solas. Reanudar la campa\xF1a y que se pause otra vez emite otro evento." },
1655
+ { "type": "broadcast.finished", "domains": ["conversations"], "status": "live", "pending": false, "description": "Una campa\xF1a lleg\xF3 a su estado final (enviada, fallida o con fallos parciales), con sus conteos.\n\n`status` es `success`, `failed` o `partially_failed`. `reason` dice por qu\xE9 termin\xF3: `completed` (se enviaron todas las p\xE1ginas), `cancelled` (se cerr\xF3 una campa\xF1a pausada), `template_rejected` (Meta rechaz\xF3 la plantilla, o su categor\xEDa cambi\xF3, mientras la campa\xF1a esperaba; tambi\xE9n cuando Meta la paus\xF3 durante el env\xEDo y se detuvo la campa\xF1a), `approval_expired` (la plantilla no se aprob\xF3 a tiempo), `mac_lockout` (la cuenta alcanz\xF3 su l\xEDmite de contactos activos), `mac_check_unavailable` (la campa\xF1a la inici\xF3 una API key y el l\xEDmite de contactos activos no se pudo verificar, as\xED que no se envi\xF3 nada), `no_recipients` (la audiencia qued\xF3 vac\xEDa) o `error` (el env\xEDo no pudo despacharse). `totals` son los conteos del env\xEDo: `processed` (destinatarios procesados), `failed` y `skipped_unreachable` (destinatarios que el canal no puede alcanzar); valen 0 si la campa\xF1a termin\xF3 antes de enviar. Se emite una sola vez por campa\xF1a." },
1656
+ { "type": "broadcast.paused", "domains": ["conversations"], "status": "live", "pending": false, "description": "Una campa\xF1a se paus\xF3 sola, por ejemplo porque baj\xF3 la calidad del n\xFAmero.\n\n`reason` es `quality_degraded` (la calidad del n\xFAmero baj\xF3 respecto de la del inicio, o lleg\xF3 a RED), `quality_unreadable` (no se pudo leer la calidad en tres controles seguidos), `template_unavailable` (Meta dej\xF3 la plantilla en `PAUSED`, `DISABLED` o `REJECTED` antes de una tanda) o `rejection_rate` (en los env\xEDos recientes del n\xFAmero, por defecto las \xFAltimas 24 horas, Meta rechaz\xF3 una proporci\xF3n igual o mayor al umbral configurable: el c\xF3digo 131049, por defecto 5 %; el c\xF3digo 131026, por defecto 5 %; o los c\xF3digos que indican una restricci\xF3n de la cuenta o del n\xFAmero, por defecto 15 %, con la lista configurable y por defecto 131049, 131048, 131031 y 368). Con `rejection_rate` llega adem\xE1s `rejection`: `codes` (los que llegaron a su umbral: `131049`, `131026` o `failed`), `rates` (el porcentaje de cada uno), `attempts` (los env\xEDos medidos) y `window_hours`. `quality` y `quality_baseline` son la calidad de Meta le\xEDda en el control y la del inicio del env\xEDo (`GREEN`, `YELLOW`, `RED`), o `null` si no se pudo leer. `template` es `{name, status}` con el nombre de la plantilla y su estado en Meta cuando `reason` es `template_unavailable`, y `null` en las dem\xE1s pausas (por calidad o por rechazos). Con `rejection_rate` el n\xFAmero adem\xE1s queda frenado 7 d\xEDas (configurable): mientras dure no se pueden crear, ejecutar ni reanudar campa\xF1as desde ese n\xFAmero, ni mandar plantillas a contactos que no le escribieron en las \xFAltimas 24 horas, y solo soporte lo levanta antes. S\xF3lo las campa\xF1as con env\xEDo inteligente se pausan solas. Reanudar la campa\xF1a y que se pause otra vez emite otro evento." },
1596
1657
  { "type": "campaign.no_groups_available", "domains": ["communities"], "status": "live", "pending": true, "description": "A campaign has no groups to send the people who come through its link to." },
1597
1658
  { "type": "campaign.status_changed", "domains": ["communities"], "status": "live", "pending": false, "description": "Una campa\xF1a se activ\xF3 o se paus\xF3." },
1598
1659
  { "type": "contact.created", "domains": ["conversations"], "status": "live", "pending": false, "description": "Se cre\xF3 un contacto nuevo en la cuenta.\n\nSe env\xEDa un evento por cada contacto nuevo, sea cual sea el canal: un mensaje entrante, la creaci\xF3n manual, una importaci\xF3n o la API. No se env\xEDa cuando el contacto ya exist\xEDa y s\xF3lo se actualiza, ni para los contactos que la plataforma crea para sus propias notificaciones. En importaciones grandes el l\xEDmite de volumen de la cuenta puede descartar parte de los eventos." },
1599
1660
  { "type": "contact.stage_changed", "domains": ["conversations"], "status": "live", "pending": false, "description": "Un contacto cambi\xF3 de etapa en un tablero.\n\nSe env\xEDa un evento por cada contacto que cambia de etapa en un tablero por etapas. `kind` es entry (entra al tablero, `from_stage` es null), move (pasa de una etapa a otra), exit (sale del tablero, `to_stage` es null) o stage_deleted (se reubica porque su etapa se borr\xF3; el nombre de la etapa borrada es null). No se env\xEDa si el contacto se coloca en la etapa en la que ya estaba." },
1600
1661
  { "type": "contact.tag_added", "domains": ["conversations"], "status": "live", "pending": false, "description": "Un contacto recibi\xF3 una etiqueta.\n\nSe env\xEDa un evento por cada contacto y etiqueta agregados, tambi\xE9n en operaciones en bloque; no se env\xEDa si el contacto ya ten\xEDa la etiqueta. `source` indica el origen: manual, flow, bulk, import, sync, walink o ai. En operaciones en bloque grandes el l\xEDmite de volumen de la cuenta puede descartar parte de los eventos." },
1601
- { "type": "contact.tag_removed", "domains": ["conversations"], "status": "live", "pending": false, "description": "Un contacto perdi\xF3 una etiqueta.\n\nSe env\xEDa un evento por cada contacto y etiqueta quitados, tambi\xE9n en operaciones en bloque; no se env\xEDa si el contacto no ten\xEDa la etiqueta. No se env\xEDa al borrar la etiqueta, al borrar o fusionar contactos ni al desvincular etiquetas de un tablero. `source` indica el origen: manual, flow o bulk. En operaciones en bloque grandes el l\xEDmite de volumen de la cuenta puede descartar parte de los eventos." },
1662
+ { "type": "contact.tag_removed", "domains": ["conversations"], "status": "live", "pending": false, "description": "Un contacto perdi\xF3 una etiqueta.\n\nSe env\xEDa un evento por cada contacto y etiqueta quitados, tambi\xE9n en operaciones en bloque; no se env\xEDa si el contacto no ten\xEDa la etiqueta. No se env\xEDa al borrar la etiqueta, al borrar o fusionar contactos ni al desvincular etiquetas de un tablero. `source` indica el origen: manual, flow, bulk o ai. En operaciones en bloque grandes el l\xEDmite de volumen de la cuenta puede descartar parte de los eventos." },
1602
1663
  { "type": "conversation.assigned", "domains": ["conversations"], "status": "live", "pending": false, "description": "Una conversaci\xF3n qued\xF3 asignada a una persona del equipo o a un agente de IA.\n\nSe env\xEDa cuando una conversaci\xF3n queda asignada a una persona del equipo (`assignee.type` = `human`) o a un agente de IA (`assignee.type` = `ai`), por cualquier camino. `assignee` trae el tipo y el nombre, nunca un identificador. No se env\xEDa al desasignar, ni cuando se vuelve a enviar el mismo asignado." },
1603
1664
  { "type": "conversation.closed", "domains": ["conversations"], "status": "live", "pending": false, "description": "Una conversaci\xF3n pas\xF3 a cerrada.\n\nSe env\xEDa cuando una conversaci\xF3n pasa de abierta a cerrada. No se env\xEDa si la conversaci\xF3n ya estaba cerrada ni cuando se reabre." },
1604
1665
  { "type": "daily_report.generated", "domains": ["communities"], "status": "live", "pending": true, "description": "The daily report of the account was generated (clicks, joins and leaves)." },
1605
1666
  { "type": "device.connected", "domains": ["accounts"], "status": "live", "pending": true, "description": "One of the numbers of the account got connected: by scanning the QR code, by finishing the sign-up of a WhatsApp Cloud number, or through a connect link." },
1606
- { "type": "device.deleted", "domains": ["accounts"], "status": "planned", "pending": true, "description": "A number of the account was deleted: its slot of the plan is free again." },
1667
+ { "type": "device.deleted", "domains": ["accounts"], "status": "live", "pending": true, "description": "A number of the account was deleted (from the panel, the API, or because a connect link expired without connecting it): its slot of the plan is free again." },
1607
1668
  { "type": "device.disconnected", "domains": ["accounts"], "status": "live", "pending": true, "description": "One of the numbers of the account disconnected and can no longer send or receive: a QR session that closed or was protected from a shadow ban, an official number that failed its re-registration, or one disconnected from the panel." },
1608
- { "type": "device.health_changed", "domains": ["accounts"], "status": "planned", "pending": true, "description": "The health of an official number changed (what Meta lets it do). Emitted only when the overall state changes." },
1669
+ { "type": "device.display_name_reviewed", "domains": ["accounts"], "status": "live", "pending": true, "description": "Meta approved or rejected the display name of an official number." },
1670
+ { "type": "device.health_changed", "domains": ["accounts"], "status": "live", "pending": true, "description": "The health of an official number changed (what Meta lets it do). Emitted only when the overall state changes." },
1671
+ { "type": "device.messaging_limit_changed", "domains": ["accounts"], "status": "live", "pending": true, "description": "The messaging limit Meta gives an official number changed: how many different people it can start a conversation with per day (`TIER_250`, `TIER_1K`, `TIER_2K`, `TIER_10K`, `TIER_100K` or `TIER_UNLIMITED`). Meta sets it per business: one notice per number of the account that changed." },
1672
+ { "type": "device.quality_changed", "domains": ["accounts"], "status": "live", "pending": true, "description": "The quality Meta gives an official number changed (`GREEN`, `YELLOW` or `RED`, as Meta sends them). If it drops, slow down the sends of that number before Meta limits it. Once per change; not when Meta has no quality data." },
1609
1673
  { "type": "flow.completed", "domains": ["conversations"], "status": "live", "pending": false, "description": "Un contacto termin\xF3 un flujo de automatizaci\xF3n.\n\nSe env\xEDa una sola vez por cada ejecuci\xF3n de un flujo, cuando termina con \xE9xito. No se env\xEDa si la ejecuci\xF3n se cort\xF3, se cancel\xF3, qued\xF3 bloqueada o fall\xF3. `contact` es `null` si la ejecuci\xF3n no tiene un contacto asociado. Un flujo muy usado puede generar muchos eventos seguidos." },
1610
1674
  { "type": "flow.failed", "domains": ["conversations"], "status": "live", "pending": false, "description": "La ejecuci\xF3n de un flujo para un contacto termin\xF3 por un error.\n\nSe env\xEDa una sola vez por cada ejecuci\xF3n de un flujo que termina por un error, no porque lleg\xF3 al final. `reason` indica el motivo y toma uno de estos valores: `node_missing` (el paso a ejecutar ya no existe), `unknown_node_type` (el paso es de un tipo no reconocido), `missing_subflow` (el flujo que deb\xEDa ejecutarse dentro de otro ya no existe), `malformed_node` (el paso tiene una configuraci\xF3n da\xF1ada), `loop_detected` (la ejecuci\xF3n dio vueltas sin esperar nada) y `execution_error` (un error inesperado detuvo la ejecuci\xF3n). No se env\xEDa si la ejecuci\xF3n se cancel\xF3, qued\xF3 bloqueada o se cort\xF3 porque se edit\xF3 el flujo o se unieron contactos. `contact` es `null` si la ejecuci\xF3n no tiene un contacto asociado." },
1675
+ { "type": "group_action.completed", "domains": ["communities"], "status": "live", "pending": true, "description": "A group action asked through the API finished, such as a message to a group. `action.uuid` is the `action_id` it returned; sending, `result.message.uid` is the id of the message in WhatsApp." },
1611
1676
  { "type": "group_action.failed", "domains": ["communities"], "status": "live", "pending": true, "description": "An action on a group of a campaign failed." },
1612
1677
  { "type": "group_join_request.created", "domains": ["communities"], "status": "live", "pending": true, "description": "Someone asked to join a group that requires approval." },
1613
1678
  { "type": "group_join_request.revoked", "domains": ["communities"], "status": "live", "pending": true, "description": "Someone withdrew their request to join a group." },
1614
- { "type": "group_participant.joined", "domains": ["communities"], "status": "live", "pending": false, "description": "Una persona entr\xF3 a un grupo de una campa\xF1a." },
1615
- { "type": "group_participant.left", "domains": ["communities"], "status": "live", "pending": false, "description": "Una persona sali\xF3 de un grupo de una campa\xF1a." },
1679
+ { "type": "group_participant.joined", "domains": ["communities"], "status": "live", "pending": true, "description": "A person joined one of the account's groups." },
1680
+ { "type": "group_participant.left", "domains": ["communities"], "status": "live", "pending": true, "description": "A person left one of the account's groups." },
1616
1681
  { "type": "group.blocked", "domains": ["communities"], "status": "live", "pending": false, "description": "Un grupo qued\xF3 inoperable: sin administrador conectado, con el link de invitaci\xF3n inv\xE1lido o suspendido por WhatsApp." },
1617
1682
  { "type": "group.created", "domains": ["communities"], "status": "live", "pending": false, "description": "Se cre\xF3 o se import\xF3 un grupo dentro de una campa\xF1a de la cuenta." },
1618
1683
  { "type": "group.full", "domains": ["communities"], "status": "live", "pending": true, "description": "A group went from not full to full." },
@@ -1624,9 +1689,9 @@ var webhookEvents = [
1624
1689
  { "type": "mac.expiring", "domains": ["accounts"], "status": "live", "pending": true, "description": "Some monthly active contacts expire in the next 7 days." },
1625
1690
  { "type": "mac.usage_100", "domains": ["accounts"], "status": "live", "pending": true, "description": "The account used up its monthly active contacts of the cycle; a 24-hour grace period starts." },
1626
1691
  { "type": "mac.usage_80", "domains": ["accounts"], "status": "live", "pending": true, "description": "The account reached 80% of its monthly active contacts of the cycle." },
1627
- { "type": "message.received", "domains": ["conversations"], "status": "live", "pending": false, "description": "Un contacto le escribi\xF3 a un n\xFAmero de WhatsApp de la cuenta." },
1692
+ { "type": "message.received", "domains": ["conversations"], "status": "live", "pending": true, "description": "A contact wrote to one of the WhatsApp numbers of the account." },
1628
1693
  { "type": "message.status_changed", "domains": ["conversations"], "status": "live", "pending": true, "description": "The delivery status of a message you sent with the API changed. One notice per transition, never one that goes back; `queued` is not reported. It must be asked for explicitly in `events`." },
1629
- { "type": "pipeline.finished", "domains": ["communities"], "status": "live", "pending": false, "description": "Termin\xF3 un pipeline de operaciones sobre grupos, con su resultado agregado." },
1694
+ { "type": "pipeline.finished", "domains": ["communities"], "status": "live", "pending": false, "description": "Termin\xF3 un pipeline de operaciones sobre grupos, con su resultado agregado y la clave de idempotencia del pedido que lo origin\xF3, cuando la hay." },
1630
1695
  { "type": "poll.voted", "domains": ["communities"], "status": "live", "pending": false, "description": "Un participante vot\xF3 en una encuesta enviada a un grupo, o cambi\xF3 su voto." },
1631
1696
  { "type": "scheduled_message.finished", "domains": ["communities"], "status": "live", "pending": false, "description": "Un env\xEDo programado termin\xF3, con su resultado agregado." },
1632
1697
  { "type": "scheduled_message.group_delivery_failed", "domains": ["communities"], "status": "live", "pending": false, "description": "Un env\xEDo programado fall\xF3 en un grupo concreto, con el motivo desagregado." },
@@ -1656,6 +1721,7 @@ exports.DEFAULT_TIMEOUT_MS = DEFAULT_TIMEOUT_MS;
1656
1721
  exports.DEFAULT_TOLERANCE_SECONDS = DEFAULT_TOLERANCE_SECONDS;
1657
1722
  exports.Funnelchat = Funnelchat;
1658
1723
  exports.FunnelchatError = FunnelchatError;
1724
+ exports.GROUP_ACTION_ERROR_CODES = GROUP_ACTION_ERROR_CODES;
1659
1725
  exports.IDEMPOTENCY_ERROR_CODES = IDEMPOTENCY_ERROR_CODES;
1660
1726
  exports.InternalServerError = InternalServerError;
1661
1727
  exports.NUMBER_ERROR_CODES = NUMBER_ERROR_CODES;