Resumo
A Integration API cshub é um caminho externo para enviar mensagens WhatsApp do seu backend / ferramenta de automação. Use a Local API Key por empresa para autenticação (comportamento espelhado do whatscrmhub Laravel). Este endpoint é separado do endpoint interno usado pelo painel + aplicativo móvel cshub.
Base URL
https://api.cshub.id/api/v1
Content-Type
application/json
Autenticação
Autentique usando a Local API Key no corpo da requisição (campo `api_key`), não no cabeçalho HTTP. Cada empresa tem 1 Local API Key (UUID) que é gerada automaticamente quando a empresa é criada.
Sem JWT, sem cabeçalho de token
Diferente do endpoint interno do painel. Basta enviar `api_key` no corpo, o servidor resolve a empresa a partir daí. Para segurança, trate a Local API Key como uma senha — não a comite em repositórios públicos, não a exponha no frontend.
Como obter a Local API Key
- Faça login no painel cshub em /app.
- Abra o menu Configurações → API Key (ou Perfil → Integração).
- Copie a Local API Key. Pode regenerar a qualquer momento (a antiga se torna inválida imediatamente).
Endpoint
Um endpoint para todos os tipos de mensagens WhatsApp Não Oficiais (whatsmeow). Escolha o método = text para mensagens livres, ou método = template para mensagens de um template já criado no painel.
https://api.cshub.id/api/v1/integration/whatsapp/send-message
Autenticação
Local API Key no corpo (`api_key`)
Limite de taxa
Por dispositivo (de acordo com o limite daily_send do dispositivo)
Campo corpo
Corpo da requisição no formato JSON. Os campos abaixo têm paridade com o whatscrmhub Laravel — se você estiver migrando de uma versão antiga, a forma da requisição é idêntica.
| Field | Type | Required | Descrição |
|---|---|---|---|
| api_key | string | ✅ | Local API Key da empresa (UUID). Obtida nas Configurações do painel cshub. |
| phone | string | ✅ | Número de destino no formato internacional sem "+" (ex. 6281234567890), ou JID de grupo se `is_group` = true. |
| method | string | ✅ | text, template |
| text | string | method=text | Conteúdo da mensagem de texto. Obrigatório se o método = text. |
| template | string | method=template | ID do Template de Mensagem que já foi criado no painel cshub. Obrigatório se o método = template. |
| variables | object | — | Objeto literal `{placeholder: value}` para substituição no template. Exemplo: `{"$name":"Budi"}` substituirá todos os `$name` na mensagem template por "Budi". |
| device_key | string | dependente * | UUID do dispositivo WhatsApp que será usado para enviar. |
| is_group | boolean | — | Defina como verdadeiro se `phone` for JID de grupo (ex. 120363...@g.us). |
Exemplo de requisição
1. Enviar mensagem de texto simples
curl -X POST "https://api.cshub.id/api/v1/integration/whatsapp/send-message" \
-H "Content-Type: application/json" \
-d '{
"api_key": "<LOCAL_API_KEY>",
"device_key": "<DEVICE_ID>",
"phone": "6281234567890",
"method": "text",
"text": "Halo, makasih udah order ya!"
}'
2. Enviar mensagem de template com substituição de variáveis
curl -X POST "https://api.cshub.id/api/v1/integration/whatsapp/send-message" \
-H "Content-Type: application/json" \
-d '{
"api_key": "<LOCAL_API_KEY>",
"device_key": "<DEVICE_ID>",
"phone": "6281234567890",
"method": "template",
"template": "<TEMPLATE_ID>",
"variables": {
"$name": "Pak Budi",
"$order_id": "INV-20260602-001"
}
}'
3. Enviar para grupo (usando JID de grupo)
curl -X POST "https://api.cshub.id/api/v1/integration/whatsapp/send-message" \
-H "Content-Type: application/json" \
-d '{
"api_key": "<LOCAL_API_KEY>",
"device_key": "<DEVICE_ID>",
"phone": "120363012345678901@g.us",
"method": "text",
"text": "Pengumuman: order minggu ini ditutup pukul 17:00.",
"is_group": true
}'
Resposta de sucesso (200 OK)
{
"status": true,
"message": "berhasil mengirim pesan"
}
Código de erro & solução
| Status | Causa | Solução |
|---|---|---|
| 401 | Api Key Cannot be recognized | Verifique se o api_key está correto (copie novamente do painel) e se a empresa não está suspensa. |
| 401 | Device tidak di temukan | Verifique se o device_key é válido + se o dispositivo está ativo. Faça login novamente no dispositivo via QR/código de pareamento no painel se necessário. |
| 401 | Template tidak dikenali | Verifique se o ID do template está correto e pertence à sua empresa (template = veja a lista no painel → Dados Mestres → Templates). |
| 422 | Daily send limit habis | Aguarde o reset diário (00:00 WIB) ou use outro dispositivo. Aumente o limit_per_day nas configurações do dispositivo se necessário. |
| 422 | Validation gagal (phone/method/text) | Certifique-se de que o telefone está no formato internacional sem "+" e que o método é um dos text/template. |
| 502 | WhatsApp service unavailable | O serviço WhatsApp está fora do ar. Tente novamente em alguns minutos ou verifique o status do dispositivo no painel. |
Notas & limitações
- Há um limite daily_send por dispositivo. Evite enviar mais de 10 mensagens/segundo de um único dispositivo para evitar bloqueio do WhatsApp.
- Se as configurações da sua empresa definirem `api_device_use = required`, o campo `device_key` É OBRIGATÓRIO. Se definido como opcional, o servidor escolherá automaticamente um dispositivo ativo de acordo com a estratégia (`sequence` / `spin` / `random` nas configurações `whatsapp_sender_notif`).
- Substitua variáveis usando literal `str_replace` — o placeholder pode ser qualquer string (ex. `$name`, `{name}`, `[NAME]`). O importante é que seja exatamente igual ao que está na mensagem template.
- Sempre no formato sem "+" e sem espaços/tracos. Exemplo: 6281234567890 (Indonésia), 60123456789 (Malásia). Para grupos: use o JID completo com o sufixo `@g.us`.
- Iteração MVP: ainda não suporta upload de arquivo binário via multipart/form-data. Para enviar mídia, use method=template com um template que já tenha a imagem configurada no painel.
Integration API vs Internal Panel API
cshub possui dois caminhos para enviar mensagens que foram intencionalmente separados. A Integration API é para desenvolvedores de terceiros / automação; a Internal API é para o painel web + aplicativo móvel cshub. Público diferente, autenticação diferente, forma de resposta diferente.
| Integration API | Internal Panel API | |
|---|---|---|
| Público | Desenvolvedor backend, Zapier, n8n, integração personalizada | Painel web cshub-fe, aplicativo móvel cshub-mobile |
| URL | /integration/whatsapp/send-message | /app/device/{id}/chats/send |
| Autenticação | api_key di body | JWT Bearer + X-Business-ID + CSRF |
| Forma de resposta | {status, message} | {success, message, data} |
Pronto para integrar?
Faça login no painel cshub, obtenha a Local API Key nas Configurações e integre o WhatsApp ao seu sistema.