WhatsApp Business API para difusión de equipo — crear grupo de whatsapp
Este escenario usa la API groups con operación create para aprovisionar un grupo de WhatsApp nombrado para difusiones de equipo.
Descripción del caso de uso
Este escenario usa la API groups con operación create para aprovisionar un grupo de WhatsApp nombrado para difusiones de equipo. No se requiere ventana de sesión de 24 horas porque la llamada es una acción de gestión de canal.
Ejemplo de plantilla
Grupo interno creado para difusión de ventas — comparte el enlace de invitación con tu equipo.

Cuándo usarlo
Usa este escenario cuando ventas o marketing necesitan un grupo de WhatsApp dedicado para difusión interna y coordinación de campañas, y crear grupos a mano en la app Business no escala entre canales ni con automatización. Encaja para desarrolladores que conectan eventos de CRM o admin, equipos pequeños que levantan un canal de difusión con nombre, y agencias que aprovisionan grupos de campaña para clientes sin pasos manuales de administración.
Flujo de trabajo
- Disparador
Un evento de admin o CRM dispara el aprovisionamiento del grupo de equipo.
evento·disparado - Capturar evento
groups create establece el nombre del grupo y la descripción de difusión interna.
POST/groups - Construir y enviar
La API devuelve metadatos del grupo incluyendo el enlace de invitación.
POST/groups - Entregado
Tu sistema comparte la URL de invitación con miembros autorizados del equipo.
entregado

Implementación técnica
Requisitos previos
- Clave API de 1MSG · Cómo obtener la clave API
- Cuenta de WhatsApp Business · Cómo conectar WABA
- Ventana de sesión de 24 horas abierta · Cómo funciona la ventana de 24 horas
- Opt-in del cliente · Cómo gestionar el consentimiento
Ejemplos de código
#!/usr/bin/env bash
set -euo pipefail
# === Configuration (replace "___" placeholders) ===
API_BASE_URL="https://api.1msg.io" # production 1MSG API base URL
CHANNEL_ID="___" # channel ID from 1MSG dashboard
API_TOKEN="___" # channel JWT token (Bearer)
URL="${API_BASE_URL%/}/${CHANNEL_ID}/groups"
read -r -d '' PAYLOAD <<JSON || true
{
"groupName": "Sales team Q1",
"description": "Internal broadcast"
}
JSON
RESPONSE="$(curl -s -w '\n%{http_code}' -X POST "$URL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${API_TOKEN}" \
-d "$PAYLOAD")"
HTTP_CODE="$(printf '%s' "$RESPONSE" | tail -n1)"
BODY="$(printf '%s' "$RESPONSE" | sed '$d')"
case "$BODY" in
*'"created":true'*) ok=1 ;;
*) ok=0 ;;
esac
if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ] && [ "$ok" -eq 1 ]; then
echo "$BODY"
else
echo "$BODY" >&2
exit 1
fi
Respuesta y estado de entrega
HTTP 2xx y JSON "sent": true significan que 1MSG aceptó el mensaje para envío — no que ya llegó al teléfono del cliente. Guarda el campo id (tipo wamid.…) para correlacionar los callbacks de entrega.
{
"sent": true,
"id": "wamid.HBgLMzgwNjM5...",
"message": "Message accepted for delivery"
}sentAceptado para envío — aún no en el teléfono del cliente
idGuárdalo; los callbacks de entrega y
hookInfose basan en él
La entrega llega después, como un callback aparte. Registra un webhook (POST …/webhook) y 1MSG enviará las actualizaciones de estado a tu endpoint HTTPS en un payload hooks[] de nivel superior.
{
"hooks": [
{
"id": "gBGGeSaGViBfAgnlzOSHEwK9O6F",
"type": "message",
"status": "sent",
"timestamp": "1654864094",
"recipient_id": "556123122026"
}
]
}statussent,delivered,read— o un estado de fallo cuando apliqueidCorrelaciona el callback con el
iddevuelto por el envíotimestampSegundos Unix, como cadena
Si prefieres no recibir callbacks, consulta GET {base}/{channel}/hookInfo?messageId=<id> en su lugar. En la práctica la entrega suele completarse en segundos — pero el contrato de la API no lo garantiza, así que nunca bloquees un flujo esperándola.
Errores frecuentes
| Estado | Respuesta | Causa |
|---|---|---|
| 200 | Message was not sent: empty body | Falta body en la petición. |
| 200 | Message was not sent: provide chatId, phone, bsuid, or username | Ningún destinatario que el canal pudiera resolver. |
| 200 | wrong file | El archivo no se pudo descargar ni subir — URL inalcanzable o base64 inválido. |
| 403 | access denied | El token es incorrecto, o pertenece a otro canal que el de la URL. |
| 200 | Message was not sent: filename | sendFile sin filename: el archivo no tiene extensión que enviar. |

