空域管理

2026-09-20

機能説明

リアルタイム空域データ報告を有効にすると、サービスプロバイダーからWebhook URLと暗号化トークンを取得できます。それらを入力して保存すると、FlightHub APIは、リアルタイムの機体データをサードパーティにプッシュ送信できます。サードパーティのサービスプロバイダー向けの統合ガイドは、以下のとおりです。

統合ガイド

データ報告プロトコル

1. リクエストヘッダー

フィールド名フィールドコードデータタイプ説明必須
データソースsource整数1:機体から直接報告
2:メーカーのシステムから報告
3:アドオンモジュールから報告
4:収集機器から報告
はい
報告プラットフォームplatform文字列プラットフォーム名(例:DJI Fly)はい
プログラムバージョンprogramVersion文字列バージョン番号(例:version 1.0)はい
署名signature文字列生成されたリクエスト署名はい
リクエストのタイムスタンプtimestamp文字列リクエストのUnixタイムスタンプ(秒単位)はい
ノンスnonce文字列ランダムに生成された文字列はい
署名生成プロセス

入力パラメーター

  • token:アプリケーションキー(統合サービスプロバイダーから提供され、FlightHub 2でユーザーが設定するものです)。32〜64文字で、英字・数字・特殊記号のうち3種類以上の組み合わせで構成されている必要があります。
  • timestamp:リクエストのタイムスタンプ(timestampリクエストヘッダーから取得)
  • nonce:ランダム文字列(nonceリクエストヘッダーから取得)
  • body:リクエスト本文の生バイトデータ(例:JSON形式にシリアライズされたRequestBody)

署名ルール

  1. timestamp、nonce、bodyを、その順番で(区切り文字なしで)1つの文字列に連結します。
  2. tokenをキーとしてHMAC-SHA256アルゴリズムを使用し、連結された文字列を暗号化します。
  3. 暗号化された結果を小文字の16進数文字列に変換します。

Goコード実装

import (
    "crypto/hmac"
    "crypto/sha256"
    "crypto/subtle"
    "encoding/hex"
)

func GenerateHMACSignature(appKey, timestamp, nonce string, body []byte) string {
    mac := hmac.New(sha256.New, []byte(appKey))
    mac.Write([]byte(timestamp))
    mac.Write([]byte(nonce))
    mac.Write(body)
    return hex.EncodeToString(mac.Sum(nil))
}
署名認証プロセス

認証ロジック

  1. サーバーは、リクエストヘッダーから以下を取得します。
    • signature:クライアントによって生成された署名
    • timestamp:リクエストのタイムスタンプ
    • nonce:ランダム文字列
  2. サーバーは、同じパラメーターとシークレットキーappKeyを使用して、署名を再生成します。
  3. 定数時間の比較を使用して、クライアントの署名がサーバーで生成された署名と一致するかどうかを検証します。

Goコード実装

func VerifyHMACSignature(appKey, timestamp, nonce string, body []byte, signature string) bool {
    expected := GenerateHMACSignature(appKey, timestamp, nonce, body)
    return subtle.ConstantTimeCompare([]byte(expected), []byte(signature)) == 1
}

2. リクエスト本文

JSON形式

{
  "app_id":"default",
  "flight_hub_organization_id":"xxxx",
  "paths": [
    { /* FlightPath object */ },
    { /* FlightPath object */ }
  ]
}

フィールド説明

フィールド種類必須説明
app_idstringはい一意のアプリケーション識別子。現在はデフォルトに設定されています。
flight_hub_organization_idstringはいユーザーのFlightHub組織ID
pathsFlightPath[]はい飛行経路データの配列(下記のオブジェクト構造を参照してください)
FlightPathRecord構造の説明

この構造は飛行経路ポイントデータを記述するために使用されます。以下は各フィールドの詳細説明です。

番号フィールド名フィールドコードデータタイプ説明必須
1飛行記録IDorder_id文字列形式:メーカーシリアル番号(sn)-8桁の離陸日(YYYYMMDD)-8桁のランダムコード。
例:1581F5FHD25G100C1SDN-20240320-owvGyLqe。
飛行全体を通して同じIDが使用されます。
はい
2機体のシリアル番号sn文字列メーカーの機体製造シリアル番号はい
3飛行ステータスflight_status文字列TakeOff:離陸地点、Inflight:飛行中、Land:着陸地点はい
4統一社会信用コードmanufacturer_id文字列メーカーの統一社会信用コード。はい
5CAAC実名登録番号uas_id文字列登録番号がない場合は、既定値のUAS-DEFAULTを使用してください。はい
6現在のタイムスタンプtime_stamp文字列UTC+8時刻、形式:yyyyMMddHHmmss。例:20240124095001はい
7製品モデルuas_model文字列英字、数字、および/または記号の組み合わせ。はい
8座標系タイプcoordinate整数1:WGS-84
2:CGCS2000
3:GLONASS-PZ90
はい
9経度longitudeLong単位:度(°)。実際の値=フィールド値/10⁷。はい
10緯度latitudeLong単位:度(°)。実際の値=フィールド値/10⁷。はい
11真の高さタイプheight_type整数1:相対離陸地点高度(ALT)
2:対地相対高度(AGL)
はい
12真の高さheight整数単位:メートル(m)。実際の値=フィールド値/10。はい
13高度altitude整数単位:メートル(m)。実際の値=フィールド値/10。はい
14垂直速度vs整数単位:m/s。実際の値=フィールド値/10。はい
15水平飛行速度gs整数単位:m/s。実際の値=フィールド値/10。はい
16コースcourse整数真北から時計回りの角度(0°-360°)。実際の値=フィールド値/10。データがない場合は-999を入力してください。はい
17RIDブロードキャストステータスremote_id_status整数0:無効  
1:有効
はい

本文の例:

{
	"app_id": "default",
	"flight_hub_organization_id": "105ddf05-54ce-4626-a872-cb32b8c98864",
	"paths": [{
		"order_id": "1529F6QAD23CB00A42DP-20251028-89W2aK2W",
		"sn": "1529F6QAD23CB00A42DP",
		"flight_status": "Land",
		"manufacturer_id": "925413007954257495",
		"uas_id": "UAS-DEFAULT",
		"time_stamp": "20251028115000",
		"uas_model": "M3D",
		"coordinate": 1,
		"longitude": 1243579943,
		"latitude": 217931488,
		"height_type": 1,
		"height": 0,
		"altitude": 187,
		"vs": 0,
		"gs": 0,
		"course": 1229,
		"remote_id_status": 1
	}]
}

3. 応答本文

フィールド名フィールドコードデータタイプ説明
ステータスコードcode文字列0 = 成功、400 = 失敗
結果説明result文字列詳細な説明(例:成功)

応答の例:

{
  "code": "0",
  "result": "success"
}
Last Updated: