@funnelchat-hq/sandbox 0.4.0 → 0.5.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.
@@ -329,7 +329,7 @@ function resolveConfig(args, cwd = process.cwd()) {
329
329
  return { config, configFile };
330
330
  }
331
331
 
332
- // spec/catalog.json
332
+ // generated/catalog.json
333
333
  var catalog_default = {
334
334
  meta: {
335
335
  envelope_version: "v1",
@@ -341,9 +341,7 @@ var catalog_default = {
341
341
  type: "device.disconnected",
342
342
  area: "accounts",
343
343
  status: "active",
344
- is_critical: true,
345
- label: "N\xFAmero desconectado",
346
- description: "Uno de los n\xFAmeros de WhatsApp de la cuenta se desconect\xF3 y dej\xF3 de poder enviar o recibir. `reason` dice por qu\xE9: `qr_logged_out` (se cerr\xF3 la sesi\xF3n de un n\xFAmero por QR), `meta_account_not_registered` (un n\xFAmero oficial dej\xF3 de estar registrado en Meta y no se pudo volver a registrar solo), `shadow_ban_protection` (Funnelchat lo desconect\xF3 para protegerlo de un posible bloqueo), `disconnected_by_user` (alguien de la cuenta desconect\xF3 o borr\xF3 los datos de un n\xFAmero oficial), `provider_error` o `unknown`. Trae `device.connection`, `device.external_reference` y `connect_link_id` (el link de alta que conect\xF3 el n\xFAmero por \xFAltima vez, o null).",
344
+ 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.",
347
345
  subscribable: true,
348
346
  example: {
349
347
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -369,9 +367,7 @@ var catalog_default = {
369
367
  type: "device.connected",
370
368
  area: "accounts",
371
369
  status: "active",
372
- is_critical: false,
373
- label: "N\xFAmero conectado",
374
- description: "Uno de los n\xFAmeros de WhatsApp de la cuenta qued\xF3 conectado: al escanear el c\xF3digo QR o al terminar el alta de un n\xFAmero de WhatsApp Cloud. Trae `device.connection` (`qr`, `coexistence` o `dedicated`), `device.external_reference` y `connect_link_id` (el link de alta que lo conect\xF3, o null).",
370
+ 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.",
375
371
  subscribable: true,
376
372
  example: {
377
373
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -396,9 +392,7 @@ var catalog_default = {
396
392
  type: "device.deleted",
397
393
  area: "accounts",
398
394
  status: "active",
399
- is_critical: false,
400
- label: "N\xFAmero borrado",
401
- description: "Uno de los n\xFAmeros de WhatsApp de la cuenta se borr\xF3 y liber\xF3 su lugar en el plan (desde el panel, la API o porque un link de alta venci\xF3 sin conectarlo). Un n\xFAmero oficial deja de recibir mensajes en Funnelchat, pero sigue registrado en Meta; a uno por QR se le cierra la sesi\xF3n. Trae `connect_link_id` (el link de alta que conect\xF3 el n\xFAmero por \xFAltima vez, o null).",
395
+ 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.",
402
396
  subscribable: true,
403
397
  example: {
404
398
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -423,9 +417,7 @@ var catalog_default = {
423
417
  type: "device.health_changed",
424
418
  area: "accounts",
425
419
  status: "active",
426
- is_critical: true,
427
- label: "Cambi\xF3 la salud del n\xFAmero",
428
- description: "Cambi\xF3 el estado de env\xEDo de uno de los n\xFAmeros oficiales de la cuenta, seg\xFAn Meta: `available`, `limited`, `blocked` o `unknown` (`previous_state` y `state`). Sale solo cuando el estado cambia, no con cada aviso de Meta. El motivo se consulta en `GET api/v1/devices/{device}/health`. Trae `connect_link_id` (el link de alta que conect\xF3 el n\xFAmero por \xFAltima vez, o null).",
420
+ description: "The health of an official number changed (what Meta lets it do). Emitted only when the overall state changes.",
429
421
  subscribable: true,
430
422
  example: {
431
423
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -452,9 +444,7 @@ var catalog_default = {
452
444
  type: "device.quality_changed",
453
445
  area: "accounts",
454
446
  status: "active",
455
- is_critical: true,
456
- label: "Cambi\xF3 la calidad del n\xFAmero",
457
- description: "Cambi\xF3 la calidad que Meta le da a uno de los n\xFAmeros oficiales de la cuenta (`previous` y `current`, tal cual los manda Meta: `GREEN`, `YELLOW` o `RED`). Si la calidad baja, conviene frenar los env\xEDos de ese n\xFAmero antes de que Meta lo limite. Sale una vez por cambio, no con cada aviso de Meta, y no sale cuando Meta no tiene datos de calidad (`NA` o `UNKNOWN`). Trae `connect_link_id` (el link de alta que conect\xF3 el n\xFAmero por \xFAltima vez, o null).",
447
+ 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.",
458
448
  subscribable: true,
459
449
  example: {
460
450
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -481,9 +471,7 @@ var catalog_default = {
481
471
  type: "device.messaging_limit_changed",
482
472
  area: "accounts",
483
473
  status: "active",
484
- is_critical: true,
485
- label: "Cambio del l\xEDmite de mensajes",
486
- description: "Cambi\xF3 el l\xEDmite de mensajes que Meta le da a uno de los n\xFAmeros oficiales de la cuenta: cu\xE1ntas personas distintas se pueden contactar por d\xEDa con mensajes que inicia la empresa (`previous` y `current`, tal cual los manda Meta: `TIER_250`, `TIER_1K`, `TIER_2K`, `TIER_10K`, `TIER_100K` o `TIER_UNLIMITED`). Meta fija el l\xEDmite para todos los n\xFAmeros de una misma empresa: llega un aviso por cada n\xFAmero de la cuenta que cambi\xF3. Sale una vez por cambio y no sale cuando el n\xFAmero todav\xEDa no tiene l\xEDmite asignado (`TIER_NOT_SET`). Trae `connect_link_id` (el link de alta que conect\xF3 el n\xFAmero por \xFAltima vez, o null).",
474
+ 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.",
487
475
  subscribable: true,
488
476
  example: {
489
477
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -510,9 +498,7 @@ var catalog_default = {
510
498
  type: "device.display_name_reviewed",
511
499
  area: "accounts",
512
500
  status: "active",
513
- is_critical: false,
514
- label: "Nombre visible revisado",
515
- description: "Meta aprob\xF3 (`decision`: `approved`) o rechaz\xF3 (`rejected`) el nombre visible de uno de los n\xFAmeros oficiales de la cuenta. Trae el estado anterior y el nuevo, tal cual los manda Meta (`previous_status`; `status`: `APPROVED` o `DECLINED`), el nombre visible actual (`verified_name`) y, en un rechazo, el motivo que da Meta en su aviso (`rejection_reason`), o null si Meta no lo informa. Sale una vez por revisi\xF3n. Trae `connect_link_id` (el link de alta que conect\xF3 el n\xFAmero por \xFAltima vez, o null).",
501
+ description: "Meta approved or rejected the display name of an official number.",
516
502
  subscribable: true,
517
503
  example: {
518
504
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -542,12 +528,10 @@ var catalog_default = {
542
528
  type: "billing.payment_failed",
543
529
  area: "accounts",
544
530
  status: "active",
545
- is_critical: true,
546
- label: "Pago fallido",
547
- description: "Un cobro de la suscripci\xF3n no pudo procesarse (solo suscripciones de Stripe). Se emite una vez por factura (el primer intento fallido); no se repite en los reintentos de cobro. No incluye las recargas de IA.",
531
+ description: "A charge of the subscription could not be processed (Stripe subscriptions only).",
548
532
  subscribable: true,
549
533
  example: {
550
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
534
+ id: "evt_000000000000000000000000",
551
535
  type: "billing.payment_failed",
552
536
  version: 1,
553
537
  occurred_at: "2026-10-01T12:00:00Z",
@@ -558,26 +542,14 @@ var catalog_default = {
558
542
  }
559
543
  }
560
544
  },
561
- {
562
- type: "billing.plan_blocked",
563
- area: "accounts",
564
- status: "planned",
565
- is_critical: true,
566
- label: "Plan bloqueado",
567
- description: "El plan qued\xF3 bloqueado por un cobro no procesado.",
568
- subscribable: true,
569
- example: null
570
- },
571
545
  {
572
546
  type: "billing.upcoming_charge",
573
547
  area: "accounts",
574
548
  status: "active",
575
- is_critical: false,
576
- label: "Pr\xF3ximo cobro",
577
- description: "Se acerca el pr\xF3ximo cobro de la suscripci\xF3n (solo suscripciones de Stripe); el aviso llega unos d\xEDas antes de la fecha de cobro.",
549
+ description: "The next charge of the subscription is coming up (Stripe subscriptions only).",
578
550
  subscribable: true,
579
551
  example: {
580
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
552
+ id: "evt_000000000000000000000000",
581
553
  type: "billing.upcoming_charge",
582
554
  version: 1,
583
555
  occurred_at: "2026-10-01T12:00:00Z",
@@ -589,23 +561,11 @@ var catalog_default = {
589
561
  }
590
562
  }
591
563
  },
592
- {
593
- type: "subscription.expiring",
594
- area: "accounts",
595
- status: "planned",
596
- is_critical: false,
597
- label: "Suscripci\xF3n por vencer",
598
- description: "La suscripci\xF3n est\xE1 pr\xF3xima a vencer.",
599
- subscribable: true,
600
- example: null
601
- },
602
564
  {
603
565
  type: "subscription.trial_ending",
604
566
  area: "accounts",
605
567
  status: "active",
606
- is_critical: false,
607
- label: "Trial por terminar",
608
- description: "El per\xEDodo de prueba est\xE1 por terminar; el aviso llega entre 1 y 3 d\xEDas antes del final, seg\xFAn c\xF3mo se contrat\xF3 (en las suscripciones de Stripe, el aviso de Stripe).",
568
+ description: "El per\xEDodo de prueba est\xE1 por terminar; el evento llega entre 1 y 3 d\xEDas antes del final, seg\xFAn c\xF3mo se contrat\xF3 (en las suscripciones de Stripe, el evento de Stripe).",
609
569
  subscribable: true,
610
570
  example: {
611
571
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -622,8 +582,6 @@ var catalog_default = {
622
582
  type: "subscription.reactivated",
623
583
  area: "accounts",
624
584
  status: "active",
625
- is_critical: false,
626
- label: "Suscripci\xF3n reactivada",
627
585
  description: "Se revirti\xF3 la cancelaci\xF3n programada de la suscripci\xF3n (solo suscripciones de Stripe): sigue vigente y se renueva en la fecha indicada.",
628
586
  subscribable: true,
629
587
  example: {
@@ -641,8 +599,6 @@ var catalog_default = {
641
599
  type: "subscription.cancellation_confirmed",
642
600
  area: "accounts",
643
601
  status: "active",
644
- is_critical: false,
645
- label: "Cancelaci\xF3n confirmada",
646
602
  description: "Qued\xF3 confirmada la cancelaci\xF3n de la suscripci\xF3n (solo suscripciones de Stripe): se conserva el acceso hasta la fecha indicada.",
647
603
  subscribable: true,
648
604
  example: {
@@ -660,12 +616,10 @@ var catalog_default = {
660
616
  type: "subscription.dormant_ending",
661
617
  area: "accounts",
662
618
  status: "active",
663
- is_critical: false,
664
- label: "Per\xEDodo dormido por terminar",
665
- description: "El per\xEDodo de cuenta en reposo est\xE1 por terminar (el aviso llega unos 7 d\xEDas antes); en esa fecha se intenta el cobro indicado.",
619
+ description: "The dormant-account period is about to end.",
666
620
  subscribable: true,
667
621
  example: {
668
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
622
+ id: "evt_000000000000000000000000",
669
623
  type: "subscription.dormant_ending",
670
624
  version: 1,
671
625
  occurred_at: "2026-10-01T12:00:00Z",
@@ -677,43 +631,11 @@ var catalog_default = {
677
631
  }
678
632
  }
679
633
  },
680
- {
681
- type: "ai_quota.low_balance",
682
- area: "accounts",
683
- status: "planned",
684
- is_critical: false,
685
- label: "Cuota de IA baja",
686
- description: "La cuota de mensajes de IA de la cuenta est\xE1 por agotarse.",
687
- subscribable: true,
688
- example: null
689
- },
690
- {
691
- type: "ai_quota.topup_succeeded",
692
- area: "accounts",
693
- status: "planned",
694
- is_critical: false,
695
- label: "Recarga de IA exitosa",
696
- description: "Una recarga de cuota de IA se acredit\xF3 correctamente.",
697
- subscribable: true,
698
- example: null
699
- },
700
- {
701
- type: "ai_quota.topup_failed",
702
- area: "accounts",
703
- status: "planned",
704
- is_critical: true,
705
- label: "Recarga de IA fallida",
706
- description: "Una recarga de cuota de IA no pudo procesarse.",
707
- subscribable: true,
708
- example: null
709
- },
710
634
  {
711
635
  type: "mac.usage_80",
712
636
  area: "accounts",
713
637
  status: "active",
714
- is_critical: false,
715
- label: "Contactos activos al 80%",
716
- description: "La cuenta alcanz\xF3 el 80% de sus contactos activos mensuales del ciclo. `workspace_id` es el workspace al que se rutea el aviso, como en todos los eventos: el workspace con facturaci\xF3n propia cuyo pool alcanz\xF3 el umbral, o el workspace por defecto cuando el pool es el de la cuenta.",
638
+ description: "La cuenta alcanz\xF3 el 80% de sus contactos activos mensuales del ciclo.",
717
639
  subscribable: true,
718
640
  example: {
719
641
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -733,9 +655,7 @@ var catalog_default = {
733
655
  type: "mac.usage_100",
734
656
  area: "accounts",
735
657
  status: "active",
736
- is_critical: true,
737
- label: "Contactos activos al 100%",
738
- description: "La cuenta agot\xF3 sus contactos activos mensuales del ciclo; se abre una gracia de 24 horas cuyo vencimiento viaja en `grace_expires_at`. `workspace_id` es el workspace al que se rutea el aviso, como en todos los eventos: el workspace con facturaci\xF3n propia cuyo pool se agot\xF3, o el workspace por defecto cuando el pool es el de la cuenta.",
658
+ description: "La cuenta agot\xF3 sus contactos activos mensuales del ciclo; se abre una gracia de 24 horas cuyo vencimiento viaja en `grace_expires_at`.",
739
659
  subscribable: true,
740
660
  example: {
741
661
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -756,8 +676,6 @@ var catalog_default = {
756
676
  type: "mac.expiring",
757
677
  area: "accounts",
758
678
  status: "active",
759
- is_critical: false,
760
- label: "Contactos activos por expirar",
761
679
  description: "Hay contactos activos mensuales que vencen en los pr\xF3ximos 7 d\xEDas.",
762
680
  subscribable: true,
763
681
  example: {
@@ -776,8 +694,6 @@ var catalog_default = {
776
694
  type: "account.blocked",
777
695
  area: "accounts",
778
696
  status: "active",
779
- is_critical: true,
780
- label: "Cuenta bloqueada",
781
697
  description: "La cuenta qued\xF3 bloqueada por consumo: termin\xF3 la gracia de 24 horas tras agotar los contactos activos mensuales sin que se regularizara.",
782
698
  subscribable: true,
783
699
  example: {
@@ -793,36 +709,14 @@ var catalog_default = {
793
709
  }
794
710
  }
795
711
  },
796
- {
797
- type: "webhook.test",
798
- area: "accounts",
799
- status: "active",
800
- is_critical: false,
801
- label: "Evento de prueba",
802
- description: "Evento de prueba enviado por `POST webhooks/{id}/test`; no se puede suscribir.",
803
- subscribable: false,
804
- example: {
805
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
806
- type: "webhook.test",
807
- version: 1,
808
- occurred_at: "2026-10-01T12:00:00Z",
809
- data: {
810
- subscription: "00000000-0000-4000-8000-000000000001",
811
- sent_at: "2026-10-01T12:00:00Z",
812
- workspace_id: 37
813
- }
814
- }
815
- },
816
712
  {
817
713
  type: "message.received",
818
714
  area: "conversations",
819
715
  status: "active",
820
- is_critical: false,
821
- label: "Mensaje recibido",
822
- description: "Un contacto le escribi\xF3 a un n\xFAmero de WhatsApp de la cuenta. `device_id` identifica ese n\xFAmero y puede venir `null`.",
716
+ description: "A contact wrote to one of the WhatsApp numbers of the account.",
823
717
  subscribable: true,
824
718
  example: {
825
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
719
+ id: "evt_000000000000000000000001",
826
720
  type: "message.received",
827
721
  version: 1,
828
722
  occurred_at: "2026-10-01T12:00:00Z",
@@ -830,18 +724,18 @@ var catalog_default = {
830
724
  message: {
831
725
  id: 1001,
832
726
  type: "text",
833
- text: "Hola, quiero m\xE1s informaci\xF3n",
727
+ text: "Hi, I want more information",
834
728
  media: null
835
729
  },
836
730
  contact: {
837
731
  id: 2001,
838
- name: "Contacto de ejemplo",
732
+ name: "Example contact",
839
733
  phone: "+5491100000000"
840
734
  },
841
735
  receiver: {
842
736
  phone: "+5491100000001"
843
737
  },
844
- device_id: 4521,
738
+ device_id: 3,
845
739
  workspace_id: 37
846
740
  }
847
741
  }
@@ -850,12 +744,10 @@ var catalog_default = {
850
744
  type: "flow.completed",
851
745
  area: "conversations",
852
746
  status: "active",
853
- is_critical: false,
854
- label: "Flujo completado",
855
- description: "Un contacto termin\xF3 un flujo de automatizaci\xF3n.",
747
+ 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.",
856
748
  subscribable: true,
857
749
  example: {
858
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
750
+ id: "evt_000000000000000000000003",
859
751
  type: "flow.completed",
860
752
  version: 1,
861
753
  occurred_at: "2026-10-01T12:00:00Z",
@@ -877,12 +769,10 @@ var catalog_default = {
877
769
  type: "broadcast.finished",
878
770
  area: "conversations",
879
771
  status: "active",
880
- is_critical: false,
881
- label: "Campa\xF1a finalizada",
882
- description: "Una campa\xF1a lleg\xF3 a su estado final (enviada, fallida o con fallos parciales), con sus conteos.",
772
+ 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.",
883
773
  subscribable: true,
884
774
  example: {
885
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
775
+ id: "evt_000000000000000000000011",
886
776
  type: "broadcast.finished",
887
777
  version: 1,
888
778
  occurred_at: "2026-10-01T12:00:00Z",
@@ -906,12 +796,10 @@ var catalog_default = {
906
796
  type: "contact.stage_changed",
907
797
  area: "conversations",
908
798
  status: "active",
909
- is_critical: false,
910
- label: "Contacto cambi\xF3 de etapa",
911
- description: "Un contacto cambi\xF3 de etapa en un tablero.",
799
+ 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.",
912
800
  subscribable: true,
913
801
  example: {
914
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
802
+ id: "evt_000000000000000000000008",
915
803
  type: "contact.stage_changed",
916
804
  version: 1,
917
805
  occurred_at: "2026-10-01T12:00:00Z",
@@ -944,12 +832,10 @@ var catalog_default = {
944
832
  type: "message.status_changed",
945
833
  area: "conversations",
946
834
  status: "active",
947
- is_critical: false,
948
- label: "Estado de mensaje cambiado",
949
- description: "Cambi\xF3 el estado de entrega de un mensaje enviado: `status` es `sent`, `delivered`, `read` o `failed`. `previous_status` es el estado que el mensaje ten\xEDa justo antes de este cambio y es `null` en tres casos: es el primer aviso del mensaje, es el mismo estado que `status` (por ejemplo, el proveedor confirma el `sent` que ya registr\xF3 el env\xEDo) o no se pudo leer. `error` solo viene cuando `status` es `failed`: `code` es el c\xF3digo num\xE9rico del proveedor y `title` su t\xEDtulo, y cualquiera de los dos puede ser `null` si el proveedor no los informa. `error.reason` es `null` cuando el fallo lo inform\xF3 el proveedor; cuando Funnelchat decidi\xF3 que un mensaje enviado con clave no sal\xEDa (por ejemplo, por saldo insuficiente o ventana de 24 horas cerrada) trae el motivo (`device_unavailable`, `insufficient_balance`, `window_closed`, `recipient_unreachable`, `template_not_found`, `template_unresolved_placeholder`, `not_queued` o `not_sent`), `code` es `null` y `title` es un texto llano en el idioma de la cuenta. Un mensaje enviado con clave que Funnelchat no lleg\xF3 a enviar avisa `failed` con `previous_status` `null`. `client_reference` es el identificador propio que el integrador envi\xF3 con el mensaje, para relacionar el evento con su env\xEDo; viene `null` si no envi\xF3 ninguno.",
835
+ 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`.",
950
836
  subscribable: true,
951
837
  example: {
952
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
838
+ id: "evt_000000000000000000000014",
953
839
  type: "message.status_changed",
954
840
  version: 1,
955
841
  occurred_at: "2026-10-01T12:00:00Z",
@@ -965,7 +851,7 @@ var catalog_default = {
965
851
  reason: null
966
852
  },
967
853
  occurred_at: "2026-10-01T12:00:00Z",
968
- client_reference: "pedido-1234",
854
+ client_reference: "pedido-1001",
969
855
  workspace_id: 37
970
856
  }
971
857
  }
@@ -974,12 +860,10 @@ var catalog_default = {
974
860
  type: "conversation.closed",
975
861
  area: "conversations",
976
862
  status: "active",
977
- is_critical: false,
978
- label: "Conversaci\xF3n cerrada",
979
- description: "Se cerr\xF3 la conversaci\xF3n con un contacto.",
863
+ 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.",
980
864
  subscribable: true,
981
865
  example: {
982
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
866
+ id: "evt_000000000000000000000004",
983
867
  type: "conversation.closed",
984
868
  version: 1,
985
869
  occurred_at: "2026-10-01T12:00:00Z",
@@ -997,12 +881,10 @@ var catalog_default = {
997
881
  type: "conversation.assigned",
998
882
  area: "conversations",
999
883
  status: "active",
1000
- is_critical: false,
1001
- label: "Conversaci\xF3n asignada",
1002
- description: "Se asign\xF3 la conversaci\xF3n con un contacto a una persona o a la IA.",
884
+ 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.",
1003
885
  subscribable: true,
1004
886
  example: {
1005
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
887
+ id: "evt_000000000000000000000005",
1006
888
  type: "conversation.assigned",
1007
889
  version: 1,
1008
890
  occurred_at: "2026-10-01T12:00:00Z",
@@ -1024,12 +906,10 @@ var catalog_default = {
1024
906
  type: "contact.tag_added",
1025
907
  area: "conversations",
1026
908
  status: "active",
1027
- is_critical: false,
1028
- label: "Etiqueta agregada a un contacto",
1029
- description: "Se agreg\xF3 una etiqueta a un contacto.",
909
+ 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.",
1030
910
  subscribable: true,
1031
911
  example: {
1032
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
912
+ id: "evt_000000000000000000000006",
1033
913
  type: "contact.tag_added",
1034
914
  version: 1,
1035
915
  occurred_at: "2026-10-01T12:00:00Z",
@@ -1052,12 +932,10 @@ var catalog_default = {
1052
932
  type: "broadcast.paused",
1053
933
  area: "conversations",
1054
934
  status: "active",
1055
- is_critical: false,
1056
- label: "Campa\xF1a pausada",
1057
- description: "Una campa\xF1a se paus\xF3 por calidad del n\xFAmero.",
935
+ 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), `payment_issue` (el 2 % o m\xE1s de los env\xEDos de la misma campa\xF1a, con un m\xEDnimo de 20 env\xEDos, fueron rechazados por Meta con el c\xF3digo 131042, un problema de pago o de facturaci\xF3n de la cuenta de WhatsApp Business; el 2 % y el m\xEDnimo de 20 env\xEDos son los valores por defecto y se pueden configurar; aplica a cualquier campa\xF1a, tenga o no env\xEDo inteligente; no frena el n\xFAmero; al reanudar la campa\xF1a el conteo, incluidos los env\xEDos que cuentan, vuelve a empezar de cero) o `rejection_rate` (entre los env\xEDos recientes de la propia campa\xF1a, por defecto las \xFAltimas 24 horas, Meta rechaz\xF3 una proporci\xF3n igual o mayor al umbral configurable, por defecto 15 %, con los c\xF3digos que indican una restricci\xF3n de la cuenta o del n\xFAmero; la lista es configurable y por defecto es 131048, 131031 y 368; los c\xF3digos 131049 y 131026 no pausan la campa\xF1a). Con `rejection_rate` llega adem\xE1s `rejection`: `codes` (los que llegaron a su umbral: hoy `failed`), `rates` (el porcentaje de cada uno; las tasas de `131049` y `131026` se informan como dato aunque no pausen), `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, y siempre `null` en una difusi\xF3n sin env\xEDo inteligente. `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, pago o 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. Las pausas por calidad, por plantilla y por rechazos son solo de las campa\xF1as con env\xEDo inteligente; la pausa por `payment_issue` puede ocurrir en cualquier campa\xF1a. Reanudar la campa\xF1a y que se pause otra vez emite otro evento.",
1058
936
  subscribable: true,
1059
937
  example: {
1060
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
938
+ id: "evt_000000000000000000000007",
1061
939
  type: "broadcast.paused",
1062
940
  version: 1,
1063
941
  occurred_at: "2026-10-01T12:00:00Z",
@@ -1069,6 +947,7 @@ var catalog_default = {
1069
947
  reason: "quality_degraded",
1070
948
  quality: "YELLOW",
1071
949
  quality_baseline: "GREEN",
950
+ template: null,
1072
951
  workspace_id: 37
1073
952
  }
1074
953
  }
@@ -1077,12 +956,10 @@ var catalog_default = {
1077
956
  type: "contact.tag_removed",
1078
957
  area: "conversations",
1079
958
  status: "active",
1080
- is_critical: false,
1081
- label: "Etiqueta quitada de un contacto",
1082
- description: "Se quit\xF3 una etiqueta de un contacto.",
959
+ 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.",
1083
960
  subscribable: true,
1084
961
  example: {
1085
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
962
+ id: "evt_000000000000000000000009",
1086
963
  type: "contact.tag_removed",
1087
964
  version: 1,
1088
965
  occurred_at: "2026-10-01T12:00:00Z",
@@ -1105,12 +982,10 @@ var catalog_default = {
1105
982
  type: "contact.created",
1106
983
  area: "conversations",
1107
984
  status: "active",
1108
- is_critical: false,
1109
- label: "Contacto creado",
1110
- description: "Se cre\xF3 un contacto.",
985
+ 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.",
1111
986
  subscribable: true,
1112
987
  example: {
1113
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
988
+ id: "evt_000000000000000000000010",
1114
989
  type: "contact.created",
1115
990
  version: 1,
1116
991
  occurred_at: "2026-10-01T12:00:00Z",
@@ -1129,12 +1004,10 @@ var catalog_default = {
1129
1004
  type: "template.status_changed",
1130
1005
  area: "conversations",
1131
1006
  status: "active",
1132
- is_critical: false,
1133
- label: "Plantilla cambi\xF3 de estado",
1134
- description: "Cambi\xF3 el estado de una plantilla de WhatsApp.",
1007
+ description: "Una plantilla cambi\xF3 de estado de aprobaci\xF3n en Meta.\n\n`template` identifica la plantilla igual que `GET /templates` (`id`, `uid`, `name`, `category`). `previous_status` y `status` son los estados tal como los devuelve la API (por ejemplo `PENDING`, `APPROVED`, `REJECTED`, `PAUSED`); `previous_status` es `null` si la plantilla no ten\xEDa estado. `reason` trae la observaci\xF3n de rechazo (traducida como en la API y limitada a 500 caracteres) cuando el cambio es un rechazo informado al crear la plantilla, y es `null` en el resto. No se emite si Meta reenv\xEDa el estado que la plantilla ya ten\xEDa. Si una misma plantilla de Meta figura en varias cuentas, cada cuenta recibe su propio evento.",
1135
1008
  subscribable: true,
1136
1009
  example: {
1137
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1010
+ id: "evt_000000000000000000000012",
1138
1011
  type: "template.status_changed",
1139
1012
  version: 1,
1140
1013
  occurred_at: "2026-10-01T12:00:00Z",
@@ -1156,12 +1029,10 @@ var catalog_default = {
1156
1029
  type: "flow.failed",
1157
1030
  area: "conversations",
1158
1031
  status: "active",
1159
- is_critical: false,
1160
- label: "Flujo fallido",
1161
- description: "Un flujo de automatizaci\xF3n fall\xF3.",
1032
+ 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.",
1162
1033
  subscribable: true,
1163
1034
  example: {
1164
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1035
+ id: "evt_000000000000000000000013",
1165
1036
  type: "flow.failed",
1166
1037
  version: 1,
1167
1038
  occurred_at: "2026-10-01T12:00:00Z",
@@ -1184,59 +1055,90 @@ var catalog_default = {
1184
1055
  type: "whatsapp_form.completed",
1185
1056
  area: "conversations",
1186
1057
  status: "active",
1187
- is_critical: false,
1188
- label: "Formulario de WhatsApp completado",
1189
- description: "Un contacto complet\xF3 un formulario de WhatsApp que se le envi\xF3 desde un n\xFAmero de la cuenta. `form.id` identifica el formulario y es el mismo en todas sus versiones; `form.version_id` es la versi\xF3n que se le envi\xF3. `message_id` es el id p\xFAblico del mensaje con el que se envi\xF3 el formulario (el mismo que devolvi\xF3 el env\xEDo, si se hizo por API) y viene `null` si el env\xEDo no tuvo un mensaje p\xFAblico. `contact_id` identifica al contacto y `device_id`, al n\xFAmero. `answers` trae las respuestas en el orden del formulario, como una lista de `{key, label, value}`: `key` es la clave del campo y `label`, su etiqueta. `value` puede ser texto, n\xFAmero, booleano, una lista de textos (en las preguntas de opci\xF3n m\xFAltiple) o `null`; las fechas llegan como texto en formato ISO 8601.",
1058
+ description: "A contact completed a form you sent them.",
1190
1059
  subscribable: true,
1191
1060
  example: {
1192
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1061
+ id: "evt_000000000000000000000015",
1193
1062
  type: "whatsapp_form.completed",
1194
1063
  version: 1,
1195
1064
  occurred_at: "2026-10-01T12:00:00Z",
1196
1065
  data: {
1197
1066
  form: {
1198
- id: 8001,
1199
- name: "Formulario de ejemplo",
1200
- version_id: 8105
1067
+ id: 12,
1068
+ name: "Example survey",
1069
+ version_id: 34
1201
1070
  },
1202
- message_id: 1001,
1071
+ message_id: 1002,
1203
1072
  contact_id: 2001,
1204
- device_id: 4521,
1073
+ device_id: 3,
1205
1074
  answers: [
1206
1075
  {
1207
1076
  key: "nombre",
1208
- label: "Nombre",
1209
- value: "Ana Ejemplo"
1210
- },
1211
- {
1212
- key: "personas",
1213
- label: "Cantidad de personas",
1214
- value: 3
1215
- },
1216
- {
1217
- key: "acepta_novedades",
1218
- label: "Quiero recibir novedades",
1219
- value: true
1220
- },
1221
- {
1222
- key: "intereses",
1223
- label: "Intereses",
1224
- value: [
1225
- "Planes",
1226
- "Precios"
1227
- ]
1228
- },
1077
+ label: "Your name",
1078
+ value: "Example contact"
1079
+ }
1080
+ ],
1081
+ occurred_at: "2026-10-22T12:00:00Z",
1082
+ workspace_id: 37
1083
+ }
1084
+ }
1085
+ },
1086
+ {
1087
+ type: "contact.updated",
1088
+ area: "conversations",
1089
+ status: "active",
1090
+ description: "Cambi\xF3 el nombre, el email, el tel\xE9fono o el valor de un campo personalizado de un contacto.\n\nSe env\xEDa cuando cambia el nombre, el email o el tel\xE9fono de un contacto que ya exist\xEDa, o cuando se pone, cambia o quita el valor de uno de sus campos personalizados, venga del panel, de la API, de un flujo o de una importaci\xF3n. Varios cambios del mismo contacto en una misma operaci\xF3n llegan en un solo evento. `changed` dice qu\xE9 cambi\xF3 (`name`, `email`, `phone`, `custom_fields`); `contact` trae el estado despu\xE9s del cambio y `custom_fields`, s\xF3lo los campos que cambiaron, con su valor nuevo (`null` si se quit\xF3). No se env\xEDa al crear un contacto (eso es `contact.created`), por etiquetas, por el estado de la conversaci\xF3n ni si el valor nuevo es igual al anterior; tampoco al borrar un campo personalizado de la cuenta. En importaciones grandes el l\xEDmite de volumen de la cuenta puede descartar parte de los eventos.",
1091
+ subscribable: true,
1092
+ example: {
1093
+ id: "evt_000000000000000000000017",
1094
+ type: "contact.updated",
1095
+ version: 1,
1096
+ occurred_at: "2026-10-01T12:00:00Z",
1097
+ data: {
1098
+ contact: {
1099
+ id: 2001,
1100
+ name: "Ana P\xE9rez",
1101
+ phone: "+5491100000000",
1102
+ email: "ana@example.com"
1103
+ },
1104
+ changed: [
1105
+ "email",
1106
+ "custom_fields"
1107
+ ],
1108
+ custom_fields: [
1229
1109
  {
1230
- key: "fecha_visita",
1231
- label: "Fecha de la visita",
1232
- value: "2026-10-15"
1110
+ id: 12,
1111
+ name: "Plan",
1112
+ value: "Pro"
1233
1113
  },
1234
1114
  {
1235
- key: "comentarios",
1236
- label: "Comentarios",
1115
+ id: 15,
1116
+ name: "Ciudad",
1237
1117
  value: null
1238
1118
  }
1239
1119
  ],
1120
+ workspace_id: 37
1121
+ }
1122
+ }
1123
+ },
1124
+ {
1125
+ type: "message.reaction_failed",
1126
+ area: "conversations",
1127
+ status: "active",
1128
+ description: "Una reacci\xF3n a un mensaje que se acept\xF3 no se pudo aplicar.\n\nSe emite cuando una reacci\xF3n a un mensaje (ponerla, reemplazarla o quitarla) que se acept\xF3 con `202` termina sin aplicarse, la haya pedido una clave o una persona del equipo desde el chat. Sale una sola vez por pedido: los reintentos internos del mismo pedido no generan otro evento. No se emite cuando la reacci\xF3n se aplic\xF3, cuando una reacci\xF3n m\xE1s nueva al mismo mensaje ya la reemplaz\xF3, ni cuando el mensaje ya no existe. `message_id` es el mensaje al que se reaccionaba (el mismo id de la ruta), `contact_id` el del contacto y `device_id` el n\xFAmero de tu cuenta por el que iba a salir (`null` si el mensaje ya no tiene n\xFAmero). `emoji` es el emoji pedido y `null` si el pedido era quitar la reacci\xF3n. `reason` es uno de `no_provider_uid`, `message_not_reactable`, `message_deleted`, `device_disconnected`, `provider_unsupported`, `window_expired`, `provider_rejected`, `insufficient_balance`, `payment_expired`. `requested_at` es el momento en que se acept\xF3 el pedido, en UTC y con microsegundos: sirve para relacionar el evento con la llamada que respondi\xF3 `202`. `occurred_at` es el momento en que Funnelchat decidi\xF3 el fallo, en UTC. Mientras tanto, `reactions` de `GET /contacts/{contact_id}/messages` queda como estaba.",
1129
+ subscribable: true,
1130
+ example: {
1131
+ id: "evt_000000000000000000000016",
1132
+ type: "message.reaction_failed",
1133
+ version: 1,
1134
+ occurred_at: "2026-10-01T12:00:00Z",
1135
+ data: {
1136
+ message_id: 1001,
1137
+ contact_id: 2001,
1138
+ device_id: 4521,
1139
+ emoji: "\u{1F44D}",
1140
+ reason: "provider_rejected",
1141
+ requested_at: "2026-10-01T11:59:58.123456Z",
1240
1142
  occurred_at: "2026-10-01T12:00:00Z",
1241
1143
  workspace_id: 37
1242
1144
  }
@@ -1246,26 +1148,24 @@ var catalog_default = {
1246
1148
  type: "group.created",
1247
1149
  area: "communities",
1248
1150
  status: "active",
1249
- is_critical: false,
1250
- label: "Grupo creado",
1251
- description: "Se cre\xF3 un grupo de una campa\xF1a.",
1151
+ description: "Se cre\xF3 o se import\xF3 un grupo dentro de una campa\xF1a de la cuenta.",
1252
1152
  subscribable: true,
1253
1153
  example: {
1254
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1154
+ id: "evt_00000000000000000000000000000001",
1255
1155
  type: "group.created",
1256
1156
  version: 1,
1257
1157
  occurred_at: "2026-10-01T12:00:00Z",
1258
1158
  data: {
1259
1159
  group: {
1260
- uid: "120363000000000000@g.us",
1160
+ uid: "120363000000000001@g.us",
1261
1161
  name: "Grupo de ejemplo",
1262
1162
  type: "group"
1263
1163
  },
1264
1164
  campaign: {
1265
- uuid: "xK9mQz",
1165
+ uuid: "00000000-0000-4000-8000-000000000001",
1266
1166
  name: "Campa\xF1a de ejemplo"
1267
1167
  },
1268
- source: "manual",
1168
+ source: "created",
1269
1169
  workspace_id: 37
1270
1170
  }
1271
1171
  }
@@ -1274,26 +1174,24 @@ var catalog_default = {
1274
1174
  type: "group.invite_link_down",
1275
1175
  area: "communities",
1276
1176
  status: "active",
1277
- is_critical: false,
1278
- label: "Link de invitaci\xF3n ca\xEDdo",
1279
- description: "El link de invitaci\xF3n de un grupo dej\xF3 de funcionar.",
1177
+ description: "El enlace de invitaci\xF3n de un grupo qued\xF3 confirmado ca\xEDdo (WhatsApp respondi\xF3 que no existe y la renovaci\xF3n no consigui\xF3 otro); no se publica por errores transitorios ni por grupos prohibidos o suspendidos, y se publica una sola vez por episodio de bloqueo.",
1280
1178
  subscribable: true,
1281
1179
  example: {
1282
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1180
+ id: "evt_0000000000000000000000000000000d",
1283
1181
  type: "group.invite_link_down",
1284
1182
  version: 1,
1285
1183
  occurred_at: "2026-10-01T12:00:00Z",
1286
1184
  data: {
1287
1185
  group: {
1288
- uid: "120363000000000000@g.us",
1186
+ uid: "120363000000000001@g.us",
1289
1187
  name: "Grupo de ejemplo",
1290
1188
  type: "group"
1291
1189
  },
1292
1190
  campaign: {
1293
- uuid: "xK9mQz",
1191
+ uuid: "00000000-0000-4000-8000-000000000001",
1294
1192
  name: "Campa\xF1a de ejemplo"
1295
1193
  },
1296
- reason: "link_revoked",
1194
+ reason: "http_404",
1297
1195
  renewal_attempted: true,
1298
1196
  workspace_id: 37
1299
1197
  }
@@ -1303,29 +1201,27 @@ var catalog_default = {
1303
1201
  type: "group.invite_link_renewed",
1304
1202
  area: "communities",
1305
1203
  status: "active",
1306
- is_critical: false,
1307
- label: "Link de invitaci\xF3n renovado",
1308
- description: "Se renov\xF3 el link de invitaci\xF3n de un grupo.",
1204
+ description: "El enlace de invitaci\xF3n de un grupo cambi\xF3 por una renovaci\xF3n, autom\xE1tica al detectarse inv\xE1lido o pedida por el usuario; no se publican los cambios que detecta la sincronizaci\xF3n ni el enlace inicial al crear el grupo.",
1309
1205
  subscribable: true,
1310
1206
  example: {
1311
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1207
+ id: "evt_0000000000000000000000000000000c",
1312
1208
  type: "group.invite_link_renewed",
1313
1209
  version: 1,
1314
1210
  occurred_at: "2026-10-01T12:00:00Z",
1315
1211
  data: {
1316
1212
  group: {
1317
- uid: "120363000000000000@g.us",
1213
+ uid: "120363000000000001@g.us",
1318
1214
  name: "Grupo de ejemplo",
1319
1215
  type: "group"
1320
1216
  },
1321
1217
  campaign: {
1322
- uuid: "xK9mQz",
1218
+ uuid: "00000000-0000-4000-8000-000000000001",
1323
1219
  name: "Campa\xF1a de ejemplo"
1324
1220
  },
1325
- invite_link: "https://chat.whatsapp.com/EJEMPLO01",
1326
- previous_invite_link: "https://chat.whatsapp.com/EJEMPLO00",
1221
+ invite_link: "https://chat.whatsapp.com/EjemploNuevo0000000000001",
1222
+ previous_invite_link: "https://chat.whatsapp.com/EjemploAnterior000000000001",
1327
1223
  trigger: "automatic",
1328
- recovered: true,
1224
+ recovered: false,
1329
1225
  workspace_id: 37
1330
1226
  }
1331
1227
  }
@@ -1334,27 +1230,23 @@ var catalog_default = {
1334
1230
  type: "group_participant.joined",
1335
1231
  area: "communities",
1336
1232
  status: "active",
1337
- is_critical: false,
1338
- label: "Participante se uni\xF3",
1339
- description: "Una persona entr\xF3 a un grupo.",
1233
+ description: "A person joined one of the account's groups.",
1340
1234
  subscribable: true,
1341
1235
  example: {
1342
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1236
+ id: "evt_00000000000000000000000000000002",
1343
1237
  type: "group_participant.joined",
1344
1238
  version: 1,
1345
1239
  occurred_at: "2026-10-01T12:00:00Z",
1346
1240
  data: {
1347
1241
  group: {
1348
- uid: "120363000000000000@g.us",
1349
- name: "Grupo de ejemplo"
1350
- },
1351
- campaign: {
1352
- uuid: "xK9mQz"
1242
+ uid: "120363000000000001@g.us",
1243
+ name: "Example group"
1353
1244
  },
1245
+ campaign: null,
1354
1246
  participant: {
1355
1247
  identity: "5491100000000",
1356
1248
  identity_type: "phone",
1357
- name: "Ana Ejemplo"
1249
+ name: "Ana"
1358
1250
  },
1359
1251
  workspace_id: 37
1360
1252
  }
@@ -1364,27 +1256,23 @@ var catalog_default = {
1364
1256
  type: "group_participant.left",
1365
1257
  area: "communities",
1366
1258
  status: "active",
1367
- is_critical: false,
1368
- label: "Participante sali\xF3",
1369
- description: "Una persona sali\xF3 de un grupo.",
1259
+ description: "A person left one of the account's groups.",
1370
1260
  subscribable: true,
1371
1261
  example: {
1372
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1262
+ id: "evt_00000000000000000000000000000003",
1373
1263
  type: "group_participant.left",
1374
1264
  version: 1,
1375
1265
  occurred_at: "2026-10-01T12:00:00Z",
1376
1266
  data: {
1377
1267
  group: {
1378
- uid: "120363000000000000@g.us",
1379
- name: "Grupo de ejemplo"
1380
- },
1381
- campaign: {
1382
- uuid: "xK9mQz"
1268
+ uid: "120363000000000001@g.us",
1269
+ name: "Example group"
1383
1270
  },
1271
+ campaign: null,
1384
1272
  participant: {
1385
1273
  identity: "5491100000000",
1386
1274
  identity_type: "phone",
1387
- name: "Ana Ejemplo"
1275
+ name: "Ana"
1388
1276
  },
1389
1277
  workspace_id: 37
1390
1278
  }
@@ -1394,26 +1282,24 @@ var catalog_default = {
1394
1282
  type: "scheduled_message.group_delivery_failed",
1395
1283
  area: "communities",
1396
1284
  status: "active",
1397
- is_critical: false,
1398
- label: "Mensaje programado no entregado a un grupo",
1399
- description: "Un mensaje programado no pudo entregarse a un grupo. Reemplaza la alerta \xABmensaje fallido\xBB de las campa\xF1as y avisa en m\xE1s casos.",
1285
+ description: "Un env\xEDo programado fall\xF3 en un grupo concreto, con el motivo desagregado.",
1400
1286
  subscribable: true,
1401
1287
  example: {
1402
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1288
+ id: "evt_00000000000000000000000000000007",
1403
1289
  type: "scheduled_message.group_delivery_failed",
1404
1290
  version: 1,
1405
1291
  occurred_at: "2026-10-01T12:00:00Z",
1406
1292
  data: {
1407
1293
  scheduled_message: {
1408
- uuid: "mP4wRt"
1294
+ uuid: "00000000-0000-4000-8000-000000000007"
1409
1295
  },
1410
1296
  group: {
1411
- uid: "120363000000000000@g.us",
1297
+ uid: "120363000000000001@g.us",
1412
1298
  name: "Grupo de ejemplo"
1413
1299
  },
1414
- reason: "send_failed",
1300
+ reason: "device_disconnected",
1415
1301
  partial: false,
1416
- occurrence: "2026-10-01T12:00:00Z",
1302
+ occurrence: 1,
1417
1303
  workspace_id: 37
1418
1304
  }
1419
1305
  }
@@ -1422,31 +1308,31 @@ var catalog_default = {
1422
1308
  type: "scheduled_message.response_received",
1423
1309
  area: "communities",
1424
1310
  status: "active",
1425
- is_critical: false,
1426
- label: "Respuesta a un mensaje programado",
1427
- description: "Se recibi\xF3 una respuesta a un mensaje programado.",
1311
+ description: "Alguien respondi\xF3 a un env\xEDo programado votando una encuesta o respondiendo a un evento.",
1428
1312
  subscribable: true,
1429
1313
  example: {
1430
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1314
+ id: "evt_00000000000000000000000000000008",
1431
1315
  type: "scheduled_message.response_received",
1432
1316
  version: 1,
1433
1317
  occurred_at: "2026-10-01T12:00:00Z",
1434
1318
  data: {
1435
1319
  scheduled_message: {
1436
- uuid: "mP4wRt"
1320
+ uuid: "00000000-0000-4000-8000-000000000008"
1437
1321
  },
1438
1322
  group: {
1439
- uid: "120363000000000000@g.us"
1323
+ uid: "120363000000000001@g.us"
1440
1324
  },
1441
1325
  participant: {
1442
- identity: "5491100000000",
1326
+ identity: "+5491100000000",
1443
1327
  identity_type: "phone",
1444
- name: "Ana Ejemplo"
1328
+ name: "Ana P\xE9rez"
1445
1329
  },
1446
1330
  response: {
1447
- type: "rsvp",
1448
- options: [],
1449
- rsvp: "yes"
1331
+ type: "poll",
1332
+ options: [
1333
+ "Opci\xF3n A"
1334
+ ],
1335
+ rsvp: null
1450
1336
  },
1451
1337
  workspace_id: 37
1452
1338
  }
@@ -1456,29 +1342,27 @@ var catalog_default = {
1456
1342
  type: "poll.voted",
1457
1343
  area: "communities",
1458
1344
  status: "active",
1459
- is_critical: false,
1460
- label: "Voto en una encuesta",
1461
- description: "Alguien vot\xF3 en una encuesta enviada a un grupo.",
1345
+ description: "Un participante vot\xF3 en una encuesta enviada a un grupo, o cambi\xF3 su voto.",
1462
1346
  subscribable: true,
1463
1347
  example: {
1464
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1348
+ id: "evt_0000000000000000000000000000000b",
1465
1349
  type: "poll.voted",
1466
1350
  version: 1,
1467
1351
  occurred_at: "2026-10-01T12:00:00Z",
1468
1352
  data: {
1469
1353
  poll: {
1470
- uid: "poll-ejemplo-01"
1354
+ uid: "3EB0000000000000000001"
1471
1355
  },
1472
1356
  group: {
1473
- uid: "120363000000000000@g.us"
1357
+ uid: "120363000000000001@g.us"
1474
1358
  },
1475
1359
  scheduled_message: {
1476
- uuid: "mP4wRt"
1360
+ uuid: "00000000-0000-4000-8000-000000000004"
1477
1361
  },
1478
1362
  participant: {
1479
- identity: "5491100000000",
1363
+ identity: "+5491100000000",
1480
1364
  identity_type: "phone",
1481
- name: "Ana Ejemplo"
1365
+ name: null
1482
1366
  },
1483
1367
  options: [
1484
1368
  "Opci\xF3n A"
@@ -1491,31 +1375,30 @@ var catalog_default = {
1491
1375
  type: "pipeline.finished",
1492
1376
  area: "communities",
1493
1377
  status: "active",
1494
- is_critical: false,
1495
- label: "Pipeline finalizado",
1496
- description: "Termin\xF3 la ejecuci\xF3n de un pipeline de una campa\xF1a.",
1378
+ 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.",
1497
1379
  subscribable: true,
1498
1380
  example: {
1499
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1381
+ id: "evt_0000000000000000000000000000000a",
1500
1382
  type: "pipeline.finished",
1501
1383
  version: 1,
1502
1384
  occurred_at: "2026-10-01T12:00:00Z",
1503
1385
  data: {
1504
1386
  campaign: {
1505
- uuid: "xK9mQz"
1387
+ uuid: "00000000-0000-4000-8000-00000000000a"
1506
1388
  },
1507
1389
  pipeline: {
1508
- uuid: "bN7vLs",
1390
+ uuid: "00000000-0000-4000-8000-00000000000b",
1509
1391
  name: "Pipeline de ejemplo"
1510
1392
  },
1511
1393
  outcome: "completed",
1512
1394
  actions: {
1513
1395
  total: 5,
1514
1396
  succeeded: 4,
1515
- failed: 1,
1516
- skipped: 0,
1397
+ failed: 0,
1398
+ skipped: 1,
1517
1399
  cancelled: 0
1518
1400
  },
1401
+ idempotency_key: "00000000-0000-4000-8000-00000000000d",
1519
1402
  workspace_id: 37
1520
1403
  }
1521
1404
  }
@@ -1524,24 +1407,22 @@ var catalog_default = {
1524
1407
  type: "group.blocked",
1525
1408
  area: "communities",
1526
1409
  status: "active",
1527
- is_critical: false,
1528
- label: "Grupo bloqueado",
1529
- description: "Un grupo de una campa\xF1a qued\xF3 bloqueado y no puede usarse.",
1410
+ description: "Un grupo qued\xF3 inoperable: sin administrador conectado, con el link de invitaci\xF3n inv\xE1lido o suspendido por WhatsApp.",
1530
1411
  subscribable: true,
1531
1412
  example: {
1532
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1413
+ id: "evt_00000000000000000000000000000005",
1533
1414
  type: "group.blocked",
1534
1415
  version: 1,
1535
1416
  occurred_at: "2026-10-01T12:00:00Z",
1536
1417
  data: {
1537
1418
  group: {
1538
- uid: "120363000000000000@g.us",
1419
+ uid: "120363000000000001@g.us",
1539
1420
  name: "Grupo de ejemplo"
1540
1421
  },
1541
1422
  campaign: {
1542
- uuid: "xK9mQz"
1423
+ uuid: "00000000-0000-4000-8000-000000000001"
1543
1424
  },
1544
- reason: "whatsapp_restriction",
1425
+ reason: "admin_access_lost",
1545
1426
  workspace_id: 37
1546
1427
  }
1547
1428
  }
@@ -1550,24 +1431,22 @@ var catalog_default = {
1550
1431
  type: "group.recovered",
1551
1432
  area: "communities",
1552
1433
  status: "active",
1553
- is_critical: false,
1554
- label: "Grupo recuperado",
1555
- description: "Un grupo que estaba bloqueado volvi\xF3 a estar disponible.",
1434
+ description: "Un grupo que estaba bloqueado volvi\xF3 a operar.",
1556
1435
  subscribable: true,
1557
1436
  example: {
1558
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1437
+ id: "evt_00000000000000000000000000000006",
1559
1438
  type: "group.recovered",
1560
1439
  version: 1,
1561
1440
  occurred_at: "2026-10-01T12:00:00Z",
1562
1441
  data: {
1563
1442
  group: {
1564
- uid: "120363000000000000@g.us",
1443
+ uid: "120363000000000001@g.us",
1565
1444
  name: "Grupo de ejemplo"
1566
1445
  },
1567
1446
  campaign: {
1568
- uuid: "xK9mQz"
1447
+ uuid: "00000000-0000-4000-8000-000000000001"
1569
1448
  },
1570
- reason: "restriction_lifted",
1449
+ reason: "access_restored",
1571
1450
  workspace_id: 37
1572
1451
  }
1573
1452
  }
@@ -1576,18 +1455,16 @@ var catalog_default = {
1576
1455
  type: "campaign.status_changed",
1577
1456
  area: "communities",
1578
1457
  status: "active",
1579
- is_critical: false,
1580
- label: "Cambio de estado de campa\xF1a",
1581
- description: "Una campa\xF1a cambi\xF3 de estado.",
1458
+ description: "Una campa\xF1a se activ\xF3 o se paus\xF3.",
1582
1459
  subscribable: true,
1583
1460
  example: {
1584
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1461
+ id: "evt_00000000000000000000000000000009",
1585
1462
  type: "campaign.status_changed",
1586
1463
  version: 1,
1587
1464
  occurred_at: "2026-10-01T12:00:00Z",
1588
1465
  data: {
1589
1466
  campaign: {
1590
- uuid: "xK9mQz",
1467
+ uuid: "00000000-0000-4000-8000-000000000009",
1591
1468
  name: "Campa\xF1a de ejemplo"
1592
1469
  },
1593
1470
  from: "active",
@@ -1600,27 +1477,25 @@ var catalog_default = {
1600
1477
  type: "scheduled_message.finished",
1601
1478
  area: "communities",
1602
1479
  status: "active",
1603
- is_critical: false,
1604
- label: "Mensaje programado finalizado",
1605
- description: "Termin\xF3 el env\xEDo de un mensaje programado a sus grupos, con su resultado y el conteo de grupos con fallas.",
1480
+ description: "Un env\xEDo programado termin\xF3, con su resultado agregado.",
1606
1481
  subscribable: true,
1607
1482
  example: {
1608
- id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
1483
+ id: "evt_00000000000000000000000000000004",
1609
1484
  type: "scheduled_message.finished",
1610
1485
  version: 1,
1611
1486
  occurred_at: "2026-10-01T12:00:00Z",
1612
1487
  data: {
1613
1488
  scheduled_message: {
1614
- uuid: "mP4wRt",
1615
- name: "Mensaje de ejemplo"
1489
+ uuid: "00000000-0000-4000-8000-000000000004",
1490
+ name: "Env\xEDo de ejemplo"
1616
1491
  },
1617
- outcome: "completed",
1492
+ outcome: "partially_failed",
1618
1493
  groups: {
1619
1494
  total: 10,
1620
1495
  failed: 1,
1621
1496
  partially_failed: 2
1622
1497
  },
1623
- occurrence: "2026-10-01T12:00:00Z",
1498
+ occurrence: 1,
1624
1499
  workspace_id: 37
1625
1500
  }
1626
1501
  }
@@ -1629,9 +1504,7 @@ var catalog_default = {
1629
1504
  type: "group_action.failed",
1630
1505
  area: "communities",
1631
1506
  status: "active",
1632
- is_critical: false,
1633
- label: "Acci\xF3n sobre un grupo fallida",
1634
- description: "Una acci\xF3n sobre un grupo fall\xF3 entera (si termin\xF3 con resultados por persona, llega `group_action.completed`). Si la pidi\xF3 la API, `action.uuid` es el mismo `action_id` que devolvi\xF3 al pedirla y `pipeline` viene `null`. Si la ejecut\xF3 una campa\xF1a o un pipeline, `action.uuid` viene `null`, y `pipeline` trae ese pipeline (`uuid` y `name`) o viene `null` fuera de un pipeline. `reason` es el motivo de la falla. `group` y `campaign` pueden venir `null`.",
1507
+ description: "An action on a group of a campaign failed.",
1635
1508
  subscribable: true,
1636
1509
  example: {
1637
1510
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -1639,20 +1512,17 @@ var catalog_default = {
1639
1512
  version: 1,
1640
1513
  occurred_at: "2026-10-01T12:00:00Z",
1641
1514
  data: {
1642
- campaign: {
1643
- uuid: "xK9mQz",
1644
- name: "Campa\xF1a de ejemplo"
1645
- },
1515
+ campaign: null,
1646
1516
  pipeline: null,
1647
1517
  group: {
1648
- uid: "120363000000000000@g.us",
1649
- name: "Grupo de ejemplo"
1518
+ uid: "120363000000000001@g.us",
1519
+ name: "Example group"
1650
1520
  },
1651
1521
  action: {
1652
- uuid: "00000000-0000-4000-8000-000000000001",
1653
- type: "add_participants"
1522
+ uuid: "9b2f0a8e-1c3d-4e5f-8a7b-6c5d4e3f2a10",
1523
+ type: "update_name"
1654
1524
  },
1655
- reason: "motivo_de_ejemplo",
1525
+ reason: "device_not_group_admin",
1656
1526
  workspace_id: 37
1657
1527
  }
1658
1528
  }
@@ -1661,8 +1531,6 @@ var catalog_default = {
1661
1531
  type: "daily_report.generated",
1662
1532
  area: "communities",
1663
1533
  status: "active",
1664
- is_critical: false,
1665
- label: "Reporte diario generado",
1666
1534
  description: "Se gener\xF3 el reporte diario de la cuenta (clics, ingresos y salidas).",
1667
1535
  subscribable: true,
1668
1536
  example: {
@@ -1687,8 +1555,6 @@ var catalog_default = {
1687
1555
  type: "campaign.no_groups_available",
1688
1556
  area: "communities",
1689
1557
  status: "active",
1690
- is_critical: false,
1691
- label: "Campa\xF1a sin grupos disponibles",
1692
1558
  description: "Una campa\xF1a no tiene grupos a los que dirigir a las personas que entran por su link.",
1693
1559
  subscribable: true,
1694
1560
  example: {
@@ -1710,8 +1576,6 @@ var catalog_default = {
1710
1576
  type: "group.full",
1711
1577
  area: "communities",
1712
1578
  status: "active",
1713
- is_critical: false,
1714
- label: "Grupo lleno",
1715
1579
  description: "Un grupo pas\xF3 de no estar lleno a estarlo.",
1716
1580
  subscribable: true,
1717
1581
  example: {
@@ -1739,9 +1603,7 @@ var catalog_default = {
1739
1603
  type: "group_action.completed",
1740
1604
  area: "communities",
1741
1605
  status: "active",
1742
- is_critical: false,
1743
- label: "Acci\xF3n sobre un grupo completada",
1744
- description: "Termin\xF3 una acci\xF3n sobre un grupo. `action.uuid` es el mismo `action_id` que devolvi\xF3 la API al pedirla, y `action.type` dice qu\xE9 acci\xF3n fue. `result` depende del tipo de acci\xF3n: en las que reciben una lista de tel\xE9fonos (agregar o quitar participantes, nombrar o quitar administradores) trae `participants`, con el resultado por persona: `identity`, `identity_type`, `status` (`added`, `removed`, `promoted` o `demoted` seg\xFAn la acci\xF3n, o `failed`) y `reason`, que es `null` salvo cuando `status` es `failed`; al crear un grupo o renovar su link de invitaci\xF3n trae `invite_link`; al enviar un mensaje trae `message.uid`; en las dem\xE1s (cambiar el nombre, la descripci\xF3n, la foto o los ajustes) viene como objeto vac\xEDo (`{}`). `group` y `campaign` pueden venir `null`.",
1606
+ 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.",
1745
1607
  subscribable: true,
1746
1608
  example: {
1747
1609
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -1750,26 +1612,18 @@ var catalog_default = {
1750
1612
  occurred_at: "2026-10-01T12:00:00Z",
1751
1613
  data: {
1752
1614
  action: {
1753
- uuid: "00000000-0000-4000-8000-000000000001",
1754
- type: "add_participants"
1615
+ uuid: "9b2f0a8e-1c3d-4e5f-8a7b-6c5d4e3f2a10",
1616
+ type: "send_message"
1755
1617
  },
1756
1618
  group: {
1757
- uid: "120363000000000000@g.us",
1758
- name: "Grupo de ejemplo"
1759
- },
1760
- campaign: {
1761
- uuid: "xK9mQz",
1762
- name: "Campa\xF1a de ejemplo"
1619
+ uid: "120363000000000001@g.us",
1620
+ name: "Example group"
1763
1621
  },
1622
+ campaign: null,
1764
1623
  result: {
1765
- participants: [
1766
- {
1767
- identity: "5491100000000",
1768
- identity_type: "phone",
1769
- status: "added",
1770
- reason: null
1771
- }
1772
- ]
1624
+ message: {
1625
+ uid: "3EB0C767D26A1D4E5F6A"
1626
+ }
1773
1627
  },
1774
1628
  workspace_id: 37
1775
1629
  }
@@ -1779,9 +1633,7 @@ var catalog_default = {
1779
1633
  type: "group.message_received",
1780
1634
  area: "communities",
1781
1635
  status: "active",
1782
- is_critical: false,
1783
- label: "Mensaje recibido en un grupo",
1784
- description: "Una persona escribi\xF3 un mensaje en un grupo.",
1636
+ description: "Someone wrote in a group of one of your numbers. Not emitted for the messages of your own numbers.",
1785
1637
  subscribable: true,
1786
1638
  example: {
1787
1639
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -1790,18 +1642,23 @@ var catalog_default = {
1790
1642
  occurred_at: "2026-10-01T12:00:00Z",
1791
1643
  data: {
1792
1644
  group: {
1793
- uid: "120363000000000000@g.us",
1794
- name: "Grupo de ejemplo"
1645
+ uid: "120363000000000001@g.us",
1646
+ name: "Example group"
1647
+ },
1648
+ message: {
1649
+ uid: "3EB0C0FFEE0000000001",
1650
+ type: "text",
1651
+ text: "Hello everyone",
1652
+ caption: null,
1653
+ media_url: null,
1654
+ mime_type: null,
1655
+ file_name: null,
1656
+ quoted_uid: null
1795
1657
  },
1796
1658
  participant: {
1797
1659
  identity: "5491100000000",
1798
1660
  identity_type: "phone",
1799
- name: "Ana Ejemplo"
1800
- },
1801
- message: {
1802
- id: "msg-ejemplo-01",
1803
- type: "text",
1804
- text: "Hola a todos"
1661
+ name: null
1805
1662
  },
1806
1663
  workspace_id: 37
1807
1664
  }
@@ -1811,9 +1668,7 @@ var catalog_default = {
1811
1668
  type: "group.reaction_added",
1812
1669
  area: "communities",
1813
1670
  status: "active",
1814
- is_critical: false,
1815
- label: "Reacci\xF3n en un grupo",
1816
- description: "Una persona reaccion\xF3 a un mensaje de un grupo.",
1671
+ description: "Someone reacted to a message of a group.",
1817
1672
  subscribable: true,
1818
1673
  example: {
1819
1674
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -1822,16 +1677,16 @@ var catalog_default = {
1822
1677
  occurred_at: "2026-10-01T12:00:00Z",
1823
1678
  data: {
1824
1679
  group: {
1825
- uid: "120363000000000000@g.us",
1826
- name: "Grupo de ejemplo"
1680
+ uid: "120363000000000001@g.us",
1681
+ name: "Example group"
1682
+ },
1683
+ message: {
1684
+ uid: "3EB0C0FFEE0000000001"
1827
1685
  },
1828
1686
  participant: {
1829
1687
  identity: "5491100000000",
1830
1688
  identity_type: "phone",
1831
- name: "Ana Ejemplo"
1832
- },
1833
- message: {
1834
- id: "msg-ejemplo-01"
1689
+ name: null
1835
1690
  },
1836
1691
  reaction: "\u{1F44D}",
1837
1692
  workspace_id: 37
@@ -1842,9 +1697,7 @@ var catalog_default = {
1842
1697
  type: "group_join_request.created",
1843
1698
  area: "communities",
1844
1699
  status: "active",
1845
- is_critical: false,
1846
- label: "Solicitud para unirse a un grupo",
1847
- description: 'Una persona pidi\xF3 unirse a un grupo oficial que pide aprobaci\xF3n para entrar, y su solicitud qued\xF3 pendiente. Si el grupo es de una campa\xF1a, tambi\xE9n llega a las suscripciones filtradas por esa campa\xF1a. Se aprueba o rechaza por API con el tel\xE9fono de la persona, cuando el n\xFAmero anuncia `groups.join_requests` en `"list_and_decide"`; el resultado por persona llega en `group_action.completed`.',
1700
+ description: "Someone asked to join a group that requires approval.",
1848
1701
  subscribable: true,
1849
1702
  example: {
1850
1703
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -1853,13 +1706,13 @@ var catalog_default = {
1853
1706
  occurred_at: "2026-10-01T12:00:00Z",
1854
1707
  data: {
1855
1708
  group: {
1856
- uid: "120363000000000000@g.us",
1857
- name: "Grupo de ejemplo"
1709
+ uid: "120363000000000001@g.us",
1710
+ name: "Example group"
1858
1711
  },
1859
1712
  participant: {
1860
1713
  identity: "5491100000000",
1861
1714
  identity_type: "phone",
1862
- name: "Ana Ejemplo"
1715
+ name: null
1863
1716
  },
1864
1717
  workspace_id: 37
1865
1718
  }
@@ -1869,9 +1722,7 @@ var catalog_default = {
1869
1722
  type: "group_join_request.revoked",
1870
1723
  area: "communities",
1871
1724
  status: "active",
1872
- is_critical: false,
1873
- label: "Solicitud para unirse retirada",
1874
- description: "Una persona retir\xF3 su solicitud pendiente para unirse a un grupo antes de que se aprobara o rechazara. Trae los mismos campos que `group_join_request.created`.",
1725
+ description: "Someone withdrew their request to join a group.",
1875
1726
  subscribable: true,
1876
1727
  example: {
1877
1728
  id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
@@ -1880,17 +1731,35 @@ var catalog_default = {
1880
1731
  occurred_at: "2026-10-01T12:00:00Z",
1881
1732
  data: {
1882
1733
  group: {
1883
- uid: "120363000000000000@g.us",
1884
- name: "Grupo de ejemplo"
1734
+ uid: "120363000000000001@g.us",
1735
+ name: "Example group"
1885
1736
  },
1886
1737
  participant: {
1887
1738
  identity: "5491100000000",
1888
1739
  identity_type: "phone",
1889
- name: "Ana Ejemplo"
1740
+ name: null
1890
1741
  },
1891
1742
  workspace_id: 37
1892
1743
  }
1893
1744
  }
1745
+ },
1746
+ {
1747
+ type: "webhook.test",
1748
+ area: "accounts",
1749
+ status: "active",
1750
+ description: "Evento de prueba enviado desde la ruta de prueba de una suscripci\xF3n.",
1751
+ subscribable: false,
1752
+ example: {
1753
+ id: "evt_000000000000000000000002",
1754
+ type: "webhook.test",
1755
+ version: 1,
1756
+ occurred_at: "2026-10-01T12:00:00Z",
1757
+ data: {
1758
+ subscription: "00000000-0000-4000-8000-000000000001",
1759
+ sent_at: "2026-10-01T12:00:00Z",
1760
+ workspace_id: 37
1761
+ }
1762
+ }
1894
1763
  }
1895
1764
  ]
1896
1765
  };
@@ -35616,6 +35485,24 @@ var openapi_default = {
35616
35485
  ]
35617
35486
  }
35618
35487
  }
35488
+ },
35489
+ example: {
35490
+ id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
35491
+ type: "device.connected",
35492
+ version: 1,
35493
+ occurred_at: "2026-10-05T03:00:00Z",
35494
+ data: {
35495
+ device: {
35496
+ id: 4521,
35497
+ name: "Ventas",
35498
+ number: "5491100000000",
35499
+ connection: "qr",
35500
+ external_reference: "cliente-42"
35501
+ },
35502
+ connected_at: "2026-10-05T03:00:00+00:00",
35503
+ connect_link_id: 812,
35504
+ workspace_id: 37
35505
+ }
35619
35506
  }
35620
35507
  }
35621
35508
  }
@@ -35685,6 +35572,25 @@ var openapi_default = {
35685
35572
  ]
35686
35573
  }
35687
35574
  }
35575
+ },
35576
+ example: {
35577
+ id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
35578
+ type: "device.disconnected",
35579
+ version: 1,
35580
+ occurred_at: "2026-10-05T03:00:00Z",
35581
+ data: {
35582
+ device: {
35583
+ id: 4521,
35584
+ name: "Ventas",
35585
+ number: "5491100000000",
35586
+ connection: "qr",
35587
+ external_reference: "cliente-42"
35588
+ },
35589
+ disconnected_at: "2026-10-05T03:00:00+00:00",
35590
+ reason: "qr_logged_out",
35591
+ connect_link_id: 812,
35592
+ workspace_id: 37
35593
+ }
35688
35594
  }
35689
35595
  }
35690
35596
  }
@@ -36532,6 +36438,24 @@ var openapi_default = {
36532
36438
  ]
36533
36439
  }
36534
36440
  }
36441
+ },
36442
+ example: {
36443
+ id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
36444
+ type: "device.deleted",
36445
+ version: 1,
36446
+ occurred_at: "2026-10-05T03:00:00Z",
36447
+ data: {
36448
+ device: {
36449
+ id: 4521,
36450
+ name: "Ventas",
36451
+ number: "5491100000000",
36452
+ connection: "qr",
36453
+ external_reference: "cliente-42"
36454
+ },
36455
+ deleted_at: "2026-10-05T03:00:00+00:00",
36456
+ connect_link_id: 812,
36457
+ workspace_id: 37
36458
+ }
36535
36459
  }
36536
36460
  }
36537
36461
  }
@@ -36609,6 +36533,26 @@ var openapi_default = {
36609
36533
  ]
36610
36534
  }
36611
36535
  }
36536
+ },
36537
+ example: {
36538
+ id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
36539
+ type: "device.health_changed",
36540
+ version: 1,
36541
+ occurred_at: "2026-10-05T03:00:00Z",
36542
+ data: {
36543
+ device: {
36544
+ id: 4522,
36545
+ name: "Soporte",
36546
+ number: "5491100000000",
36547
+ connection: "dedicated",
36548
+ external_reference: "cliente-42"
36549
+ },
36550
+ previous_state: "available",
36551
+ state: "limited",
36552
+ changed_at: "2026-10-05T03:00:00+00:00",
36553
+ connect_link_id: null,
36554
+ workspace_id: 37
36555
+ }
36612
36556
  }
36613
36557
  }
36614
36558
  }
@@ -36674,6 +36618,26 @@ var openapi_default = {
36674
36618
  ]
36675
36619
  }
36676
36620
  }
36621
+ },
36622
+ example: {
36623
+ id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
36624
+ type: "device.quality_changed",
36625
+ version: 1,
36626
+ occurred_at: "2026-10-05T03:00:00Z",
36627
+ data: {
36628
+ device: {
36629
+ id: 4522,
36630
+ name: "Soporte",
36631
+ number: "5491100000000",
36632
+ connection: "dedicated",
36633
+ external_reference: "cliente-42"
36634
+ },
36635
+ previous: "GREEN",
36636
+ current: "YELLOW",
36637
+ changed_at: "2026-10-05T03:00:00+00:00",
36638
+ connect_link_id: null,
36639
+ workspace_id: 37
36640
+ }
36677
36641
  }
36678
36642
  }
36679
36643
  }
@@ -36739,6 +36703,26 @@ var openapi_default = {
36739
36703
  ]
36740
36704
  }
36741
36705
  }
36706
+ },
36707
+ example: {
36708
+ id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
36709
+ type: "device.messaging_limit_changed",
36710
+ version: 1,
36711
+ occurred_at: "2026-10-05T03:00:00Z",
36712
+ data: {
36713
+ device: {
36714
+ id: 4522,
36715
+ name: "Soporte",
36716
+ number: "5491100000000",
36717
+ connection: "dedicated",
36718
+ external_reference: "cliente-42"
36719
+ },
36720
+ previous: "TIER_1K",
36721
+ current: "TIER_10K",
36722
+ changed_at: "2026-10-05T03:00:00+00:00",
36723
+ connect_link_id: null,
36724
+ workspace_id: 37
36725
+ }
36742
36726
  }
36743
36727
  }
36744
36728
  }
@@ -36829,6 +36813,29 @@ var openapi_default = {
36829
36813
  ]
36830
36814
  }
36831
36815
  }
36816
+ },
36817
+ example: {
36818
+ id: "evt_0f8e4b526c1d4c7a9a3e2b5d",
36819
+ type: "device.display_name_reviewed",
36820
+ version: 1,
36821
+ occurred_at: "2026-10-05T03:00:00Z",
36822
+ data: {
36823
+ device: {
36824
+ id: 4522,
36825
+ name: "Soporte",
36826
+ number: "5491100000000",
36827
+ connection: "dedicated",
36828
+ external_reference: "cliente-42"
36829
+ },
36830
+ decision: "approved",
36831
+ previous_status: "PENDING_REVIEW",
36832
+ status: "APPROVED",
36833
+ verified_name: "Soporte Lucky Shrub",
36834
+ rejection_reason: null,
36835
+ reviewed_at: "2026-10-05T03:00:00+00:00",
36836
+ connect_link_id: null,
36837
+ workspace_id: 37
36838
+ }
36832
36839
  }
36833
36840
  }
36834
36841
  }
@@ -37355,33 +37362,41 @@ var openapi_default = {
37355
37362
  description: "The id of the message in the history of the contact."
37356
37363
  },
37357
37364
  type: {
37358
- type: "string",
37359
- enum: [
37360
- "text",
37361
- "image",
37362
- "video",
37363
- "document",
37364
- "sticker",
37365
- "contact",
37366
- "audio",
37367
- "note",
37368
- "action",
37369
- "invalid",
37370
- "interactive",
37371
- "location",
37372
- "voice_call",
37373
- "video_call",
37374
- "event",
37375
- "button",
37376
- "template",
37377
- "notification",
37378
- "option_list",
37379
- "template_button_reply",
37380
- "poll",
37381
- "whatsapp_form",
37382
- "call_permission_request",
37383
- "call_permission_reply",
37384
- "request_contact_info"
37365
+ description: "The known types; new ones may appear, so any other string is accepted too.",
37366
+ anyOf: [
37367
+ {
37368
+ type: "string",
37369
+ enum: [
37370
+ "text",
37371
+ "image",
37372
+ "video",
37373
+ "document",
37374
+ "sticker",
37375
+ "contact",
37376
+ "audio",
37377
+ "note",
37378
+ "action",
37379
+ "invalid",
37380
+ "interactive",
37381
+ "location",
37382
+ "voice_call",
37383
+ "video_call",
37384
+ "event",
37385
+ "button",
37386
+ "template",
37387
+ "notification",
37388
+ "option_list",
37389
+ "template_button_reply",
37390
+ "poll",
37391
+ "whatsapp_form",
37392
+ "call_permission_request",
37393
+ "call_permission_reply",
37394
+ "request_contact_info"
37395
+ ]
37396
+ },
37397
+ {
37398
+ type: "string"
37399
+ }
37385
37400
  ]
37386
37401
  },
37387
37402
  text: {
@@ -37641,6 +37656,27 @@ var openapi_default = {
37641
37656
  ]
37642
37657
  }
37643
37658
  }
37659
+ },
37660
+ example: {
37661
+ id: "evt_000000000000000000000014",
37662
+ type: "message.status_changed",
37663
+ version: 1,
37664
+ occurred_at: "2026-10-01T12:00:00Z",
37665
+ data: {
37666
+ message_id: 1001,
37667
+ contact_id: 2001,
37668
+ device_id: 4521,
37669
+ status: "failed",
37670
+ previous_status: "sent",
37671
+ error: {
37672
+ code: 131047,
37673
+ title: "Re-engagement message",
37674
+ reason: null
37675
+ },
37676
+ occurred_at: "2026-10-01T12:00:00Z",
37677
+ client_reference: "pedido-1001",
37678
+ workspace_id: 37
37679
+ }
37644
37680
  }
37645
37681
  }
37646
37682
  }
@@ -37710,10 +37746,8 @@ var openapi_default = {
37710
37746
  type: "string"
37711
37747
  },
37712
37748
  label: {
37713
- type: [
37714
- "string",
37715
- "null"
37716
- ]
37749
+ type: "string",
37750
+ description: "The question's label, or its name when it has none."
37717
37751
  },
37718
37752
  value: {
37719
37753
  anyOf: [
@@ -48432,8 +48466,8 @@ var openapi_default = {
48432
48466
  generated_by: "scripts/generate.mjs",
48433
48467
  note: "GENERATED: do not edit it. The portal's snapshot plus the pending layers.",
48434
48468
  inputs: {
48435
- "spec/funnelchat.json": "a7b480743848dabccbea2a1f2314263ca070316eeed97aab4a6f09f171c80e5a",
48436
- "spec/pending.json": "39662e350155b12b96099a495993f3d243e9098e575a65c914432f224b1c002e",
48469
+ "spec/funnelchat.json": "37c54a5aad4cc467e088af50294012484692ef668714dcdd748babc7314b587f",
48470
+ "spec/pending.json": "dd7b8cf6e5be45ddf1c0c00a9f4480cceec11b364adec083bbf989fa11944d9d",
48437
48471
  "spec/pending-sandbox.json": "32bcbfef902fbabd57e1626f4d97e964b89f3c561c7b0f0e21531c8576019aaf"
48438
48472
  },
48439
48473
  snapshot_commit: null,
@@ -48948,16 +48982,6 @@ function exampleFor(schema, name = "") {
48948
48982
  }
48949
48983
 
48950
48984
  // src/webhooks/catalog.ts
48951
- var GROUP = { uid: "120363000000000000@g.us", name: "Grupo de ejemplo" };
48952
- var PARTICIPANT = { identity: "5491100000000", identity_type: "phone", name: "Ana Ejemplo" };
48953
- var EMITTED = {
48954
- "group.message_received": {
48955
- group: GROUP,
48956
- message: { uid: "msg-ejemplo-01", type: "text", text: "Hola a todos", caption: null, media_url: null, mime_type: null, file_name: null, quoted_uid: null },
48957
- participant: PARTICIPANT
48958
- },
48959
- "group.reaction_added": { group: GROUP, message: { uid: "msg-ejemplo-01" }, participant: PARTICIPANT, reaction: "\u{1F44D}" }
48960
- };
48961
48985
  var eventTypeOfKey = (key) => key.replace(/\s*\(.*\)\s*$/, "");
48962
48986
  function specData(type) {
48963
48987
  for (const [key, item] of Object.entries(spec.webhooks ?? {})) {
@@ -48977,7 +49001,7 @@ function isSubscribable(type) {
48977
49001
  return catalogEntry(type)?.subscribable === true;
48978
49002
  }
48979
49003
  function emittedData(entry) {
48980
- return structuredClone(EMITTED[entry.type] ?? entry.example?.data ?? specData(entry.type));
49004
+ return structuredClone(entry.example?.data ?? specData(entry.type));
48981
49005
  }
48982
49006
  function catalogResponse() {
48983
49007
  return {
@@ -49520,7 +49544,7 @@ function shapeOnlyAnswer(op) {
49520
49544
 
49521
49545
  // package.json
49522
49546
  var package_default = {
49523
- version: "0.4.0"};
49547
+ version: "0.5.0"};
49524
49548
 
49525
49549
  // src/version.ts
49526
49550
  var VERSION = package_default.version;
@@ -54038,5 +54062,5 @@ function createSandbox(options = {}) {
54038
54062
  }
54039
54063
 
54040
54064
  export { ConfigError, DEFAULT_CONFIG_FILE, DEFAULT_PORT, DELIVERY_HEADER, EDGE_ERRORS, EVENT_HEADER, FAILURE_REASONS, FORM_TEMPLATES, META_ERRORS, REJECTIONS, REQUEST_ID_HEADER, SEND_FILE_TYPES, SIGNATURE_HEADER, SIMULATED_HEADER, SUPPORTED_EXTENSIONS, VERSION, catalog, createSandbox, defaultConfig, mergeConfig, parseArgs, resolveConfig, signature };
54041
- //# sourceMappingURL=chunk-4WUZK3N2.js.map
54042
- //# sourceMappingURL=chunk-4WUZK3N2.js.map
54065
+ //# sourceMappingURL=chunk-67XBJEXM.js.map
54066
+ //# sourceMappingURL=chunk-67XBJEXM.js.map