Saltar al contenido

API Cloud (GROUPS)

La Groups API te permite gestionar grupos de WhatsApp para mensajería y colaboración.

Elegibilidad: la Groups API está abierta a todos los negocios con una Official Business Account (OBA).

Cómo funciona

Los grupos son una experiencia de solo invitación: los participantes se unen usando un enlace de invitación al grupo que les envías. Este enlace de invitación proporciona contexto sobre el grupo, ayudando al usuario a decidir si quiere unirse.

Datos rápidos

  • Máximo de participantes por grupo: 8
  • Tipos de mensaje soportados: texto, media, plantillas basadas en texto y plantillas basadas en media
  • Máximo de grupos por número de negocio: 10,000
  • Máximo de negocios Cloud API por grupo: 1

Analítica

Nota: las métricas de rendimiento no están disponibles para plantillas de mensaje usadas en grupos.

Crea plantillas nuevas específicamente para usar en grupos en lugar de reutilizar plantillas usadas para mensajería uno a uno.

Límites

Advertencia: para calificar para las funciones de grupos, tu negocio debe ser una Official Business Account (OBA).

Los grupos no están disponibles para:

La Calling API no está soportada en grupos.

Tipos de mensaje no soportados:

  • Calling
  • Mensajes que desaparecen
  • Ver una vez (view-once)
  • Autenticación (auth)
  • Mensajes de comercio (commerce)
  • Mensajes interactivos

Acciones no soportadas:

  • Ocultar la lista de participantes del grupo (admin)
  • Editar mensaje
  • Eliminar mensaje

Precios

La Groups API usa la tarificación por mensaje.

Aprende más sobre los precios de la Groups API aquí.

Comenzar

Los grupos son de solo invitación, lo que significa que los posibles participantes del grupo tienen, en última instancia, el control de si quieren unirse o no.

Cuando creas un grupo, se genera un enlace de invitación único que puedes compartir con los posibles participantes. Este enlace incluye información sobre el grupo, lo que permite a los usuarios tomar una decisión informada sobre si quieren unirse.

Cuando un usuario se une al grupo, se dispara un webhook, lo que indica que ahora eres elegible para enviar mensajes al grupo.

Prerrequisitos

Antes de comenzar con la Groups API, asegúrate de que:

  1. Tu número de negocio esté en uso con Cloud API (no con la app de WhatsApp Business).
  2. Tu servidor de webhooks esté configurado para usarse con Cloud API.
  3. Tu app esté suscrita a los siguientes campos de webhook de grupos:
    • group_lifecycle_update
    • group_participants_update
    • group_settings_update
    • group_status_update
  4. Tu app esté suscrita a la cuenta de WhatsApp Business de tu número de teléfono del negocio.
  5. Tu app tenga el permiso whatsapp_business_messaging para el número de negocio.

Paso 2: Crear un grupo

Usa el endpoint de Crear grupo para crear un grupo, proporcionando un asunto (subject) y una descripción opcional. Una vez creado el grupo correctamente, se devolverá un webhook group_lifecycle_update de creación exitosa de grupo. Este webhook incluirá un campo invite_link con el enlace de invitación que ahora puedes compartir con los posibles participantes.

Paso 3: Invitar usuarios de WhatsApp al grupo

3.1 Agregar una plantilla de enlace de invitación de grupo desde la Template Library a las plantillas de tu cuenta

  1. Navega a la Template Library.
  2. A la izquierda, haz clic en el menú desplegable Group invite link y luego marca la casilla Group invite upon request.
  3. Selecciona la plantilla que quieres usar, asígnale un nombre y haz clic en Submit.

3.2 Enviar el enlace de invitación a los posibles participantes del grupo

Una vez aprobada la plantilla, úsala para invitar miembros al grupo usando el enlace de invitación proporcionado en el webhook del Paso 2.

Puedes seguir las instrucciones de la referencia de envío de plantilla con enlace de invitación de grupo para enviar el enlace de invitación con la plantilla que acabas de agregar a tu cuenta.

3.3 Notificación de cuándo se unen los participantes al grupo

Cuando un participante se une, se dispara un webhook group_participants_update de unión de participante.

Paso 4: Enviar y recibir mensajes

Ahora puedes usar el endpoint de envío de mensajes de Cloud API para enviar mensajes al grupo.

Se dispararán webhooks de estado enviado, entregado y leído cuando haya actualizaciones en el grupo. Las respuestas de los participantes también dispararán webhooks.

Aprende más sobre cómo enviar y recibir mensajes de grupo

Funciones y referencia

Gestión de grupos

La Groups API te da funciones simples para controlar los grupos a lo largo de su ciclo de vida.

Cuando creas un nuevo grupo, se crea un enlace de invitación para invitar participantes al grupo. Como no puedes agregar participantes manualmente, simplemente envía un mensaje con tu enlace de invitación a los usuarios de WhatsApp a los que quieras invitar al grupo.

Endpoints de gestión de grupos del ISV (el componente resuelve el token y el número de teléfono desde el {did}):

OperaciónEndpoint del ISV
Crear grupoPOST /groups/{v}/{did}
Obtener grupos activosGET /groups/{v}/{did}
Obtener info del grupoGET /groups/{v}/{did}/{group_id}?fields=
Actualizar ajustes del grupoPOST /groups/{v}/{did}/{group_id}
Eliminar grupoDELETE /groups/{v}/{did}/{group_id}
Obtener solicitudes de uniónGET /groups/{v}/{did}/{group_id}/join_requests
Aprobar solicitudes de uniónPOST /groups/{v}/{did}/{group_id}/join_requests
Rechazar solicitudes de uniónDELETE /groups/{v}/{did}/{group_id}/join_requests
Obtener enlace de invitaciónGET /groups/{v}/{did}/{group_id}/invite_link
Restablecer enlace de invitaciónPOST /groups/{v}/{did}/{group_id}/invite_link
Eliminar participantesDELETE /groups/{v}/{did}/{group_id}/participants

Requisitos de los endpoints de grupos:

  • Todos los endpoints requieren autenticación (Bearer token) y validación de canal.
  • Se validan los campos requeridos (did, group_id, join_requests, participants) antes de cualquier llamada a Meta, devolviendo 400 si faltan.
  • Las solicitudes se reenvían a Meta sin cambios y se devuelve la respuesta de Meta tal cual.

Suscribirse a los webhooks de metadatos de grupos

Para recibir notificaciones por webhook sobre los metadatos de tus grupos, suscríbete a los siguientes campos:

  • group_lifecycle_update
  • group_participants_update
  • group_settings_update
  • group_status_update

Advertencia: para una referencia completa de los webhooks de la Groups API, visita la referencia de webhooks de Groups API.

Crear grupo

Usa este endpoint para crear un nuevo grupo y generar un enlace de invitación al grupo.

Una vez creado el grupo, recibirás un webhook con un parámetro invite_link que contiene un enlace de invitación para el grupo. Puedes enviar este enlace de invitación a los usuarios de WhatsApp interesados en unirse.

Opcionalmente, puedes crear un grupo que requiera aprobación de unión. Esto significa que si un usuario de WhatsApp quiere unirse a tu grupo, puedes aprobar o rechazar su solicitud.

Sintaxis de la solicitud

Crea un grupo con un enlace de invitación inicial:

POST /groups/{v}/{did}

Cuerpo de la solicitud
{
  "messaging_product": "whatsapp",
  "subject": "<GROUP_SUBJECT>",
  "description": "<GROUP_DESCRIPTION>",
  "join_approval_mode": "<JOIN_APPROVAL_MODE>"
}
Parámetros de la solicitud
PlaceholderDescripciónValor de ejemplo
<BUSINESS_PHONE_NUMBER_ID>

String
Requerido

ID del número de teléfono del negocio.
12784358810
<GROUP_SUBJECT>

String
Requerido

Asunto del grupo.

Máximo 128 caracteres. Se recortan los espacios en blanco.
New Purchase Inquiry
<GROUP_DESCRIPTION>

String
Opcional

Descripción del grupo.

Máximo 2048 caracteres.
Jim, an existing client, would like to learn about new car purchase options for current year models.
<JOIN_APPROVAL_MODE>

String
Opcional

Indica si los usuarios de WhatsApp que hacen clic en el enlace de invitación pueden unirse al grupo con o sin aprobación previa.

Valores posibles:

- approval_required — Indica que los usuarios de WhatsApp deben ser aprobados mediante una solicitud de unión antes de acceder al grupo.
- auto_approve — Indica que los usuarios de WhatsApp pueden unirse sin aprobación.

Si se omite, join_approval_mode se establece en auto_approve por defecto.
auto_approve
Webhooks

Se dispara un webhook group_lifecycle_update.

Grupos con solicitudes de unión

Puedes crear grupos que requieran aprobación de solicitud de unión. Una vez habilitado, los usuarios de WhatsApp que hagan clic en el enlace de invitación del grupo pueden enviar una solicitud para unirse, o cancelar una solicitud previa:

Cuando un usuario de WhatsApp se une al grupo mediante una solicitud de unión, se dispara un webhook group_participants_update de aceptación de solicitud de unión. También puedes obtener una lista de solicitudes de unión abiertas vía API. Usa el contenido del webhook o de la respuesta de la API para aprobar o rechazar solicitudes.

Obtener solicitudes de unión
Sintaxis de la solicitud

GET /groups/{v}/{did}/{group_id}/join_requests

Parámetros de la solicitud
PlaceholderDescripciónValor de ejemplo
<GROUP_ID>

String
Requerido.

ID del grupo.
Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD
Sintaxis de la respuesta

En caso de éxito:

{
  "data": [
    {
      "join_request_id": "<JOIN_REQUEST_ID>",
      "wa_id": "<WHATSAPP_USER_ID>",
      "creation_timestamp": "<JOIN_REQUEST_CREATION_TIMESTAMP">
    },
    //Additional join request objects would follow, if any
  ],
  "paging": {
    "cursors": {
      "before": "<BEFORE_CURSOR>",
      "after": "<AFTER_CURSOR>"
    }
  }
}
Parámetros de la respuesta
PlaceholderDescripciónValor de ejemplo
<JOIN_REQUEST_ID>

String
ID de la solicitud de unión.MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw
<WHATSAPP_USER_ID>

String
ID del usuario de WhatsApp.16505551234
<JOIN_REQUEST_CREATION_TIMESTAMP>

Entero
Timestamp Unix que indica cuándo se creó la solicitud de unión.1755548877
<BEFORE_CURSOR>

String
Cursor anterior. Consulta Resultados paginados.eyJvZAmZAzZAXQiOjAsInZAlcnNpb25JZACI6IjE3NTU1NTM3MDUxNzUwNTQ1MTAifQZDZD
<AFTER_CURSOR>

String
Cursor posterior. Consulta Resultados paginados.eyJvZAmZAzZAXQiOjAsInZAlcnNpb25JZACI6IjE3NTU1NTM3MDUxNzUwNTQ1MTAifQZDZD
Aprobar solicitudes de unión
Sintaxis de la solicitud

POST /groups/{v}/{did}/{group_id}/join_requests

Cuerpo de la solicitud
{
  "messaging_product": "whatsapp",
  "join_requests": [
    "<JOIN_REQUEST_ID>",
    // Additional join request IDs would go here, if approving in bulk
  ]
}
Parámetros de la solicitud
PlaceholderDescripciónValor de ejemplo
<GROUP_ID>

String
Requerido.

ID del grupo.
Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD
Sintaxis de la respuesta

En caso de éxito, la API responderá con el siguiente payload JSON, y los usuarios de WhatsApp cuyas solicitudes de unión fueron aprobadas podrán acceder al grupo al tocar el enlace de invitación.

{
  "messaging_product": "whatsapp",
  "approved_join_requests": [
    "<JOIN_REQUEST_ID>",
    // Additional join request IDs would go here, it approved in bulk
  ],

  //Only included if unable to approve one or more join requests

  "failed_join_requests": [
    {
      "join_request_id": "<JOIN_REQUEST_ID>",
      "errors": [
        {
          "code": "<ERROR_CODE>",
          "message": "<ERROR_MESSAGE>",
          "title": "<ERROR_TITLE>",
          "error_data": {
            "details": "<ERROR_DETAILS>"
          }
        }
      ]
    }
  ],
  "errors": [
    {
      "code": "<ERROR_CODE>",
      "message": "<ERROR_MESSAGE>",
      "title": "<ERROR_TITLE>",
      "error_data": {
        "details": "<ERROR_DETAILS>"
      }
    }
  ]
}
Parámetros de la respuesta
PlaceholderDescripciónValor de ejemplo
<JOIN_REQUEST_ID>

String
ID de la solicitud de unión aprobada, o ID de la solicitud fallida, si la solicitud no pudo aprobarse.MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw
<ERROR_CODE>

Entero
Código de error, si no se pudo aprobar.131203
<ERROR_MESSAGE>

