ChBot Hub API 説明

Hub Status

このページは ChBot_Server が受け持つ HTTP API の一覧です。

ドメイン

HTTP APIhttps://hub.vip-server.net

共通レスポンス

成功時は原則として ok: true を返します。

端末未接続

HTTP ステータスは 503 です。

{
  "ok": false,
  "error": "device not connected"
}

タイムアウト

HTTP ステータスは 504 です。

{
  "ok": false,
  "error": "timeout"
}

必須項目不足などの入力エラーは 400 です。

HTTP API

OPTIONS/api/{*rest}

/api/* のプリフライト用です。常に 200 OK を返します。

GET/api/devices

接続中のクライアント名を取得します。names は重複なし、文字列昇順です。

入力

なし。

出力

名前説明
okboolean成功時は true
namesstring[]接続中クライアント名の配列
{
  "ok": true,
  "names": ["178e1", "bot"]
}

GET/api/device-display-names

接続中端末と、Hub が知っている表示名・ADB ID一覧を取得します。別名として GET /api/device_display_names も同じ処理です。ADB IDは、HubからADBトンネル経由で照会できたAndroidクライアントにだけ設定されます。

入力

なし。

出力

名前説明
okboolean成功時は true
devicesobject[]接続中端末の配列
devices[].namestring端末名
devices[].displayNamestring/null表示名。未設定の場合は null
devices[].adbIdstring/nullADB ID。ADBで照会できない場合は null
displayNamesobjectHub が保持している表示名の連想配列。キーは端末名、値は表示名
adbIdsobjectHub が保持している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"
  }
}

POST/api/command

任意の端末コマンドを送ります。

リクエスト全体の形式

{
  "device": "送信先クライアント名",
  "command": "コマンド名",
  "timeoutMs": 15000,
  "payload": {
    "コマンドごとの入力名": "値"
  }
}

リクエストパラメータ

名前必須既定値説明
devicestring必須なし送信先クライアント名
command / Commandstring必須なし対応コマンド参照
payload / message / dataobject任意なしコマンドごとの入力。対応コマンドの入力欄が なし の場合は不要
timeoutMsnumber/string任意15000タイムアウト時間

リクエスト例

{
  "device": "178e1",
  "command": "GET_ROOT_STATUS",
  "timeoutMs": 15000
}

成功レスポンス(HTTPレスポンス全体)

名前説明
okboolean成功時は true
idstringこのHTTPリクエストで端末へ送った処理ID
devicestring対象クライアント名
commandstring実行したコマンド名
replyobject/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_STATUSroot 判定情報を取得なし出力説明へ
CHANGE_IPモバイル回線のIPを変更なしroot端末はアプリへ中継。非root端末はADBでモバイルデータ通信をOFF/ONし、有効なIPを取得後に応答

GET_ROOT_STATUS の reply

名前説明
rootedbooleanroot の可能性を示す判定結果。root 由来のシグナルが見つかった場合は true
suAvailablebooleansu コマンドを実行できたかどうか
suOutputstringsu コマンド実行時の出力。実行できない場合は空文字
signalsstring[]root 判定に使われた検出項目の配列。例: path:/system/xbin/su, package:com.topjohnwu.magisk
notestringroot 判定がヒューリスティックであることを示す補足文

GET/api/ip

端末の IP 情報を取得します。

クエリパラメータ

クエリ必須既定値説明
device必須なし送信先クライアント名
timeoutMs任意15000タイムアウト時間
GET /api/ip?device=178e1&timeoutMs=15000

成功レスポンス(HTTPレスポンス全体):

名前説明
okboolean成功時は true
idstringこのHTTPリクエストで端末へ送った処理ID
devicestring対象クライアント名
replystring端末のモバイル回線側 IP
{
  "ok": true,
  "id": "20260812134800123",
  "device": "178e1",
  "reply": "..."
}

GET/api/battery

端末のバッテリー情報を取得します。

クエリパラメータ

クエリ必須既定値説明
device必須なし送信先クライアント名
timeoutMs任意15000タイムアウト時間
GET /api/battery?device=178e1&timeoutMs=15000

成功レスポンス(HTTPレスポンス全体):

名前説明
okboolean成功時は true
idstringこのHTTPリクエストで端末へ送った処理ID
devicestring対象クライアント名
replystringバッテリー情報の JSON 文字列
JSON.parse(reply).levelnumberreply 文字列をJSONとして読んだ時のバッテリー残量。0 から 100
JSON.parse(reply).temperatureCelsiusnumber/nullreply 文字列をJSONとして読んだ時のバッテリー温度。摂氏
JSON.parse(reply).chargingStatusstringreply 文字列をJSONとして読んだ時の充電状態。charging, discharging, not_charging, full, unknown のいずれか
{
  "ok": true,
  "id": "20260812134800123",
  "device": "178e1",
  "reply": "{\"level\":85,\"temperatureCelsius\":32.4,\"chargingStatus\":\"charging\"}"
}

/api/batteryreply を文字列のまま返します。/api/commandGET_BATTERY を指定した場合は、同じ端末応答がJSONとして読めれば reply はobjectになります。

POST/api/change_ip

端末の IP 変更処理を実行します。root端末では従来どおりアプリへコマンドを中継します。非root端末ではHubが対応するADB IDを使ってモバイルデータ通信をOFFにし、0.8秒後にONへ戻して、端末のモバイル回線から有効なIPアドレスを取得できるまで応答を待ちます。JSON body の値がある場合は body がクエリより優先されます。

JSON body パラメータ

名前必須既定値説明
devicestring必須なし送信先クライアント名
timeoutMsnumber任意90000root判定、回線切替、IP取得を含む全体のタイムアウト時間
{
  "device": "178e1",
  "timeoutMs": 90000
}

クエリ形式

POST /api/change_ip?device=178e1&timeoutMs=90000

成功レスポンス(HTTPレスポンス全体):

名前説明
okboolean成功時は true
idstringこのHTTPリクエストで端末へ送った処理ID
devicestring対象クライアント名
replystringroot端末ではアプリの処理結果。非root端末では切替後に確認できたIPアドレス
{
  "ok": true,
  "id": "20260812134800123",
  "device": "178e1",
  "reply": "203.0.113.10"
}

非root端末でADB IDが未取得、モバイルデータ通信を切り替えられない、またはタイムアウトまでに有効なIPを取得できない場合はエラーを返します。WebSocket中継で受け付けた CHANGE_IP にも同じ分岐を適用します。

POST/api/post

端末へ POST コマンドを送り、端末側から指定 URL へ HTTP POST させます。

JSON body パラメータ

名前必須既定値説明
devicestring必須なし送信先クライアント名
urlstring必須なし端末から POST する URL
headersobject任意{}端末から送る HTTP ヘッダー
bodystring任意""端末から送る body
timeoutMsnumber任意20000タイムアウト時間
mobileboolean任意truemobile フラグ

リクエスト例

{
  "device": "178e1",
  "url": "https://example.com",
  "headers": { "User-Agent": "..." },
  "body": "...",
  "timeoutMs": 20000,
  "mobile": true
}

成功レスポンス(HTTPレスポンス全体):

名前説明
okboolean成功時は true
idstringこのHTTPリクエストで端末へ送った処理ID
devicestring対象クライアント名
replyobject/string/null端末側 POST の結果。JSON として扱える場合は object
reply.monastringMonaKey ヘッダー値。無い場合は空文字
reply.monaTicketstringMonaTicket 値。無い場合は空文字
reply.posterIdstringX-PosterID ヘッダー値。無い場合は空文字
reply.BodystringPOST 先から返った HTML またはエラー本文
{
  "ok": true,
  "id": "20260812134800123",
  "device": "178e1",
  "reply": {}
}

reply は JSON または文字列です。