WhatsApp Business API — criar grupo no WhatsApp para equipe
Este cenário usa a API de grupos com uma operação de criação para provisionar um grupo do WhatsApp nomeado para transmissões da equipe.
Visão geral do caso de uso
Este cenário utiliza a API de grupos com uma operação de criação para provisionar um grupo do WhatsApp nomeado para transmissões da equipe. Nenhuma janela de sessão de 24 horas é necessária porque a chamada é uma ação de gerenciamento de canal.
Exemplo de modelo
Grupo interno criado para transmissão de vendas — compartilhe o link de convite com sua equipe.

Quando usá-lo
Aproveite isso quando vendas ou marketing precisarem de um grupo dedicado no WhatsApp para transmissão interna e coordenação de campanhas, e criar grupos manualmente no aplicativo de negócios não for escalável entre canais ou automação. Isso se encaixa para desenvolvedores que conectam IA ou gatilhos administrativos, pequenas equipes que estabelecem um canal de transmissão nomeado e agências que provisionam grupos de campanha para clientes sem etapas administrativas manuais.
Fluxo de Trabalho
- Gatilho
Um evento de administrador ou CRM aciona o provisionamento do grupo da equipe.
event·triggered - Capturar evento
grupos criam coleções com o nome do grupo e a descrição de transmissão interna.
POST/groups - Construir e enviar
A API retorna metadados do grupo, incluindo o link de convite.
POST/groups - Entregue
Seu sistema compartilha a URL de convite com membros autorizados da equipe.
delivered

Implementação técnica
Pré-requisitos
- Chave da API 1MSG · Como obter a chave da API
- Conta do WhatsApp Business · Como Conectar o WABA
- Janela de sessão aberta 24 horas · Como funciona a janela de 24 horas
- Consentimento do cliente · Como Gerenciar o Consentimento dos Clientes
Exemplos 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
Status de resposta e entrega
HTTP 2xx e JSON"sent": truemean 1MSGaceitoA mensagem para envio — não que já tenha chegado no celular do cliente. Salve aidcampowamid.…) para correlacionar os callbacks de entrega.
{
"sent": true,
"id": "wamid.HBgLMzgwNjM5...",
"message": "Message accepted for delivery"
}sentAceito para envio.nãoainda no telefone do cliente
idArmazene isso; retornos de entrega.
hookInfoestão focados nisso
A entrega em si chega mais tarde, como um callback separado. Registre um webhookPOST …/webhook) e 1MSG POSTs atualizações de status para o seu endpoint HTTPS em um nível superiorhooks[]carga.
{
"hooks": [
{
"id": "gBGGeSaGViBfAgnlzOSHEwK9O6F",
"type": "message",
"status": "sent",
"timestamp": "1654864094",
"recipient_id": "556123122026"
}
]
}statussent,delivered,read— ou um status de falha quando aplicávelidCorrela o retorno com o
idretornado pela chamada de enviotimestampSegundos Unix, como uma string
Se você preferir não receber retornos de chamada, faça uma votação.GET {base}/{channel}/hookInfo?messageId=<id>em vez disso. Na prática, a entrega geralmente é concluída em segundos — mas o contrato da API não garante isso, então nunca bloqueie um fluxo esperando por isso.
Erros comuns
| Status | Resposta | Causa |
|---|---|---|
| 200 | Message was not sent: empty body | No body in the request. |
| 200 | Message was not sent: provide chatId, phone, bsuid, or username | No recipient the channel could resolve. |
| 200 | wrong file | The media could not be fetched or uploaded — not a reachable URL, not valid base64. |
| 403 | access denied | The token is wrong, or belongs to a different channel than the URL. |
| 200 | Message was not sent: filename | sendFile called without a filename, so the media has no extension to send. |