String
Mensaje de error, si no se pudo aprobar.(#131203) Recipient has not accepted our new Terms of Service and Privacy Policy.
<ERROR_TITLE>

String
Título del error, si no se pudo aprobar.Unable to add participant to group
<ERROR_DETAILS>

String
Detalles del error, si no se pudo aprobar.Recipient has not accepted our new Terms of Service and Privacy Policy.
Webhook

Se dispara un webhook group_participants_update.

Ver el webhook de ejemplo “User accepts join request”

Rechazar solicitudes de unión
Sintaxis de la solicitud

DELETE /groups/{v}/{did}/{group_id}/join_requests

Cuerpo de la solicitud
{
  "messaging_product": "whatsapp",
  "join_requests": [
    "<JOIN_REQUEST_ID>",
    //Additional join request IDs would go here, it rejecting in bulk
  ]
}
Parámetros de la solicitud
PlaceholderDescripciónValor de ejemplo
<GROUP_ID>

String
Requerido.

ID del grupo.
Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD
<JOIN_REQUEST_ID>

String
Requerido.

ID de la solicitud de unión a rechazar.
MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw
Sintaxis de la respuesta

En caso de éxito, la API responderá con el siguiente payload JSON, y el usuario de WhatsApp volverá a ver el botón Request to join al acceder al enlace de invitación del grupo.

{
  "messaging_product": "whatsapp",
  "rejected_join_requests": [
    "<JOIN_REQUEST_ID>",
    //Additional join request IDs would go here, it rejecting in bulk
  ],

  //Only included if unable to reject one or more join requests
  "failed_join_requests": [
    {
      "join_request_id": "<JOIN_REQUEST_ID>",
      "errors": [
        {
          "code": "<ERROR_CODE>",
          "message": "<ERROR_MESSAGE>",
          "title": "<ERROR_TITLE>",
          "error_data": {
            "details": "<ERROR_DETAILS>"
          }
        }
      ]
    }
  ],
  "errors": [
    {
      "code": "<ERROR_CODE>",
      "message": "<ERROR_MESSAGE>",
      "title": "<ERROR_TITLE>",
      "error_data": {
        "details": "<ERROR_DETAILS>"
      }
    }
  ]
}
Parámetros de la respuesta
PlaceholderDescripciónValor de ejemplo
<JOIN_REQUEST_ID>

String
ID de la solicitud de unión rechazada, o ID de la solicitud fallida, si la solicitud no pudo rechazarse.MTY0NjcwNDM1OTU6MTIwMzYzNDA0Njk0MjMzODIw
<ERROR_CODE>

Entero
Código de error, si no se pudo rechazar.131203
<ERROR_MESSAGE>

String
Mensaje de error, si no se pudo rechazar.(#131203) Recipient has not accepted our new Terms of Service and Privacy Policy.
<ERROR_TITLE>

String
Título del error, si no se pudo rechazar.Unable to add participant to group
<ERROR_DETAILS>

String
Detalles del error, si no se pudo rechazar.Recipient has not accepted our new Terms of Service and Privacy Policy.
Webhook

Ninguno.

Obtener y restablecer el enlace de invitación del grupo

Advertencia: una vez que se restablece un enlace de invitación, todos los enlaces de invitación anteriores se vuelven inválidos.

Se genera un enlace de invitación para el grupo cuando el grupo se crea. Usa estos endpoints para obtener y restablecer los enlaces de invitación del grupo.

Para cada endpoint, necesitarás tu ID de grupo para obtener o restablecer un enlace del grupo correcto:

PlaceholderDescripciónValor de ejemplo
<GROUP_ID>

String
Requerido

El ID del grupo del que quieres obtener o restablecer un enlace de invitación.
Y2FwaV9ncm91cDoxOTUwNTU1MDA3OToxMjAzNjMzOTQzMjAdOTY0MTUZD
Obtener el enlace de invitación del grupo
Sintaxis de la solicitud

GET /groups/{v}/{did}/{group_id}/invite_link

Cuerpo de la respuesta
{
  "messaging_product": "whatsapp",
  "invite_link": "https://chat.whatsapp.com/<LINK_ID>"
}

Ten en cuenta que invite_link siempre comienza con el prefijo https://chat.whatsapp.com/. La única porción variable es <LINK_ID>.

Restablecer el enlace de invitación del grupo
Sintaxis de la solicitud

POST /groups/{v}/{did}/{group_id}/invite_link

Cuerpo de la solicitud
{
  "messaging_product": "whatsapp",
}
Cuerpo de la respuesta
{
  "messaging_product": "whatsapp",
  "invite_link": "https://chat.whatsapp.com/<LINK_ID>"
}

Enviar plantilla con enlace de invitación al grupo

La Template Library contiene una plantilla de mensaje de utilidad para enviar enlaces de invitación a grupos a usuarios de WhatsApp. Usa estas plantillas predefinidas para enviar invitaciones de grupo como mensajes de utilidad.

Advertencia: para mantener la plantilla con precio de utility, no puedes modificarla al copiarla de la template library a tu WABA.

Para enviar el mensaje de plantilla:

Paso 1. Agregar una plantilla de enlace de invitación de grupo desde la Template Library a las plantillas de tu cuenta

En WhatsApp Manager

  1. Navega a la Template Library.
  2. A la izquierda, haz clic en el menú desplegable Group invite link y luego marca la casilla Group invite upon request.
  3. Selecciona la plantilla que quieres usar, asígnale un nombre y haz clic en Submit.

Vía la API

Puedes consultar las bibliotecas de plantillas aplicables a enlaces de invitación de grupo usando la siguiente solicitud:

GET /message_template_library?category=utility&topic=group_invite_link&language=en

Lee más sobre cómo encontrar y agregar la plantilla a tu WABA vía la API

Nota: la aprobación de la plantilla puede tardar hasta 24 horas. Podrás enviar mensajes con esta plantilla después de su aprobación.

Paso 2. Enviar el mensaje de plantilla
  1. Envía la plantilla usando la sintaxis y el cuerpo de la solicitud de abajo, sustituyendo tu ID de grupo, el nombre que le diste a tu plantilla y otros valores aplicables.

Cuando proporcionas el ID de grupo en la solicitud a la API, este se traduce automáticamente al enlace de invitación correspondiente en la entrega del mensaje.

Sintaxis de la solicitud

POST /{v}/{did}/messages

Parámetros del endpoint
PlaceholderDescripciónValor de ejemplo
{v}

String
Versión de la API.v21.0
{did}

String
ID del número de teléfono del negocio (el componente resuelve el token y el número desde el did).12784358810
Cuerpo de la solicitud
curl --location 'https://channels.chattigo.com/bsp-cloud-chattigo-isv/{v}/{did}/messages' \
      --header 'Content-Type: application/json' \
      --header 'Authorization: Bearer <JWT>' \
      --data '{
        "messaging_product": "whatsapp",
        "to": "<WHATSAPP_USER_PHONE_NUMBER>",
        "type": "template",
        "template": {
          "name": "<TEMPLATE_NAME>",
          "language": {
            "code": "<TEMPLATE_LANGUAGE>"
          },
          "components": [
            {
              "type": "body",
              "parameters": [
                {
                  "type": "group_id",
                  "group_id": "<GROUP_ID>"
                },
                {
                  ...additional parameters
                }
              ]
            }
          ]
        }
      }'

Aprende más sobre la Template Library

Webhooks

Eliminar grupo

Este endpoint elimina el grupo y a todos los participantes, incluido el negocio. No se requiere cuerpo de solicitud.

Sintaxis de la solicitud

DELETE /groups/{v}/{did}/{group_id}

Propiedades de la solicitud
PlaceholderDescripciónValor de ejemplo
<GROUP_ID>

String
Requerido

El ID del grupo que quieres eliminar.
Y2FwaV9ncm91cDoxOTUwNTU1MDA3OToxMjAzNjMzOTQzMjAdOTY0MTUZD
Webhooks

Se dispara un webhook group_lifecycle_update.

Eliminar participantes del grupo

Usa este endpoint para eliminar participantes del grupo.

Nota: si un participante es eliminado de un grupo, ya no puede unirse al grupo mediante un enlace de invitación.

Sintaxis de la solicitud

DELETE /groups/{v}/{did}/{group_id}/participants

Cuerpo de la solicitud
{
  "messaging_product": "whatsapp",
  "participants": [
    { "user": "<WHATSAPP_USER_PHONE_NUMBER> or <WHATSAPP_USER_ID>" },
    { "user": "<WHATSAPP_USER_PHONE_NUMBER> or <WHATSAPP_USER_ID>"" },
    ...
  ]
}
Propiedades de la solicitud
PlaceholderDescripciónValor de ejemplo
"participants": []

Array
Opcional

Especifica un array de números de teléfono o IDs de WhatsApp de cuentas de WhatsApp. El número de teléfono del negocio usado para crear el grupo siempre se agrega al grupo como creador y administrador.

- Máximo 8 participantes.
- El array no puede estar vacío.
```
{ “user”: “+17865347866” },
{ “user”: “+7669992245” },

##### Webhooks

Se dispara un webhook `group_participants_update`.

- [Ver el webhook de ejemplo "Group participant leaves"](https://developers.facebook.com/documentation/business-messaging/whatsapp/groups/webhooks#delete-group-succeed)

#### Obtener info del grupo

Usa este endpoint para obtener metadatos de un solo grupo.

**Nota:** si no se especifican campos en los parámetros de consulta, solo se devolverán el ID del grupo y el messaging product.

##### Sintaxis de la solicitud

`GET /groups/{v}/{did}/{group_id}?fields=<FIELDS>`

##### Parámetros del endpoint

| Placeholder | Descripción | Valor de ejemplo |
| --- | --- | --- |
| `<GROUP_ID>`<br><br>_String_ | **Requerido**<br><br>El ID del grupo del que estás consultando info. | `Y2FwaV9ncm91cDoxOTUwNTU1MDA3OToxMjAzNjMzOTQzMjAdOTY0MTUZD` |
| `<FIELDS>`<br><br>_String_ | **Opcional**<br><br>Una lista separada por comas de campos a devolver. Si no se pasan campos, solo se devuelve el ID del grupo. | `"subject,description,participants,join_approval_mode"`<br><br>[Aprende más sobre los campos de Graph API aquí](https://developers.facebook.com/docs/graph-api/overview#fields) |

##### Campos disponibles

| Campo | Descripción | Valor de retorno de ejemplo |
| --- | --- | --- |
| `join_approval_mode`<br><br>_String_ | Indica si los usuarios de WhatsApp que hacen clic en el enlace de invitación pueden unirse al grupo con o sin aprobación previa.<br><br>Valores posibles:<br><br>- `approval_required` — Indica que los usuarios de WhatsApp deben ser aprobados mediante una [solicitud de unión](#grupos-con-solicitudes-de-unión) antes de acceder al grupo.<br>- `auto_approve` — Indica que los usuarios de WhatsApp pueden unirse sin aprobación. | `auto_approve` |
| `subject`<br><br>_String_ | El asunto del grupo. | `"Artificial Intelligence Insights"` |
| `description`<br><br>_String_ | La descripción del grupo, si se estableció durante la creación. | `"Explore AI developments, share knowledge, and discuss the future of artificial intelligence with fellow enthusiasts and experts."` |
| `suspended`<br><br>_Boolean_ | Devuelve `true` si el grupo ha sido suspendido por WhatsApp. | `false` |
| `creation_timestamp`<br><br>_Entero_ | Timestamp UNIX en segundos en el que se creó el grupo. | `683731200` |
| `participants`<br><br>_List_ | Una lista de objetos `{"wa_id": "<WA_ID>"}`, donde `<WA_ID>` es un participante del grupo consultado. | `[{"wa_id": "2228675309"}, {"wa_id": "7693349922"}]` |
| `total_participant_count`<br><br>_Entero_ | El número total de participantes en el grupo, excluyendo tu negocio. | `6` |

##### Respuesta de ejemplo

```curl
{
  "messaging_product": "whatsapp",
  "id": "<GROUP_ID>",
  "subject": "<SUBJECT>",
  "creation_timestamp": "<TIMESTAMP>",
  "suspended": "<SUSPENDED>",
  "description": "<DESCRIPTION>",
  "total_participant_count": "<TOTAL_PARTICIPANT_COUNT>",
  "participants": [
    {
      "wa_id": "<WA_ID>"
    },
    {
      "wa_id": "<WA_ID>"
    }
  ],
  "join_approval_mode": "<JOIN_APPROVAL_MODE>"
}

Obtener grupos activos

Usa este endpoint para obtener una lista de grupos activos de un número de teléfono del negocio dado.

Sintaxis de la solicitud

GET /groups/{v}/{did}

Parámetros de consulta
?limit=<LIMIT>, // Optional
&after=<AFTER_CURSOR>, // Optional
&before=<BEFORE_CURSOR> // Optional
ParámetroDescripción
<LIMIT>

Opcional
Número de grupos a obtener en la solicitud.

Mín: 1 | Default: 25 | Máx: 1024
<BEFORE_CURSOR>

Opcional
Cursor que apunta al inicio de una página de datos. Aprende más sobre Resultados paginados en Graph API aquí
<AFTER_CURSOR>

Opcional
Cursor que apunta al final de una página de datos. Aprende más sobre Resultados paginados en Graph API aquí
Objeto de respuesta
{
  "data": {
    "groups": [
      {"id": "GROUP_ID", "subject": SUBJECT, "created_at": "TIMESTAMP"},
      {"id": "GROUP_ID", "subject": SUBJECT, "created_at": "TIMESTAMP"}
      …
    ]
  },
  "paging": {
    "cursors": {
      "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
      "before": "NDMyNzQyODI3OTQw"
    },
    "previous": "https://channels.chattigo.com/bsp-cloud-chattigo-isv/groups/VERSION/{did}?limit=10&before=NDMyNzQyODI3OTQw",
    "next": "https://channels.chattigo.com/bsp-cloud-chattigo-isv/groups/VERSION/{did}?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
  }
}

Nota: el ISV reescribe las URLs de paginación (paging.previous/paging.next) para que apunten al propio ISV con tu {did} en lugar de a la API de Meta. Puedes usarlas directamente para paginar.

Parámetros de la respuesta
ParámetroDescripción
data[groups]

List
Una lista de grupos, cada uno con el ID del grupo, el asunto del grupo y el timestamp UNIX de creación del grupo.
paging

Object
Un objeto de paginación.

Aprende más sobre Resultados paginados en Graph API aquí

Actualizar ajustes del grupo

Usa este endpoint para actualizar el asunto, la descripción y la foto de tu grupo.

Sintaxis de la solicitud

POST /groups/{v}/{did}/{group_id}

Cuerpo de la solicitud
{
  "messaging_product": "whatsapp",
  "subject": "<GROUP_SUBJECT>",
  "profile_picture_file": "<FILE_PATH>",
  "description": "<GROUP_DESCRIPTION>"
}
Propiedades de la solicitud
PlaceholderDescripciónValor de ejemplo
<FILE_PATH>

String
Opcional

Una ruta a un archivo de imagen almacenado en tu directorio local.

Para subir un archivo: sigue la misma estructura de solicitud que el endpoint de Subir media.

cURL de ejemplo de subida de archivo:

```
curl ‘https://channels.chattigo.com/bsp-cloud-chattigo-isv/{v}/{did}/uploads' \
-X POST \
-H ‘Authorization: Bearer ’ \
-F ‘messaging_product=whatsapp’ \
-F ‘file=@/media/pictures/square_pic.png’
```

Requisitos de la foto de perfil del grupo:

* Solo admite el mime type image/jpeg
* Tamaño máximo: 5MB
* La imagen debe ser cuadrada, es decir, alto = ancho.
* Tamaño mínimo: 192 x 192
/local/path/file.jpg
<GROUP_SUBJECT>

String
Opcional

El nuevo asunto del grupo.

- Longitud máxima: 128 caracteres.
- No debe estar vacío si se proporciona.
"Watch Enthusiasts"
<GROUP_DESCRIPTION>

String
Opcional

La nueva descripción del grupo.

- Longitud máxima: 2048 caracteres
"Join our community to discuss the latest timepieces, share watch reviews, and connect with fellow horology enthusiasts."
Webhooks

Se dispara un webhook group_settings_update.

Webhooks de estado de mensajes de grupo

Cuando envías un mensaje a un grupo, recibes un webhook de estado messages cuando el mensaje se entrega o se lee por los participantes del grupo.

Los webhooks de estado de participantes individuales del grupo pueden agregarse en un solo webhook que contenga múltiples objetos status en el array statuses. Sin embargo, la agregación no está garantizada. Si los estados de varios participantes se generan aproximadamente al mismo tiempo, pueden combinarse en un solo webhook. Si los estados se generan en momentos diferentes, puedes recibir webhooks separados para cada participante.

Cada webhook solo hace referencia a un único mensaje enviado a un único grupo y a un único tipo de estado (por ejemplo, delivered). Los estados de diferentes mensajes, grupos o tipos de estado nunca se combinan en un solo webhook.

Para la referencia completa del payload del webhook, consulta la referencia del webhook de mensajes de estado.

Información de precios

Los webhooks de estado messages que contienen información de precios tendrán <CONVERSATION_CATEGORY> establecido en uno de:

  • group_marketing — Indica una conversación de marketing de grupo.
  • group_utility — Indica una conversación de utilidad de grupo.
  • group_service — Indica una conversación de servicio de grupo.

Mensajería de grupos

Esta sección describe las APIs y webhooks para enviar y recibir mensajes dentro de grupos. Tipos de mensaje soportados:

  • Mensajes de texto
  • Mensajes de media
  • Plantillas basadas en texto
  • Plantillas basadas en media

Suscribirse a los webhooks de metadatos de grupos

Para recibir notificaciones por webhook sobre los metadatos de tus grupos, suscríbete a los siguientes campos:

  • group_lifecycle_update
  • group_participants_update
  • group_settings_update
  • group_status_update

Advertencia: para una referencia completa de los webhooks de la Groups API, visita la referencia de webhooks de Groups API.

Enviar mensaje de grupo

Para enviar un mensaje de grupo, usa la API de mensajes.

Este endpoint se ha extendido para soportar mensajes de grupo de la siguiente forma:

  • El campo recipient_type ahora soporta group además de individual.
  • El campo to ahora soporta el group ID que se obtiene al usar la Groups API.
Ejemplo de envío de mensaje de grupo
curl 'https://channels.chattigo.com/bsp-cloud-chattigo-isv/{v}/{did}/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <JWT>' \
-d '
{
  "messaging_product": "whatsapp",
  "recipient_type": "group",
  "to": "Y2FwaV9ncm91cDoxNzA1NTU1MDEzOToxMjAzNjM0MDQ2OTQyMzM4MjAZD",
  "type": "text",
  "text": {
      "preview_url": true,
      "body": "This is another destination option: https://www.luckytravel.com/DDLmU5F1Pw"
  }
}'
Webhooks

Mensaje de grupo enviado (ejemplo)

{
   "object": "whatsapp_business_account",
   "entry": [
     {
       "id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
       "changes": [
         {
           "value": {
               "messaging_product": "whatsapp",
               "metadata": {
                    "display_phone_number": "<BUSINESS_DISPLAY_PHONE_NUMBER>",
                    "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>"
               },
               "statuses": [
                 {
                   "id": "<WHATSAPP_MESSAGE_ID>",
                   "recipient_id": "<GROUP_ID>",
                   "recipient_type": "group",
                   "status": "sent",
                   "timestamp": "<WEBHOOK_TRIGGER_TIMESTAMP>",
                 }
               ]
           },
           "field": "messages"
         }
       ]
     }
   ]
 }

Mensaje de grupo fallido (ejemplo)

{
   "object": "whatsapp_business_account",
   "entry": [
     {
       "id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
       "changes": [
         {
           "value": {
               "messaging_product": "whatsapp",
               "metadata": {
                    "display_phone_number": "<BUSINESS_DISPLAY_PHONE_NUMBER>",
                    "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>"
               },
               "statuses": [
                 {
                   "id": "<WHATSAPP_MESSAGE_ID>",
                   "recipient_id": "<GROUP_ID>",
                   "recipient_type": "group",
                   "status": "failed",
                   "timestamp": "<WEBHOOK_TRIGGER_TIMESTAMP>",
                   "errors": [
                     {
                       "code": "<ERROR_CODE>",
                       "title": "<ERROR_TITLE>",
                       "message": "<ERROR_MESSAGE>",
                       "error_data": {
                         "details": "<ERROR_DETAILS>",
                       },
                       "href": "/documentation/business-messaging/whatsapp/support/error-codes"
                    }
                  ]
                }
              ]
           },
           "field": "messages"
         }
       ]
     }
   ]
 }

Recibir mensajes de grupo

Puedes usar los siguientes webhooks para recibir estados de los mensajes recibidos en el grupo.

El objeto message incluye un campo group_id para indicar que es un mensaje de grupo. El campo from en el objeto message y el objeto contact apuntan al mismo participante que envía el mensaje.

Webhooks

Recibir mensaje de grupo (webhook de ejemplo)

{
  "object": "whatsapp_business_account",
  "entry": [{
      "id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
      "changes": [{
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                  "display_phone_number": "<BUSINESS_DISPLAY_PHONE_NUMBER>",
                  "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>"
              },
              "contacts": [{
                  "profile": {
                    "name": "<WHATSAPP_USER_NAME>"
                  },
                  "wa_id": "<WHATSAPP_USER_PHONE_NUMBER>"
                }],
              "messages": [{
                  "from": "<GROUP_PARTICIPANT_PHONE_NUMBER>",
                  "group_id": "<GROUP_ID>",
                  "id": "<WHATSAPP_MESSAGE_ID>",
                  "timestamp": "<WEBHOOK_TRIGGER_TIMESTAMP>",
                  "text": {
                    "body": "<MESSAGE_BODY>"
                  },
                  "type": "text"
                }]
          },
          "field": "messages"
        }]
  }]
}

