概要
cshubのIntegration APIは、バックエンド/自動化ツールからWhatsAppメッセージを送信するための外部経路です。ビジネスごとにLocal API Keyを使用して認証します(whatscrmhub Laravelの動作をミラーします)。このエンドポイントは、cshubのパネルとモバイルアプリで使用される内部エンドポイントとは別です。
Base URL
https://api.cshub.id/api/v1
Content-Type
application/json
認証
リクエストボディにLocal API Keyを使用します(フィールド`api_key`)、HTTPヘッダーではありません。各ビジネスには、ビジネス作成時に自動生成される1つのLocal API Key(UUID)があります。
JWTはありません、トークンヘッダーもありません
パネルの内部エンドポイントとは異なります。ボディに`api_key`を送信するだけで、サーバーがそこからビジネスを解決します。セキュリティのために、Local API Keyをパスワードのように扱ってください — 公開リポジトリにコミットしないでください、フロントエンドに露出しないでください。
Local API Keyの取得方法
- /appでcshubのパネルにログインします。
- メニュー設定 → API Key(またはプロフィール → 統合)を開きます。
- Local API Keyをコピーします。いつでも再生成可能です(古いものはすぐに無効になります)。
エンドポイント
すべての種類のWhatsApp Unofficialメッセージ(whatsmeow)用の1つのエンドポイント。自由なメッセージにはmethod = textを、パネルで作成したテンプレートからのメッセージにはmethod = templateを選択します。
https://api.cshub.id/api/v1/integration/whatsapp/send-message
認証
ボディにLocal API Key(`api_key`)
レート制限
デバイスごと(デバイスのdaily_send制限に従う)
ボディフィールド
リクエストボディはJSON形式です。以下のフィールドはwhatscrmhub Laravelと同じです — 古いバージョンから移行する場合、リクエストの形状は同一です。
| Field | Type | Required | 説明 |
|---|---|---|---|
| api_key | string | ✅ | ビジネスのLocal API Key(UUID)。cshubの設定パネルから取得します。 |
| phone | string | ✅ | 国際フォーマットの宛先番号(例:6281234567890)、または`is_group` = trueの場合はグループJID。 |
| method | string | ✅ | text, template |
| text | string | method=text | テキストメッセージの内容。method = textの場合は必須です。 |
| template | string | method=template | cshubのパネルで作成したメッセージテンプレートのID。method = templateの場合は必須です。 |
| variables | object | — | テンプレート内の置換用のオブジェクトリテラル`{placeholder: value}`。例:`{"$name":"Budi"}`は、テンプレートメッセージ内のすべての`$name`を"Budi"に置き換えます。 |
| device_key | string | 依存する* | 送信に使用するWhatsAppデバイスのUUID。 |
| is_group | boolean | — | `phone`がグループJIDの場合はtrueに設定します(例:120363...@g.us)。 |
リクエストの例
1. シンプルなテキストメッセージを送信
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. 変数置換を伴うテンプレートメッセージを送信
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. グループに送信(グループ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
}'
成功レスポンス(200 OK)
{
"status": true,
"message": "berhasil mengirim pesan"
}
エラーコードと解決策
| Status | 原因 | 解決策 |
|---|---|---|
| 401 | Api Key Cannot be recognized | api_keyが正しいか(パネルから再コピー)を確認し、ビジネスが一時停止されていないことを確認します。 |
| 401 | Device tidak di temukan | device_keyが有効で、デバイスがアクティブな状態であることを確認します。必要に応じて、パネルでQR/ペアコードを使用してデバイスに再ログインします。 |
| 401 | Template tidak dikenali | テンプレートIDが正しく、あなたのビジネスのものであることを確認します(テンプレート = パネルのリストを参照 → マスターデータ → テンプレート)。 |
| 422 | Daily send limit habis | 日次リセット(00:00 WIB)を待つか、別のデバイスを使用します。必要に応じて、デバイスのsettingsでlimit_per_dayを上げます。 |
| 422 | Validation gagal (phone/method/text) | 電話番号が国際フォーマットで「+」なしであること、かつmethodがtext/templateのいずれかであることを確認します。 |
| 502 | WhatsApp service unavailable | WhatsAppサービスがダウンしています。数分後に再試行するか、パネルでデバイスの状態を確認してください。 |
注意事項と制限
- デバイスごとにdaily_send制限があります。1つのデバイスから10メッセージ/秒を超えるブラスティングは避けて、WhatsAppの禁止を回避してください。
- ビジネスの設定が`api_device_use = required`に設定されている場合、フィールド`device_key`は必須です。オプションに設定されている場合、サーバーはアクティブなデバイスを戦略に応じて自動選択します(`sequence` / `spin` / `random`は`whatsapp_sender_notif`の設定で)。
- 変数の置換はリテラル`str_replace`を使用します — プレースホルダーは任意の文字列(例:`$name`、`{name}`、`[NAME]`)で構いません。テンプレートメッセージにあるものと正確に一致することが重要です。
- 常に「+」なし、スペース/ハイフンなしのフォーマットで。例:6281234567890(インドネシア)、60123456789(マレーシア)。グループの場合:サフィックス`@g.us`を持つ完全なJIDを使用します。
- MVPのイテレーション:multipart/form-data経由でのバイナリファイルのアップロードはサポートされていません。メディアを送信するには、パネルで設定された画像を持つテンプレートを使用してmethod=templateを使用します。
Integration APIとInternal Panel API
cshubには、意図的に分離された2つのメッセージ送信経路があります。Integration APIはサードパーティの開発者/自動化用、Internal APIはcshubのウェブパネルとモバイルアプリ用です。異なるオーディエンス、異なる認証、異なるレスポンス形状です。
| Integration API | Internal Panel API | |
|---|---|---|
| オーディエンス | バックエンド開発者、Zapier、n8n、カスタム統合 | cshub-feのウェブパネル、cshub-mobileのモバイルアプリ |
| URL | /integration/whatsapp/send-message | /app/device/{id}/chats/send |
| 認証 | api_key di body | JWT Bearer + X-Business-ID + CSRF |
| レスポンス形状 | {status, message} | {success, message, data} |