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:
- Números de teléfono de la app de WhatsApp Business
- Números incorporados a Multi-solution Conversations
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:
- Tu número de negocio esté en uso con Cloud API (no con la app de WhatsApp Business).
- Tu servidor de webhooks esté configurado para usarse con Cloud API.
- Tu app esté suscrita a los siguientes campos de webhook de grupos:
group_lifecycle_updategroup_participants_updategroup_settings_updategroup_status_update
- Tu app esté suscrita a la cuenta de WhatsApp Business de tu número de teléfono del negocio.
- Tu app tenga el permiso
whatsapp_business_messagingpara 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
- Navega a la Template Library.
- A la izquierda, haz clic en el menú desplegable Group invite link y luego marca la casilla Group invite upon request.
- 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ón | Endpoint del ISV |
|---|---|
| Crear grupo | POST /groups/{v}/{did} |
| Obtener grupos activos | GET /groups/{v}/{did} |
| Obtener info del grupo | GET /groups/{v}/{did}/{group_id}?fields= |
| Actualizar ajustes del grupo | POST /groups/{v}/{did}/{group_id} |
| Eliminar grupo | DELETE /groups/{v}/{did}/{group_id} |
| Obtener solicitudes de unión | GET /groups/{v}/{did}/{group_id}/join_requests |
| Aprobar solicitudes de unión | POST /groups/{v}/{did}/{group_id}/join_requests |
| Rechazar solicitudes de unión | DELETE /groups/{v}/{did}/{group_id}/join_requests |
| Obtener enlace de invitación | GET /groups/{v}/{did}/{group_id}/invite_link |
| Restablecer enlace de invitación | POST /groups/{v}/{did}/{group_id}/invite_link |
| Eliminar participantes | DELETE /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, devolviendo400si 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_updategroup_participants_updategroup_settings_updategroup_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
| Placeholder | Descripción | Valor 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.
- Ver el webhook de ejemplo “Group create succeed”
- Ver el webhook de ejemplo “Group create fail”
- Ver el webhook de ejemplo “User joins group using invite link”
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
| Placeholder | Descripción | Valor 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
| Placeholder | Descripción | Valor 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
| Placeholder | Descripción | Valor 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
| Placeholder | Descripción | Valor 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
| Placeholder | Descripción | Valor 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
| Placeholder | Descripción | Valor 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:
| Placeholder | Descripción | Valor 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
- Navega a la Template Library.
- A la izquierda, haz clic en el menú desplegable Group invite link y luego marca la casilla Group invite upon request.
- 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
- 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
| Placeholder | Descripción | Valor 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
| Placeholder | Descripción | Valor 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
| Placeholder | Descripción | Valor 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ámetro | Descripció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ámetro | Descripció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. |
pagingObject | 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
| Placeholder | Descripción | Valor 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.
- Ver el webhook de ejemplo “Group settings update succeed”
- Ver el webhook de ejemplo “Group settings update partial fail”
- Ver el webhook de ejemplo “Group settings update total fail”
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_updategroup_participants_updategroup_settings_updategroup_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_typeahora soportagroupademás deindividual. - El campo
toahora soporta elgroup IDque 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
- Al llamar a la API, solo se puede fijar un mensaje a la vez.
- Solo el administrador del grupo puede fijar o desfijar mensajes.
- 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
| Placeholder | Descripción | Valor 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 pinDuració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_updategroup_participants_updategroup_settings_updategroup_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_TYPEse establece engroup_join_request_created. - Para solicitudes de cancelación:
GROUP_REQUEST_TYPEse establece engroup_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_CATEGORYestablecido 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_BILLABLEestablecido en uno de:true— Indica una conversación facturable.false— Indica una conversación no facturable.
PRICING_MODELestablecido enPMP.
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ódigo | Descripción | HTTP |
|---|---|---|
131020Bad Group | No se pueden enviar mensajes a grupos de un solo miembro. | 400Bad Request |
131041Group unknown | El grupo no se encontró, ya sea porque no existe o porque no eres miembro. | 400Bad Request |
131059Invalid cursor | El cursor ha expirado o se ha corrompido. Vuelve a comenzar la paginación desde el inicio. | 400Bad Request |
131201Request partially succeeded | No todas las operaciones a nivel de participante en la solicitud tuvieron éxito. | 206Partial Content Success |
131202Duplicate participant | Participantes duplicados en el array de participantes de entrada. | 400Bad Request |
131204Participant overlimit | El tamaño de participantes del grupo excede el límite. | 400Bad Request |
131207Group suspended | El grupo viola las políticas de la plataforma. | 403Forbidden |
131208Group 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. | 429Too Many Requests |
131209Invalid Group Profile Picture Aspect Ratio | El ancho y el alto de la imagen deben ser iguales. | 400Bad Request |
131210Image is Too Small to Process | El ancho y el alto de la imagen deben ser mayores a 192px. | 400Bad Request |
131211Group create limit reached | Se alcanzó el límite del número máximo de grupos que se pueden crear para este número. | 400Bad Request |
131212Participant is not a part of the group | El participante no forma parte del grupo. | 400Bad Request |
131213Group join request does not exist | La solicitud de unión al grupo no existe. | 400Bad Request |
131214Group 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. | 400Bad Request |
131215This 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. | 400Bad 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
| Placeholder | Descripción |
|---|---|
<CONVERSATION_ID> | Versión 24.0 y superiores: - El objeto conversation se omitirá por completoVersió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
| Nombre | Descripción |
|---|---|
product_typestipo: 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 entrantesSi 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
| Nombre | Descripció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?
- Puedes enviar el enlace de invitación en una conversación 1:1.
- Una nueva plantilla de utilidad está disponible en la Template Library para enviar enlaces de invitación de grupo.
- También puedes crear plantillas de marketing de formato libre personalizadas.
¿En qué países está disponible Groups?
- Groups está disponible en todos los países donde Cloud API está disponible.