Recibir mensaje de grupo no soportado (webhook de ejemplo)

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "<WHATSAPP_BUSINESS_ACCOUNT_ID>",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "<BUSINESS_DISPLAY_PHONE_NUMBER>",
                   "phone_number_id": "<BUSINESS_PHONE_NUMBER_ID>",
              },
              "contacts": [
                {
                  "profile": {
                    "name": "<WHATSAPP_USER_NAME>"
                  },
                  "wa_id": "<WHATSAPP_USER_PHONE_NUMBER>"
                }
              ],
              "messages": [
                {
                  "from": "<GROUP_PARTICIPANT_PHONE_NUMBER>",
                  "group_id": "<GROUP_ID>",
                  "id": "<WHATSAPP_MESSAGE_ID>",
                  "timestamp": "<WEBHOOK_TRIGGER_TIMESTAMP>",
                  "errors": [
                    {
                      "code": 130501,
                      "message": "Message type is not currently supported",
                      "title": "Unsupported message type",
                      "error_data": {
                        "details": "<ERROR_DETAILS>"
                      }
                    }
                  ],
                  "type": "unsupported"
                }
              ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Fijar y desfijar mensaje de grupo

Fijar un mensaje resalta su relevancia.

El orden de visualización de los mensajes fijados se basa en el orden cronológico de los mensajes padre, del más nuevo al más antiguo. Si ya hay tres mensajes fijados cuando se hace una nueva solicitud de fijado, el mensaje fijado más antiguo se desfijará automáticamente.

Límites
  1. Al llamar a la API, solo se puede fijar un mensaje a la vez.
  2. Solo el administrador del grupo puede fijar o desfijar mensajes.
  3. Puede haber un máximo de 3 mensajes fijados en cualquier momento.
Sintaxis de la solicitud

POST /{v}/{did}/messages

Nota: recibirás un error en la respuesta sync si el recipient_type y el tipo de to no coinciden.

Cuerpo de la solicitud
{
  "messaging_product": "whatsapp",
  "recipient_type": "group",
  "to": "<GROUP_ID>",
  "type": "pin",
  "pin": {
    "type": "<PIN_OPERATION>",
    "message_id": "<MESSAGE_ID>",
    "expiration_days": "<EXPIRATION>"
  }
}
Parámetros del cuerpo
PlaceholderDescripciónValor de ejemplo
<GROUP_ID>

String
Requerido

El grupo en el que estás fijando un mensaje.
Y2FwaV9ncm91cDoxOTUwNTU1MDA3OToxMjAzNjMzOTQzMjAdOTY0MTUZD
<PIN_OPERATION>

String
Requerido

La operación de fijado que estás realizando en el grupo.

Puede ser "pin" o "unpin"
pin
<MESSAGE_ID>

String
Requerido

Un identificador único del mensaje que estás fijando o desfijando en el grupo.
wamid.HBgLM...
<EXPIRATION>

Entero
Requerido cuando PIN_OPERATION es pin

Duración del fijado en días. Puede ser de 1 a 30 días.
4
Cuerpo de la respuesta
{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "Y2FwaV9ncm91cDo....",
      "wa_id": "Y2FwaV9ncm91cDo...."
    }
  ],
  "messages": [
    {
      "id": "wamid.HBgLM..."
    }
  ]
}
Webhooks

Suscríbete al tema de webhook messages para recibir notificaciones de estado de mensajes. Se recibirán webhooks de estado estándar de enviado y entregado para el message_id de la respuesta.

Aprende más sobre el objeto de webhook de estado messages aquí

Webhooks de estado de mensajes de grupo

Cuando envías mensajes a un grupo, recibirás un webhook cuando el mensaje se entrega o se lee.

Recibes un único webhook agregado en lugar de múltiples webhooks.

Esto significa que si envías un mensaje y estás configurado para recibir varios estados read o delivered, recibes un único webhook agregado que contiene múltiples objetos status.

Cada webhook que recibes solo hace referencia a un único mensaje enviado a un único grupo y a un único tipo de estado.

Aprende más sobre el webhook de estado de mensajes de grupo

Webhooks de la Groups API

Para recibir notificaciones por webhook sobre los metadatos de tus grupos, suscríbete a los siguientes campos:

  • group_lifecycle_update
  • group_participants_update
  • group_settings_update
  • group_status_update

Webhooks de group_lifecycle_update

Se dispara un webhook group_lifecycle_update cuando un grupo se crea o se elimina.

Group create succeed

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "DISPLAY_PHONE_NUMBER",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "groups": [
              {
                "timestamp": "TIMESTAMP",
                "group_id": "GROUP_ID",
                "type": "group_create",
                "request_id": "REQUEST_ID",
                "subject": "test invite link",
                "invite_link": "https://chat.whatsapp.com/LINK_ID",
                "join_approval_mode": "JOIN_APPROVAL_MODE"
              }
            ]
          },
          "field": "group_lifecycle_update"
        }
      ]
    }
  ]
}

Group create fail

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
          {
                    "timestamp": "TIMESTAMP",
                    "type": "group_create",
                    "subject": "GROUP_SUBJECT",
                    "description": "GROUP_DESCRIPTION",
                    "request_id": "REQUEST_ID",
                    "group_id": "GROUP_ID",
                    "errors": [
                      {
                        "code": "ERROR_CODE",
                        "message": "ERROR_MESSAGE",
                        "title": "ERROR_TITLE",
                        "error_data": {
                          "details": "ERROR_DETAILS"
                        }
                      }
                    ]
          }
               ]
            },
          "field": "group_lifecycle_update"
        }
      ]
    }
  ]
}

Delete group succeed

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
                  {
                    "timestamp": "TIMESTAMP",
                    "group_id": "GROUP_ID",
                    "type": "group_delete",
                    "request_id": "REQUEST_ID",
                 }
               ]
          },
          "field": "group_lifecycle_update"
        }
      ]
    }
  ]
}

Delete group fails

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
                  {
                    "timestamp": "TIMESTAMP",
                    "group_id": "GROUP_ID",
                    "type": "group_delete",
                    "request_id": "REQUEST_ID",
                    "errors": [
                      {
                        "code": "ERROR_CODE",
                        "message": "ERROR_MESSAGE",
                        "title": "ERROR_TITLE",
                        "error_data": {
                          "details": "ERROR_DETAILS"
                        }
                      }
                    ]
                 }
               ]
          },
          "field": "group_lifecycle_update"
        }
      ]
    }
  ]
}

Webhooks de group_participants_update

Se dispara un webhook group_participants_update cuando un usuario de WhatsApp se une a un grupo con un enlace de invitación, solicita unirse a un grupo, cancela su solicitud, o cuando se aprueban una o más solicitudes de unión.

User joined group using invite link succeed

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
                  {
                    "timestamp": "TIMESTAMP",
                    "group_id": "GROUP_ID",
                    "type": "group_participants_add",
                    "reason": "invite_link",
                    "added_participants": [
                        {
                          "wa_id": "WHATSAPP_ID",
                        },
                    ]
                 }
              ]
          },
          "field": "group_participants_update"
        }
      ]
    }
  ]
}

User accepts or cancels join request

  • Para solicitudes de unión: GROUP_REQUEST_TYPE se establece en group_join_request_created.
  • Para solicitudes de cancelación: GROUP_REQUEST_TYPE se establece en group_join_request_revoked.
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "groups": [
              {
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "group_id": "GROUP_ID",
                "type": "GROUP_REQUEST_TYPE",
                "reason": "REASON_FOR_REQUEST_OUTCOME",
                "join_request_id": "JOIN_REQUEST_ID",
                "wa_id": "WHATSAPP_USER_ID"
              }
            ]
          },
          "field": "group_participants_update"
        }
      ]
    }
  ]
}

Join request approved

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "groups": [
              {
                "timestamp": WEBHOOK_TRIGGER_TIMESTAMP,
                "group_id": "GROUP_ID",
                "type": "group_participants_add",
                "reason": "invite_link",
                "added_participants": [
                  {
                    "input": "WHATSAPP_USER_PHONE_NUMBER",
                    "wa_id": "WHATSAPP_USER_ID"
                  }
                ]
              }
            ]
          },
          "field": "group_participants_update"
        }
      ]
    }
  ]
}

Group participant remove succeed

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
                  {
                    "timestamp": "TIMESTAMP",
                    "group_id": "GROUP_ID",
                    "type": "group_participants_remove",
                    "request_id": "REQUEST_ID",
                    "removed_participants": [
                        {
                          "input": "PHONE_NUMBER or WHATSAPP_ID"
                        },
                        {
                          "input": "PHONE_NUMBER or WHATSAPP_ID"
                        }
                    ],
                    "initiated_by": "business"
                 }
              ]
          },
          "field": "group_participants_update"
        }
      ]
    }
  ]
}

Group participant remove with participants partially fails

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
                  {
                    "timestamp": "TIMESTAMP",
                    "group_id": "GROUP_ID",
                    "type": "group_participants_remove",
                    "request_id": "REQUEST_ID",
                    "initiated_by": "business",
                    "removed_participants": [
                      {
                        "input": "PHONE_NUMBER or WHATSAPP_ID"
                      }
                    ],
                    "failed_participants": [
                      {
                        "input": "PHONE_NUMBER or WHATSAPP_ID",
                        "errors": [
                          {
                            "code": "ERROR_CODE",
                            "message": "ERROR_MESSAGE",
                            "title": "ERROR_TITLE",
                            "error_data": {
                              "details": "ERROR_DETAILS"
                            }
                          }
                        ]
                      }
                    ],
                    "errors": [
                      {
                        "code": "ERROR_CODE",
                        "message": "Failed to remove some participants from the group",
                        "title": "Not All Participants Remove Succeeded",
                        "error_data": {
                          "details": "ERROR_DETAILS"
                        }
                      }
                    ]
                 }
              ]
          },
          "field": "group_participants_update"
        }
      ]
    }
  ]
}

