Übersicht
Die cshub Integrations-API ist der externe Weg, um WhatsApp-Nachrichten von deinem Backend oder Automatisierungstools zu senden. Sie verwendet einen geschäftsspezifischen Local API Key zur Authentifizierung (entspricht dem whatscrmhub Laravel Verhalten). Dieser Endpunkt ist getrennt von den internen Endpunkten, die vom cshub-Panel + der mobilen App verwendet werden.
Base URL
https://api.cshub.id/api/v1
Content-Type
application/json
Authentifizierung
Die Authentifizierung verwendet einen Local API Key im Anfragekörper (`api_key`-Feld), nicht im HTTP-Header. Jedes Unternehmen hat einen Local API Key (UUID), der automatisch generiert wird, wenn das Unternehmen erstellt wird.
Kein JWT, keine Token-Header
Im Gegensatz zu den internen Panel-Endpunkten gibst du einfach `api_key` im Körper ein und der Server ermittelt das Unternehmen von dort. Behandle deinen Local API Key wie ein Passwort — gib ihn niemals in öffentlichen Repos an oder zeige ihn im Frontend-Code.
So erhältst du den Local API Key
- Melde dich im cshub-Panel unter /app an.
- Öffne Einstellungen → API Key (oder Profil → Integration).
- Kopiere den Local API Key. Du kannst ihn jederzeit regenerieren — der alte Schlüssel wird sofort ungültig.
Endpunkt
Ein einzelner Endpunkt deckt jede WhatsApp Unofficial (whatsmeow) Sendung ab. Wähle Methode = text für Freitextnachrichten oder Methode = template, um eine Vorlage zu senden, die du bereits im Panel konfiguriert hast.
https://api.cshub.id/api/v1/integration/whatsapp/send-message
Auth
Local API Key im Körper (`api_key`)
Rate-Limit
Pro Gerät (folgt dem täglichen Sendelimit des Geräts)
Körperfelder
Der Körper ist JSON. Die untenstehenden Felder entsprechen dem whatscrmhub Laravel — beim Migrieren von der älteren Version ist die Anforderungsstruktur identisch.
| Field | Type | Required | Beschreibung |
|---|---|---|---|
| api_key | string | ✅ | Pro-Unternehmen Local API Key (UUID). Hole ihn dir aus den Einstellungen im cshub-Panel. |
| phone | string | ✅ | Empfängertelefon im internationalen Format ohne "+" (z.B. 6281234567890) oder eine Gruppen-JID, wenn `is_group` wahr ist. |
| method | string | ✅ | text, template |
| text | string | method=text | Nachrichtentext. Erforderlich, wenn Methode = text. |
| template | string | method=template | Nachrichtenvorlagen-ID, die im cshub-Panel erstellt wurde. Erforderlich, wenn Methode = template. |
| variables | object | — | Wörtliches `{placeholder: value}`-Objekt für die Vorlagenersetzung. Beispiel: `{"$name":"Budi"}` ersetzt jedes `$name` in der Vorlagenachricht durch "Budi". |
| device_key | string | abhängig * | UUID des WhatsApp-Geräts, von dem gesendet werden soll. |
| is_group | boolean | — | Setze true, wenn `phone` eine Gruppen-JID ist (z.B. 120363...@g.us). |
Anforderungsbeispiele
1. Sende eine einfache Textnachricht
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. Sende eine Vorlage mit Variablenersetzung
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. Sende an eine Gruppe (verwende Gruppen-JID)
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
}'
Erfolgsantwort (200 OK)
{
"status": true,
"message": "berhasil mengirim pesan"
}
Fehlercodes & Lösungen
| Status | Ursache | Lösung |
|---|---|---|
| 401 | Api Key Cannot be recognized | Überprüfe, ob der api_key korrekt ist (nochmals aus dem Panel kopieren) und das Unternehmen nicht gesperrt ist. |
| 401 | Device tidak di temukan | Überprüfe, ob device_key gültig ist und das Gerät aktiv ist. Koppeln das Gerät bei Bedarf über QR/Paar-Code im Panel erneut. |
| 401 | Template tidak dikenali | Überprüfe, ob die Vorlagen-ID korrekt ist und zu deinem Unternehmen gehört (Vorlagenliste befindet sich im Panel → Stammdaten → Vorlagen). |
| 422 | Daily send limit habis | Warte auf den täglichen Reset (00:00 WIB) oder wechsle zu einem anderen Gerät. Erhöhe das limit_per_day auf dem Gerät, wenn nötig. |
| 422 | Validation gagal (phone/method/text) | Stelle sicher, dass das Telefon im internationalen Format ohne "+" und die Methode eine der Optionen text/template ist. |
| 502 | WhatsApp service unavailable | WhatsApp-Dienst ist ausgefallen. Versuche es in ein paar Minuten erneut oder überprüfe den Gerätestatus im Panel. |
Hinweise & Limits
- Es gibt ein tägliches Sendelimit pro Gerät. Vermeide es, mehr als ~10 Nachrichten/Sekunde von einem einzelnen Gerät zu senden, um WhatsApp-Sperren zu vermeiden.
- Wenn dein Unternehmen `api_device_use = required` hat, ist das Feld `device_key` obligatorisch. Wenn es optional ist, wählt der Server ein aktives Gerät basierend auf der Einstellung `whatsapp_sender_notif` (`sequence` / `spin` / `random`).
- Die Variablenersetzung verwendet wörtliches `str_replace` — Platzhalter können beliebige Zeichenfolgen sein (z.B. `$name`, `{name}`, `[NAME]`). Sie müssen genau mit dem Text in der Vorlagenachricht übereinstimmen.
- Immer ohne "+" und ohne Leerzeichen/Bindestriche formatieren. Beispiel: 6281234567890 (Indonesien), 60123456789 (Malaysia). Für Gruppen verwende die vollständige JID mit dem Suffix `@g.us`.
- MVP-Iteration: Der Upload von Binärdateien über multipart/form-data wird noch nicht unterstützt. Um Medien zu senden, verwende method=template mit einer Vorlage, die bereits ein Bild im Panel konfiguriert hat.
Integrations-API vs Interne Panel-API
cshub hält absichtlich zwei Wege zum Senden von Nachrichten bereit. Die Integrations-API ist für Drittentwickler und Automatisierung gedacht; die interne API versorgt das cshub-Webpanel und die mobile App. Unterschiedliches Publikum, unterschiedliche Authentifizierung, unterschiedliche Antwortstruktur.
| Integration API | Interne Panel-API | |
|---|---|---|
| Zielgruppe | Backend-Entwickler, Zapier, n8n, benutzerdefinierte Integrationen | cshub-fe Webpanel, cshub-mobile App |
| URL | /integration/whatsapp/send-message | /app/device/{id}/chats/send |
| Auth | api_key di body | JWT Bearer + X-Business-ID + CSRF |
| Antwortstruktur | {status, message} | {success, message, data} |
Bereit zur Integration?
Melde dich im cshub-Panel an, hole dir deinen Local API Key aus den Einstellungen und beginne, WhatsApp von deinem System aus zu senden.