Aperçu
L'API d'intégration cshub est le chemin externe pour envoyer des messages WhatsApp depuis ton backend ou tes outils d'automatisation. Elle utilise une clé API locale par entreprise pour l'authentification (correspondant au comportement Laravel de whatscrmhub). Ce point de terminaison est séparé des points de terminaison internes utilisés par le panneau cshub + l'application mobile.
Base URL
https://api.cshub.id/api/v1
Content-Type
application/json
Authentification
L'auth utilise une clé API locale dans le corps de la requête (`api_key`), pas dans un en-tête HTTP. Chaque entreprise a une clé API locale (UUID) qui est générée automatiquement lors de la création de l'entreprise.
Pas de JWT, pas d'en-têtes de token
Contrairement aux points de terminaison internes du panneau, tu mets simplement `api_key` dans le corps et le serveur résout l'entreprise à partir de là. Traite ta clé API locale comme un mot de passe — ne la commets jamais dans des dépôts publics ou ne l'expose pas dans le code frontend.
Comment obtenir la clé API locale
- Connecte-toi au panneau cshub à /app.
- Ouvre Paramètres → Clé API (ou Profil → Intégration).
- Copie la clé API locale. Tu peux la régénérer à tout moment — l'ancienne clé devient immédiatement invalide.
Point de terminaison
Un seul point de terminaison couvre chaque envoi WhatsApp non officiel (whatsmeow). Choisis method = text pour des messages libres, ou method = template pour envoyer un modèle que tu as déjà configuré dans le panneau.
https://api.cshub.id/api/v1/integration/whatsapp/send-message
Auth
Clé API locale dans le corps (`api_key`)
Limite de taux
Par appareil (suit la limite daily_send de l'appareil)
Champs du corps
Le corps est en JSON. Les champs ci-dessous sont en parité avec whatscrmhub Laravel — en migrant de l'ancienne version, la forme de la requête est identique.
| Field | Type | Required | Description |
|---|---|---|---|
| api_key | string | ✅ | Clé API locale par entreprise (UUID). Prends-la dans Paramètres dans le panneau cshub. |
| phone | string | ✅ | Numéro de téléphone du destinataire au format international sans "+" (par exemple 6281234567890), ou un JID de groupe lorsque `is_group` est vrai. |
| method | string | ✅ | text, template |
| text | string | method=text | Corps du message. Requis lorsque method = text. |
| template | string | method=template | ID de modèle de message créé dans le panneau cshub. Requis lorsque method = template. |
| variables | object | — | Objet littéral `{placeholder: value}` pour la substitution de modèle. Exemple : `{"$name":"Budi"}` remplace chaque `$name` dans le message modèle par "Budi". |
| device_key | string | dépend * | UUID de l'appareil WhatsApp à partir duquel envoyer. |
| is_group | boolean | — | Mettre vrai si `phone` est un JID de groupe (par exemple 120363...@g.us). |
Exemples de requêtes
1. Envoyer un simple message texte
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. Envoyer un modèle avec substitution de variable
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. Envoyer à un groupe (utiliser le JID de groupe)
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
}'
Réponse de succès (200 OK)
{
"status": true,
"message": "berhasil mengirim pesan"
}
Codes d'erreur & corrections
| Status | Cause | Correction |
|---|---|---|
| 401 | Api Key Cannot be recognized | Vérifie que la api_key est correcte (copie à nouveau depuis le panneau) et que l'entreprise n'est pas suspendue. |
| 401 | Device tidak di temukan | Vérifie que device_key est valide et que l'appareil est actif. Réassocie l'appareil via QR/code de couplage dans le panneau si nécessaire. |
| 401 | Template tidak dikenali | Vérifie que l'ID de modèle est correct et appartient à ton entreprise (la liste des modèles se trouve dans le panneau → Données maîtres → Modèles). |
| 422 | Daily send limit habis | Attends la réinitialisation quotidienne (00:00 WIB) ou passe à un autre appareil. Augmente la limit_per_day sur l'appareil si nécessaire. |
| 422 | Validation gagal (phone/method/text) | Assure-toi que le téléphone est au format international sans "+" et que la méthode est l'une des text/template. |
| 502 | WhatsApp service unavailable | Le service WhatsApp est en panne. Réessaie dans quelques minutes ou vérifie l'état de l'appareil dans le panneau. |
Notes & limites
- Il y a une limite daily_send par appareil. Évite d'envoyer plus de ~10 messages/seconde depuis un seul appareil pour éviter les interdictions de WhatsApp.
- Si ton entreprise a `api_device_use = required`, le champ `device_key` est obligatoire. Avec cela en option, le serveur choisit un appareil actif basé sur le paramètre `whatsapp_sender_notif` (`sequence` / `spin` / `random`).
- La substitution de variable utilise `str_replace` littéral — les espaces réservés peuvent être n'importe quelle chaîne (par exemple, `$name`, `{name}`, `[NAME]`). Il doit juste correspondre exactement au texte à l'intérieur du message modèle.
- Toujours formater sans "+" et sans espaces/tracés. Exemple : 6281234567890 (Indonésie), 60123456789 (Malaisie). Pour les groupes, utilise le JID complet avec le suffixe `@g.us`.
- Itération MVP : le téléchargement de fichiers binaires via multipart/form-data n'est pas encore pris en charge. Pour envoyer des médias, utilise method=template avec un modèle qui a déjà une image configurée dans le panneau.
API d'intégration vs API du panneau interne
cshub garde délibérément deux chemins d'envoi de messages. L'API d'intégration est destinée aux développeurs tiers et à l'automatisation ; l'API interne alimente le panneau web cshub et l'application mobile. Public différent, auth différent, forme de réponse différente.
| Integration API | API du panneau interne | |
|---|---|---|
| Public | Développeurs backend, Zapier, n8n, intégrations personnalisées | Panneau web cshub-fe, application mobile cshub |
| URL | /integration/whatsapp/send-message | /app/device/{id}/chats/send |
| Auth | api_key di body | JWT Bearer + X-Business-ID + CSRF |
| Forme de réponse | {status, message} | {success, message, data} |
Prêt à intégrer ?
Connecte-toi au panneau cshub, prends ta clé API locale dans Paramètres, et commence à envoyer des WhatsApp depuis ton système.