Group participant remove fails

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
                  {
                    "timestamp": "TIMESTAMP",
                    "group_id": "GROUP_ID",
                    "type": "group_participants_remove",
                    "request_id": "REQUEST_ID",
                    "failed_participants": [
                      {
                        "input": "PHONE_NUMBER or WHATSAPP_ID"
                      },
                      {
                        "input": "PHONE_NUMBER or WHATSAPP_ID"
                      }
                    ],
                    "errors": [
                      {
                        "code": "ERROR_CODE",
                        "message": "ERROR_MESSAGE",
                        "title": "ERROR_TITLE",
                        "error_data": {
                          "details": "ERROR_DETAILS"
                        }
                      }
                    ],
                    "initiated_by": "business"
                 }
              ]
          },
          "field": "group_participants_update"
        }
      ]
    }
  ]
}

Group participant leaves webhook

Este webhook se envía cuando un participante del grupo abandona el grupo. El campo initiated_by y solo el wa_id de la lista removed_participants apuntarán al participante que abandonó el grupo.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_ACCOUNT_ID",
      "changes": [
        {
          "value": {
              "messaging_product": "whatsapp",
              "metadata": {
                   "display_phone_number": "DISPLAY_PHONE_NUMBER",
                   "phone_number_id": "PHONE_NUMBER_ID",
              },
               "groups": [
                  {
                    "timestamp": "TIMESTAMP",
                    "group_id": "GROUP_ID",
                    "type": "group_participants_remove",
                    "removed_participants": [
                      {
                        "wa_id": "WHATSAPP_ID",
                      }
                    ],
                    "initiated_by": "participant"
                 }
              ]
          },
          "field": "group_participants_update"
        }
      ]
    }
  ]
}

Webhooks de group_settings_update

Group settings update succeed

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "<ID>",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "DISPLAY_NUMBER",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "groups": [
              {
                "timestamp": "TIMESTAMP",
                "group_id": "GROUP_ID",
                "type": "group_settings_update",
                "request_id": "REQUEST_ID",
                "profile_picture": {
                  "mime_type": "image/jpeg",
                  "update_successful": true,
                  "sha256": "PHOTO_HASH",
                },
                "group_subject": {
                  "text": "Test Subject",
                  "update_successful": true,
                },
                "group_description": {
                  "text": "Test Description",
                  "update_successful": true,
                }
              }
            ]
          },
          "field": "group_settings_update"
        }
      ]
    }
  ]
}

Group settings update partial fail

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "DISPLAY_PHONE_NUMBER",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "groups": [
              {
                "timestamp": "TIMESTAMP",
                "group_id": "GROUP_ID",
                "type": "group_settings_update",
                "request_id": "REQUEST_ID",
                "profile_picture": {
                  "mime_type": "image/jpeg",
                  "update_successful": true,
                  "sha256": "PHOTO_HASH",
                },
                "group_subject": {
                  "text": "Test Subject",
                  "update_successful": false,
                  "errors": [
                    {
                      "code": "ERROR_CODE",
                      "message": "ERROR_MESSAGE",
                      "title": "ERROR_TITLE",
                      "error_data": {
                        "details": "ERROR_DETAILS"
                      }
                    }
                  ]
                },
                "group_description": {
                  "text": "Test Description",
                  "update_successful": false,
                  "errors": [
                    {
                      "code": "ERROR_CODE",
                      "message": "ERROR_MESSAGE",
                      "title": "ERROR_TITLE",
                      "error_data": {
                        "details": "ERROR_DETAILS"
                      }
                    }
                  ]
                },
                "errors": [
                  {
                    "code": "ERROR_CODE",
                    "message": "ERROR_MESSAGE",
                    "title": "ERROR_TITLE",
                    "error_data": {
                      "details": "ERROR_DETAILS"
                    }
                  }
                ]
              }
            ]
          },
          "field": "group_settings_update"
        }
      ]
    }
  ]
}

Group settings update total fail

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "<ID>",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "DISPLAY_PHONE_NUMBER",
              "phone_number_id": "PHONE_NUMBER"
            },
            "groups": [
              {
                "timestamp": "TIMESTAMP",
                "group_id": "GROUP_ID",
                "request_id": "REQUEST_ID",
                "type": "group_settings_update",
                "profile_picture": {
                  "mime_type": "image/jpeg",
                    "sha256": "PHOTO_HASH",
                  "update_successful": false,
                  "errors": [
                    {
                      "code": "ERROR_CODE",
                      "message": "ERROR_MESSAGE",
                      "title": "ERROR_TITLE",
                      "error_data": {
                        "details": "ERROR_DETAILS"
                      }
                    }
                  ]
                },
                "group_subject": {
                  "text": "Test Subject",
                  "update_successful": false,
                  "errors": [
                    {
                      "code": "ERROR_CODE",
                      "message": "ERROR_MESSAGE",
                      "title": "ERROR_TITLE",
                      "error_data": {
                        "details": "ERROR_DETAILS"
                      }
                    }
                  ]
                },
                "group_description": {
                  "text": "Test Description",
                  "update_successful": false,
                  "errors": [
                    {
                      "code": "ERROR_CODE",
                      "message": "ERROR_MESSAGE",
                      "title": "ERROR_TITLE",
                      "error_data": {
                        "details": "ERROR_DETAILS"
                      }
                    }
                  ]
                },
                "errors": [
                  {
                    "code": "ERROR_CODE",
                    "message": "ERROR_MESSAGE",
                    "title": "ERROR_TITLE",
                    "error_data": {
                      "details": "ERROR_DETAILS"
                    }
                  }
                ]
              }
            ]
          },
          "field": "group_settings_update"
        }
      ]
    }
  ]
}

Webhooks de group_status_update

WhatsApp usa tecnología avanzada de machine learning para evaluar la información de los grupos, incluidos los asuntos de los grupos, las fotos de perfil y las descripciones de los grupos. También proporcionamos opciones simples para que los usuarios nos hagan reportes desde cualquier chat.

Podemos evitar más actividad en los grupos de chat para cumplir con nuestras obligaciones legales. También podemos evitar más actividad de chat cuando un administrador de grupo está en violación de nuestros Términos de servicio.

Puedes recibir un webhook si un grupo que gestionas es suspendido. También puedes recibir un webhook si un grupo suspendido que gestionas queda libre de suspensiones.

Group suspended

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "DISPLAY_PHONE_NUMBER",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "groups": [
              {
                "timestamp": "TIMESTAMP",
                "type": "group_suspend",
                "group_id": "GROUP_ID"
              }
            ]
          },
          "field": "group_status_update"
        }
      ]
    }
  ]
}

Group suspension cleared

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "DISPLAY_PHONE_NUMBER",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "groups": [
              {
                "timestamp": "TIMESTAMP",
                "type": "group_suspend_cleared",
                "group_id": "GROUP_ID"
              }
            ]
          },
          "field": "group_status_update"
        }
      ]
    }
  ]
}

Webhooks de estado de mensajes de grupo

Cuando envías mensajes a un grupo, recibirás un webhook de estado cuando el mensaje se envía, se entrega y se lee. En lugar de enviar múltiples webhooks para cada actualización de estado, WhatsApp puede enviar un webhook agregado.

Hay dos tipos de webhooks de estado de mensaje agregados que puedes recibir.

Múltiples participantes, un solo mensaje

Si envías un mensaje y estás configurado para recibir varios estados read o delivered de los participantes, recibirás un único webhook agregado que contiene múltiples objetos status.

