/api/{*rest}
/api/* のプリフライト用です。常に 200 OK を返します。
このページは ChBot_Server が受け持つ HTTP API の一覧です。
| HTTP API | https://hub.vip-server.net |
|---|
成功時は原則として ok: true を返します。
HTTP ステータスは 503 です。
{
"ok": false,
"error": "device not connected"
}
HTTP ステータスは 504 です。
{
"ok": false,
"error": "timeout"
}
必須項目不足などの入力エラーは 400 です。
/api/{*rest}/api/* のプリフライト用です。常に 200 OK を返します。
/api/devices接続中のクライアント名を取得します。names は重複なし、文字列昇順です。
なし。
| 名前 | 型 | 説明 |
|---|---|---|
ok | boolean | 成功時は true |
names | string[] | 接続中クライアント名の配列 |
{
"ok": true,
"names": ["178e1", "bot"]
}
/api/device-display-names接続中端末と、Hub が知っている表示名・ADB ID一覧を取得します。別名として GET /api/device_display_names も同じ処理です。ADB IDは、HubからADBトンネル経由で照会できたAndroidクライアントにだけ設定されます。
なし。
| 名前 | 型 | 説明 |
|---|---|---|
ok | boolean | 成功時は true |
devices | object[] | 接続中端末の配列 |
devices[].name | string | 端末名 |
devices[].displayName | string/null | 表示名。未設定の場合は null |
devices[].adbId | string/null | ADB ID。ADBで照会できない場合は null |
displayNames | object | Hub が保持している表示名の連想配列。キーは端末名、値は表示名 |
adbIds | object | Hub が保持しているADB IDの連想配列。キーは端末名、値はADB ID |
{
"ok": true,
"devices": [
{ "name": "178e1", "displayName": "端末A", "adbId": "R9XXXXXXXXX" },
{ "name": "bot", "displayName": null, "adbId": null }
],
"displayNames": {
"178e1": "端末A"
},
"adbIds": {
"178e1": "R9XXXXXXXXX"
}
}
/api/command任意の端末コマンドを送ります。
{
"device": "送信先クライアント名",
"command": "コマンド名",
"timeoutMs": 15000,
"payload": {
"コマンドごとの入力名": "値"
}
}
| 名前 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
device | string | 必須 | なし | 送信先クライアント名 |
command / Command | string | 必須 | なし | 対応コマンド参照 |
payload / message / data | object | 任意 | なし | コマンドごとの入力。対応コマンドの入力欄が なし の場合は不要 |
timeoutMs | number/string | 任意 | 15000 | タイムアウト時間 |
{
"device": "178e1",
"command": "GET_ROOT_STATUS",
"timeoutMs": 15000
}
| 名前 | 型 | 説明 |
|---|---|---|
ok | boolean | 成功時は true |
id | string | このHTTPリクエストで端末へ送った処理ID |
device | string | 対象クライアント名 |
command | string | 実行したコマンド名 |
reply | object/string/null | コマンドの結果。形式はコマンドごとに異なります |
{
"ok": true,
"id": "20260812134800123",
"device": "178e1",
"command": "GET_ROOT_STATUS",
"reply": {
"rooted": false,
"suAvailable": false,
"suOutput": "",
"signals": [],
"note": "Root detection is heuristic and can be hidden by root-hiding tools."
}
}
| Command | 用途 | 入力 | 出力 |
|---|---|---|---|
GET_ROOT_STATUS | root 判定情報を取得 | なし | 出力説明へ |
CHANGE_IP | モバイル回線のIPを変更 | なし | root端末はアプリへ中継。非root端末はADBでモバイルデータ通信をOFF/ONし、有効なIPを取得後に応答 |
| 名前 | 型 | 説明 |
|---|---|---|
rooted | boolean | root の可能性を示す判定結果。root 由来のシグナルが見つかった場合は true |
suAvailable | boolean | su コマンドを実行できたかどうか |
suOutput | string | su コマンド実行時の出力。実行できない場合は空文字 |
signals | string[] | root 判定に使われた検出項目の配列。例: path:/system/xbin/su, package:com.topjohnwu.magisk |
note | string | root 判定がヒューリスティックであることを示す補足文 |
/api/ip端末の IP 情報を取得します。
| クエリ | 必須 | 既定値 | 説明 |
|---|---|---|---|
device | 必須 | なし | 送信先クライアント名 |
timeoutMs | 任意 | 15000 | タイムアウト時間 |
GET /api/ip?device=178e1&timeoutMs=15000
成功レスポンス(HTTPレスポンス全体):
| 名前 | 型 | 説明 |
|---|---|---|
ok | boolean | 成功時は true |
id | string | このHTTPリクエストで端末へ送った処理ID |
device | string | 対象クライアント名 |
reply | string | 端末のモバイル回線側 IP |
{
"ok": true,
"id": "20260812134800123",
"device": "178e1",
"reply": "..."
}
/api/battery端末のバッテリー情報を取得します。
| クエリ | 必須 | 既定値 | 説明 |
|---|---|---|---|
device | 必須 | なし | 送信先クライアント名 |
timeoutMs | 任意 | 15000 | タイムアウト時間 |
GET /api/battery?device=178e1&timeoutMs=15000
成功レスポンス(HTTPレスポンス全体):
| 名前 | 型 | 説明 |
|---|---|---|
ok | boolean | 成功時は true |
id | string | このHTTPリクエストで端末へ送った処理ID |
device | string | 対象クライアント名 |
reply | string | バッテリー情報の JSON 文字列 |
JSON.parse(reply).level | number | reply 文字列をJSONとして読んだ時のバッテリー残量。0 から 100 |
JSON.parse(reply).temperatureCelsius | number/null | reply 文字列をJSONとして読んだ時のバッテリー温度。摂氏 |
JSON.parse(reply).chargingStatus | string | reply 文字列をJSONとして読んだ時の充電状態。charging, discharging, not_charging, full, unknown のいずれか |
{
"ok": true,
"id": "20260812134800123",
"device": "178e1",
"reply": "{\"level\":85,\"temperatureCelsius\":32.4,\"chargingStatus\":\"charging\"}"
}
/api/battery は reply を文字列のまま返します。/api/command に GET_BATTERY を指定した場合は、同じ端末応答がJSONとして読めれば reply はobjectになります。
/api/change_ip端末の IP 変更処理を実行します。root端末では従来どおりアプリへコマンドを中継します。非root端末ではHubが対応するADB IDを使ってモバイルデータ通信をOFFにし、0.8秒後にONへ戻して、端末のモバイル回線から有効なIPアドレスを取得できるまで応答を待ちます。JSON body の値がある場合は body がクエリより優先されます。
| 名前 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
device | string | 必須 | なし | 送信先クライアント名 |
timeoutMs | number | 任意 | 90000 | root判定、回線切替、IP取得を含む全体のタイムアウト時間 |
{
"device": "178e1",
"timeoutMs": 90000
}
POST /api/change_ip?device=178e1&timeoutMs=90000
成功レスポンス(HTTPレスポンス全体):
| 名前 | 型 | 説明 |
|---|---|---|
ok | boolean | 成功時は true |
id | string | このHTTPリクエストで端末へ送った処理ID |
device | string | 対象クライアント名 |
reply | string | root端末ではアプリの処理結果。非root端末では切替後に確認できたIPアドレス |
{
"ok": true,
"id": "20260812134800123",
"device": "178e1",
"reply": "203.0.113.10"
}
非root端末でADB IDが未取得、モバイルデータ通信を切り替えられない、またはタイムアウトまでに有効なIPを取得できない場合はエラーを返します。WebSocket中継で受け付けた CHANGE_IP にも同じ分岐を適用します。
/api/post端末へ POST コマンドを送り、端末側から指定 URL へ HTTP POST させます。
| 名前 | 型 | 必須 | 既定値 | 説明 |
|---|---|---|---|---|
device | string | 必須 | なし | 送信先クライアント名 |
url | string | 必須 | なし | 端末から POST する URL |
headers | object | 任意 | {} | 端末から送る HTTP ヘッダー |
body | string | 任意 | "" | 端末から送る body |
timeoutMs | number | 任意 | 20000 | タイムアウト時間 |
mobile | boolean | 任意 | true | mobile フラグ |
{
"device": "178e1",
"url": "https://example.com",
"headers": { "User-Agent": "..." },
"body": "...",
"timeoutMs": 20000,
"mobile": true
}
成功レスポンス(HTTPレスポンス全体):
| 名前 | 型 | 説明 |
|---|---|---|
ok | boolean | 成功時は true |
id | string | このHTTPリクエストで端末へ送った処理ID |
device | string | 対象クライアント名 |
reply | object/string/null | 端末側 POST の結果。JSON として扱える場合は object |
reply.mona | string | MonaKey ヘッダー値。無い場合は空文字 |
reply.monaTicket | string | MonaTicket 値。無い場合は空文字 |
reply.posterId | string | X-PosterID ヘッダー値。無い場合は空文字 |
reply.Body | string | POST 先から返った HTML またはエラー本文 |
{
"ok": true,
"id": "20260812134800123",
"device": "178e1",
"reply": {}
}
reply は JSON または文字列です。