Cada webhook que recibes hará referencia a un único mensaje enviado a un único grupo y a un único tipo de estado, es decir, un solo grupo, un solo estado de múltiples participantes para un solo mensaje.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "statuses": [
              {
                "id": "WHATSAPP_MESSAGE_ID",
                "status": "read",
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "recipient_id": "GROUP_ID",
                "recipient_type": "group",
                "recipient_participant_id": "GROUP_PARTICIPANT_PHONE_NUMBER_1",
                "conversation": {
                  "id": "CONVERSATION_ID",
                  "origin": {
                    "type": "CONVERSATION_CATEGORY"
                  },
                  "pricing": {
                    "billable": IS_BILLABLE,
                    "pricing_model": "PRICING_MODEL",
                    "category": "CONVERSATION_CATEGORY"
                  }
                }
              },
              {
                "id": "WHATSAPP_MESSAGE_ID",
                "status": "read",
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "recipient_id": "GROUP_ID",
                "recipient_type": "group",
                "recipient_participant_id": "GROUP_PARTICIPANT_PHONE_NUMBER_2",
                "conversation": {
                  "id": "CONVERSATION_ID",
                  "origin": {
                    "type": "CONVERSATION_CATEGORY"
                  },
                  "pricing": {
                    "billable": IS_BILLABLE,
                    "pricing_model": "PRICING_MODEL",
                    "category": "CONVERSATION_CATEGORY"
                  }
                }
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Múltiples mensajes, un solo participante

Si envías múltiples mensajes a un grupo y estás configurado para recibir varios estados read o delivered de un solo participante, WhatsApp puede enviarte un único webhook agregado que contiene múltiples objetos status.

Cada webhook que recibes hará referencia a múltiples mensajes enviados a un único grupo y a un único tipo de estado, es decir, un solo grupo, un solo estado de un solo participante para múltiples mensajes.

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "statuses": [
              {
                "id": "WHATSAPP_MESSAGE_ID_1",
                "status": "delivered",
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "recipient_id": "GROUP_ID",
                "recipient_type": "group",
                "recipient_participant_id": "GROUP_PARTICIPANT_PHONE_NUMBER",
                "conversation": {
                  "id": "CONVERSATION_ID",
                  "origin": {
                    "type": "CONVERSATION_CATEGORY"
                  },
                  "pricing": {
                    "billable": IS_BILLABLE,
                    "pricing_model": "PRICING_MODEL",
                    "category": "CONVERSATION_CATEGORY"
                  }
                }
              },
              {
                "id": "WHATSAPP_MESSAGE_ID_2",
                "status": "delivered",
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "recipient_id": "GROUP_ID",
                "recipient_type": "group",
                "recipient_participant_id": "GROUP_PARTICIPANT_PHONE_NUMBER",
                "conversation": {
                  "id": "CONVERSATION_ID",
                  "origin": {
                    "type": "CONVERSATION_CATEGORY"
                  },
                  "pricing": {
                    "billable": IS_BILLABLE,
                    "pricing_model": "PRICING_MODEL",
                    "category": "CONVERSATION_CATEGORY"
                  }
                }
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Group message delivered

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "statuses": [
              {
                "id": "WHATSAPP_MESSAGE_ID",
                "status": "delivered",
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "recipient_id": "GROUP_ID",
                "recipient_type": "group",
                "participant_recipient_id": "GROUP_PARTICIPANT_PHONE_NUMBER",
                "conversation": {
                "id": "CONVERSATION_ID",
                "origin": {
                  "type": "CONVERSATION_CATEGORY"
                }
              },
                "pricing": {
                  "billable": IS_BILLABLE,
                  "pricing_model": "PRICING_MODEL",
                  "category": "CONVERSATION_CATEGORY"
                }
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Información de precios

Los webhooks de mensajes de estado que contienen información de precios tendrán:

  • CONVERSATION_CATEGORY establecido en uno de:
    • group_marketing — Indica una conversación de marketing.
    • group_utility — Indica una conversación de utilidad.
    • group_service — Indica una conversación de servicio.
  • IS_BILLABLE establecido en uno de:
    • true — Indica una conversación facturable.
    • false — Indica una conversación no facturable.
  • PRICING_MODEL establecido en PMP.

Aprende más sobre los precios de la Groups API

Group message read (con precios)

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "statuses": [
              {
                "id": "WHATSAPP_MESSAGE_ID",
                "status": "read",
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "recipient_id": "GROUP_ID",
                "recipient_type": "group",
                "participant_recipient_id": "GROUP_PARTICIPANT_PHONE_NUMBER",
                "conversation": {
                "id": "CONVERSATION_ID",
                "origin": {
                  "type": "CONVERSATION_CATEGORY"
                }
              },
                "pricing": {
                  "billable": IS_BILLABLE,
                  "pricing_model": "PRICING_MODEL",
                  "category": "CONVERSATION_CATEGORY"
                }
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Group message read (sin precios)

{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "BUSINESS_DISPLAY_PHONE_NUMBER",
              "phone_number_id": "BUSINESS_PHONE_NUMBER_ID"
            },
            "statuses": [
              {
                "id": "WHATSAPP_MESSAGE_ID",
                "status": "read",
                "timestamp": "WEBHOOK_TRIGGER_TIMESTAMP",
                "recipient_id": "GROUP_ID",
                "recipient_type": "group",
                "participant_recipient_id": "GROUP_PARTICIPANT_PHONE_NUMBER"
              }
            ]
          },
          "field": "messages"
        }
      ]
    }
  ]
}

Códigos de error de la Groups API

CódigoDescripciónHTTP
131020

Bad Group
No se pueden enviar mensajes a grupos de un solo miembro.400

Bad Request
131041

Group unknown
El grupo no se encontró, ya sea porque no existe o porque no eres miembro.400

Bad Request
131059

Invalid cursor
El cursor ha expirado o se ha corrompido. Vuelve a comenzar la paginación desde el inicio.400

Bad Request
131201

Request partially succeeded
No todas las operaciones a nivel de participante en la solicitud tuvieron éxito.206

Partial Content Success
131202

Duplicate participant
Participantes duplicados en el array de participantes de entrada.400

Bad Request
131204

Participant overlimit
El tamaño de participantes del grupo excede el límite.400

Bad Request
131207

Group suspended
El grupo viola las políticas de la plataforma.403

Forbidden
131208

Group Rate Limit Hit
La operación de grupo falló porque hubo demasiadas operaciones de grupo desde este número de teléfono en un período corto.429

Too Many Requests
131209

Invalid Group Profile Picture Aspect Ratio
El ancho y el alto de la imagen deben ser iguales.400

Bad Request
131210

Image is Too Small to Process
El ancho y el alto de la imagen deben ser mayores a 192px.400

Bad Request
131211

Group create limit reached
Se alcanzó el límite del número máximo de grupos que se pueden crear para este número.400

Bad Request
131212

Participant is not a part of the group
El participante no forma parte del grupo.400

Bad Request
131213

Group join request does not exist
La solicitud de unión al grupo no existe.400

Bad Request
131214

Group creation is temporarily disabled
La creación de grupos está temporalmente deshabilitada debido a mensajes de marketing excesivos enviados por la WABA en la ventana de servicio al cliente durante los últimos 7 días.400

Bad Request
131215

This phone number is not eligible to access Groups APIs
Las Groups APIs solo están disponibles para números de teléfono elegibles. Consulta la elegibilidad en Get Started with Groups API.400

Bad Request

Precios de la Groups API

Precio por mensaje en la Groups API

La Groups API usa el modelo de tarificación por mensaje de Cloud API para determinar si un mensaje dado es facturable. Sin embargo, se cobra cada vez que un mensaje facturable se entrega a alguien del grupo.

Por ejemplo, si envías un mensaje de plantilla de marketing (facturable) a un grupo con 5 usuarios de WhatsApp y se entrega a los 5, se te cobrarán 5 mensajes entregados a la tarifa de marketing vigente para el código de país de cada destinatario.

Si el mensaje se entregó solo a 4 de los 5 usuarios, solo se te cobrarán los 4 mensajes entregados.

Cómo funcionan las ventanas de servicio al cliente con la Groups API

Las ventanas de servicio al cliente funcionan de forma diferente al usar la Groups API.

Cuando cualquier usuario de WhatsApp del grupo te envía un mensaje, se abre una ventana de servicio al cliente entre tú y todo el grupo (o se refresca, si ya existe una). Esto te permite enviar plantillas de utilidad y marketing, o mensajes de formato libre, de forma gratuita.

Esto es diferente de la mensajería 1:1, donde cuando un usuario de WhatsApp te envía un mensaje, se abre una ventana de servicio al cliente entre tú y ese cliente (o se refresca, si ya existe una).

Todo lo demás sobre las ventanas de servicio al cliente sigue igual.

Información de precios en el webhook de estado de mensaje

La información de precios para los mensajes enviados con la Groups API se incluye en los webhooks de estado de mensajes.

Cómo se procesan los webhooks de estado read y delivered

Para que un estado de mensaje se considere read, debe haber sido al menos delivered.

En algunos escenarios, como cuando un usuario está presente en el hilo del chat cuando llega un mensaje, el mensaje se marca delivered y read casi simultáneamente. En este y otros escenarios similares, el webhook delivered no se envía. Esto se debe a que se sobreentiende que el mensaje fue entregado ya que fue leído.

Cómo se muestra la información de precios en el webhook de estado de mensaje

No todos los webhooks de estado de mensaje incluyen información de precios.

Con la introducción del Per-message Pricing, los datos de precios pueden estar presentes en los webhooks de estado sent, delivered o read. Si un mensaje es cobrado, puedes esperar que al menos un webhook (delivered o read) contenga la información de precios.

Webhook de estado de mensaje sent
// All versions

"pricing": {
  "billable": "<IS_BILLABLE>",
  "pricing_model": "<PRICING_MODEL>",  // new value, see table below
  "type": "<PRICING_TYPE>",            // new property, see table below
  "category": "<CONVERSATION_CATEGORY>"
}
Webhook de estado de mensaje delivered / read
// Version 24.0 and higher

"pricing": {
  "billable": "<IS_BILLABLE?>",
  "pricing_model": "<PRICING_MODEL>",  // new value, see table below
  "type": "<PRICING_TYPE>",            // new property, see table below
  "category": "<CONVERSATION_CATEGORY>"
}
// Version 23.0 and lower
"conversation": {
  "id": "<CONVERSATION_ID>",           // new behavior, see table below
  "expiration_timestamp": "<CONVERSATION_EXPIRATION_TIMESTAMP>",
  "origin": {
    "type": "<CONVERSATION_CATEGORY>"
  }
},

"pricing": {
  "billable": "<IS_BILLABLE?>",
  "pricing_model": "PMP",              // Value is now "PMP" instead of "CBP"
  "type": "<PRICING_TYPE>",            // new property, see table below
  "category": "<PRICING_CATEGORY>"
}
Parámetros
PlaceholderDescripción
<CONVERSATION_ID>Versión 24.0 y superiores:

- El objeto conversation se omitirá por completo

Versión 23.0 y anteriores:

- El valor ahora se establecerá en un ID único por mensaje, en lugar de por conversación.
<CONVERSATION_CATEGORY>Sin cambios.
<CONVERSATION_EXPIRATION_TIMESTAMP>Sin cambios.
<IS_BILLABLE?>Sin cambios.

Sin embargo, la propiedad billable quedará obsoleta en un futuro versioned release. Comienza a usar pricing.type y pricing.category juntos para determinar si un mensaje es facturable y, si lo es, su tarifa de facturación.
<PRICING_TYPE>Nueva propiedad. Valores posibles:

- regular — indica que el mensaje es facturable.
- free_group_customer_service — indica que el mensaje es gratuito porque fue una plantilla de utilidad o un mensaje sin plantilla enviado dentro de una ventana de servicio al cliente.
<PRICING_CATEGORY>Los valores no cambian, pero ahora se pueden interpretar de la siguiente forma:

* group_marketing — indica un mensaje de plantilla de marketing.
* group_utility — indica un mensaje de plantilla de utilidad.
* group_service — indica un mensaje sin plantilla.
Identificando mensajes facturables

Los mensajes facturables tienen pricing.type establecido en regular. El valor de pricing.category indica la tarifa (group_marketing o group_utility).

Identificando mensajes gratuitos

Los mensajes gratuitos tienen pricing.type establecido en free_group_customer_service. El valor de pricing.category te indica por qué fue gratuito:

  • group_utility — el mensaje se envió dentro de una ventana de servicio al cliente de grupo abierta.
  • group_service — todos los mensajes sin plantilla son gratuitos.

Analítica de mensajería para la Groups API

El campo analytics proporciona el número y tipo de mensajes enviados y entregados por los números de teléfono asociados a una WABA específica — para métricas de conversación, consulta Conversation Analytics.

Puedes obtener la analítica de mensajes enviados con la Groups API a través del endpoint de métricas del ISV, que reenvía los filtros a Meta:

GET /metrics/{v}/{did}

El componente resuelve el token y la WABA desde el {did} y consulta a Meta con fields=analytics.<FILTER_PARAMETER>.<FILTER_PARAMETER>....

Parámetros de filtro para la analítica de mensajería

Para una lista completa de los parámetros de filtro de analítica de mensajería, consulta la referencia de Messaging Analytics.

Cambios en los parámetros de filtro para la Groups API

NombreDescripción
product_types

tipo: Array
Opcional.

Los tipos de mensajes (mensajes de notificación y/o mensajes de soporte al cliente) para los que quieres obtener notificaciones.

Proporciona un array e incluye:
- 101 para mensajes de notificación de grupo
- 102 para mensajes de soporte al cliente de grupo
- 103 para mensajes de grupo entrantes

Si los valores anteriores no se proporcionan, la llamada a la API devolverá analítica de todos los mensajes juntos.

El tipo de producto entrante no se puede consultar junto con otros tipos de producto, o verás un error similar al siguiente:

```https
{
“error”: {
“message”: “Invalid parameter”,
“type”: “OAuthException”,
“code”: 100,
“error_subcode”: 2388077,
“is_transient”: false,
“error_user_title”: “Insight Invalid Product Type Combination”,
“error_user_msg”: “Unable to query this combination of product types. Please query individually and try again.”,
}
}

#### Valor de la respuesta

Las respuestas exitosas a la API de analítica al consultar datos de mensajes de la Groups API devolverán un objeto similar al siguiente:

**Nota: el filtro de código de país no está soportado para mensajes de grupo enviados.**

```https
With Country code filter
{
  "analytics": {
    "phone_numbers": [
      "16505550111",
      "16505550112",
      "16505550113"
    ],
    "country_codes": [
      "US",
      "BR"
    ],
    "granularity": "DAY",
    "data_points": [
      {
        "start": 1543543200,
        "end": 1543629600,
        "sent": 196093,
        "delivered": 179715,
        "groups_delivered": 4
      },
      {
        "start": 1543629600,
        "end": 1543716000,
        "sent": 147649,
        "delivered": 139032
      }
      # more data points
    ]
  },
  "id": "102290129340398"
}

Without Country code filter
{
  "analytics": {
    "phone_numbers": [
      "16505550111",
      "16505550112",
      "16505550113"
    ],
    "granularity": "DAY",
    "data_points": [
      {
        "start": 1543543200,
        "end": 1543629600,
        "sent": 196093,
        "delivered": 179715,
        "groups_sent": 2,
        "groups_delivered": 4
      },
      {
        "start": 1543629600,
        "end": 1543716000,
        "sent": 147649,
        "delivered": 139032
      }
      # more data points
    ]
  },
  "id": "102290129340398"
}

Analítica de precios para la Groups API

El campo pricing_analytics te permite obtener desgloses de precios de cualquier mensaje entregado dentro de un rango de fechas especificado.

Puedes obtenerla a través del endpoint de métricas del ISV, que reenvía los filtros a Meta:

GET /metrics/{v}/{did}

El componente resuelve el token y la WABA desde el {did} y consulta a Meta con fields=pricing_analytics y los siguientes filtros:

.start(<START>)
.end(<END>)
.granularity(<GRANULARITY>)
.phone_numbers(<PHONE_NUMBERS>)
.country_codes(<COUNTRY_CODES>)
.metric_types(<METRIC_TYPES>)
.pricing_types(<PRICING_TYPES>)
.pricing_categories(<PRICING_CATEGORIES>)
.dimensions(<DIMENSIONS>)

Parámetros de filtro para la analítica de precios

Para una lista completa de los parámetros de filtro de analítica de mensajería, consulta la referencia de Messaging Analytics.

Cambios en los parámetros de filtro para la Groups API

NombreDescripción
<PRICING_CATEGORIES>

Array de strings
Opcional.

Array de categorías de precios. Si envías un array vacío, recibes resultados de todas las categorías de precios.

Valores posibles:

* GROUP_MARKETING: Mensajes de grupo cobrados a la tarifa de marketing.
* GROUP_SERVICE: Mensajes de grupo que no fueron cobrados. Incluye todos los mensajes sin plantilla y los mensajes de utilidad enviados dentro de una ventana de servicio al cliente.
* GROUP_UTILITY: Mensajes de grupo cobrados a la tarifa de utilidad.
<PRICING_TYPES>

Array de strings
Opcional.

Array de tipos de precios. Si envías un array vacío, recibes resultados de todos los tipos de precios.

Valores posibles:

* FREE_GROUP_CUSTOMER_SERVICE: Mensajes de grupo gratuitos. Son mensajes sin plantilla y mensajes de utilidad enviados dentro de ventanas de servicio al cliente de grupo.
* REGULAR: Mensajes facturables. Incluye todos los mensajes de autenticación y plantillas de marketing, y cualquier plantilla de utilidad enviada fuera de una ventana de servicio al cliente.

Tarjetas de tarifas

Advertencia: los mensajes de utilidad de grupo no son elegibles para niveles de volumen.

Las tarifas de mensajería para la Groups API son las mismas que las tarifas de mensajería por mensaje para la mensajería 1 a 1.

Ver las tarjetas de tarifas de per-message pricing

Preguntas frecuentes

¿Qué sucede cuando elimino un grupo?

  • Ningún miembro, incluido tú, podrá enviar mensajes al grupo.
  • Cloud API entrega cualquier mensaje o estado que recibió antes de que eliminaras el grupo, por lo que es posible que aún recibas webhooks por esos mensajes o estados.

¿Por qué un participante no puede unirse al grupo con mi enlace de invitación?

Algunas razones posibles incluyen:

  • El enlace de invitación puede haber sido eliminado.
  • Eliminaste al participante del grupo anteriormente.
  • El grupo ya está lleno.

¿Cómo puedo enviar mi enlace de invitación a los usuarios?

¿En qué países está disponible Groups?