すべてのプロダクト
Search
ドキュメントセンター

Quick Tracking:HTTP API

最終更新日:Jun 08, 2025

サーバー追跡パラメーターを取得する

  1. 管理コンソールに移動 --> 追跡情報 をクリック

  2. プライマリドメイン:サーバー側の追跡データを報告するためのアドレス

  3. セカンダリードメイン:デフォルトドメインはプライマリドメインと同じです。プライベートデプロイメントのお客様は、代替ドメインとしてセカンダリードメインを提供できます。

  4. ServiceSecret と ServiceID は検証パラメーターです。シークレットを公開しないでください。

注:上記の情報はシステム セキュリティに関わるため、管理者権限を持つユーザーのみが表示できます!

image.png

リクエスト

API アドレス:https://<データ収集 エンドポイント + ポート>/server

リクエストパラメーター content-type:application/json

リクエストパラメーター

イベント報告リクエスト JSON パラメーター

JSON フィールド名

(大文字と小文字は一致している必要があります。)

データ型

必須

フィールドの説明。

署名

文字列

はい

署名を検証する

f564cae6a8ad458648id9d607a124322

app_id

文字列

はい

対応するサーバー トラッキングにおける serviceID

OA8kI9Jis7YJNh5uh

アプリケーションキー

文字列

はい

アプリケーションキー。 QT 管理バックグラウンドから取得します。

9moqdsuia8hvxm7k8shf82n

ID

文字列

はい

イベント エンコーディング。ユーザーが QT バックグラウンドでイベントを作成するときに設定するエンコーディング セットです。

クリック

umid

文字列

2 つのうち少なくとも 1 つをアップロードする必要があります。分析中の ID マッピングがビジネス要件を満たすように、できるだけ puid をアップロードすることをお勧めします。

デバイス ID。

djajdjdk1

puid

文字列

ユーザーID。

user_001

page_name

文字列

いいえ

ページ名

page_index

ts

文字列

はい

ミリ秒単位で報告されるタイムスタンプです。

1659493170125

カスプ

オブジェクト

いいえ

パラメータ

{"foo": "bar"}

gp

オブジェクト

いいえ

グローバル プロパティ

{"foo": "bar"}

SDK タイプ

文字列

はい

SDKタイプ。静的フィールドは httpapi です。

httpapi

server_ts

文字列

いいえ、QT サーバーは自動的に生成できます。手動でファイルをアップロードする場合、QT サーバーにファイルがアップロードされた時間が優先されます。 QT サーバーにファイルがアップロードされた時間は、自動的に生成されなくなります。

サーバー タイムスタンプ(ミリ秒)

1659493170125

UUID

文字列

いいえ。 log_id の生成に使用される要素 (V2.4.17 でサポート)

log_id を一意にする場合は、ログエントリごとに一意の UUID を報告できます。 QT サーバーは、UUID を使用して log_id を生成します。

1234567890

ログID

文字列

いいえ、QT サーバーは自動的に生成します

ログ ID。デフォルトの生成モードは UUID 生成です。 UUID が報告されない場合は、タイムスタンプを使用してランダム ID が生成されます。

1234567890

イベント プロトコル

{ 
  "sign":"27 c95768438645138cfb010ded871091", // 必須。署名。

  
  "app_id":"xxxxxxxxx", // サーバー追跡情報内の サービス ID。
  
  "appkey":"1344444", // 必須。アプリケーションの appkey。
  "id" : "get_coupons", // 必須。イベント コード。
  "umid" : "edfafs", // デバイスの ID。
  "puid" : "123456", // ログイン ユーザーの ID。
                                              // umid と puid の少なくとも 1 つをアップロードする必要があります。
    
  "page_name":"home_page", // オプション。ページ エンコーディング。
  "ts" : "1614667799165", // 必須。イベントが発生した時の タイムスタンプ。
  "cusp" : { // カスタム イベント パラメーター
    "p1" : "1",
    "p2" : "2",
    "p3" : "3"
  },
  
  "sdk_type":"httpapi", // 静的フィールド。追跡 サービスは、このフィールドを自動的に追加します。
  "server_ts":"1614667799165", // このパラメーターを指定すると、パラメーターの値が使用されます。このパラメーターを指定しない場合、ログ追跡 サービスの タイムスタンプが自動的に使用されます。ログ追跡 サービスは、このパラメーターを自動的に追加します。
  "_id":'123344' // ログの一意のコード。追跡 サービスは、このフィールドを自動的に追加します。
}

レポートユーザープロパティリクエスト JSON パラメーター

JSON フィールド名

(大文字と小文字は一致している必要があります。)

データ型

必須

フィールドの説明。

sign

string

はい

署名を検証します

f564cae6a8ad458648id9d607a124322

app_id

string

はい

serviceID (対応するサーバー追跡内)

OA8kI9Jis7YJNh5uh

appkey

string

はい

アプリケーションキー。 QT 管理バックグラウンドから取得します。

9moqdsuia8hvxm7k8shf82n

id

string

はい

ユーザー属性を報告するためのイベントコード。値は $$_ user_profile に固定されています。

$$_user_profile

umid

string

いいえ

デバイス ID。

djajdjdk1

puid

string

はい

ユーザー ID。

user_001

ts

string

はい

ミリ秒単位で報告されるタイムスタンプ。

1659493170125

cusp

object

はい

ユーザー属性。

{"name": "tom", "gender": "1"}

sdk_type

string

はい

SDK タイプ。静的フィールドは httpapi です。

httpapi

server_ts

string

いいえ、QT サーバーは自動的に生成できます。手動でファイルをアップロードする場合、QT サーバーにファイルをアップロードした時間が優先されます。 QT サーバーへのファイルのアップロード時間は、自動的に生成されなくなります。

サーバーのタイムスタンプ (ミリ秒単位)

1659493170125

uuid

string

いいえ。 log_id の生成に使用される要素 (V2.4.17 でサポート)

log_id を一意にする場合は、ログエントリごとに一意の UUID を報告できます。 QT サーバーは、UUID を使用して log_id を生成します。

1234567890

log_id

string

いいえ、QT サーバーが自動的に生成します

ログ識別子。デフォルトの生成モードは uuid 生成です。 uuid が報告されない場合は、タイムスタンプを使用してランダム ID が生成されます。

1234567890

ユーザー属性 メッセージプロトコル

{ 
  "sign":"27 c95768438645138cfb010ded871091", // 必須。署名。
  "app_id":"xxxxxxxxx", // 必須。このパラメーターは、サーバータグ情報内のサービス ID に対応します。
  
  
  "appkey":"1344444", // 必須。アプリケーションのアプリケーションキー。
  "id" : "$$_user_profile", // 必須。ID はユーザー属性です。
  "umid" : "edfafs", // オプション。デバイスの ID。
  "puid" : "123456", // 必須。ログインユーザーのアカウント ID。
  "ts" : "1614667799165", // 必須。イベントが発生したタイムスタンプ。
  "cusp" : { // 必須。カスタムユーザー属性
    "gender" : "1", // 性別。
    "birthday" : "1988-12-24" // 生年月日
  },
  
  
  "sdk_type" : "httpapi", // 静的フィールド。トラッキングサービスによってこのフィールドが自動的に追加されます。
  "server_ts":"1614667799165", // このパラメーターを指定した場合、パラメーターの値が使用されます。このパラメーターを指定しない場合、ログトラッキングサービスのタイムスタンプが自動的に使用されます。ログトラッキングサービスによってこのパラメーターが自動的に追加されます。
  "_id":'123344' // ログの一意のコード。トラッキングサービスによってこのフィールドが自動的に追加されます。
}

署名生成ルールの説明

  1. まず、sign フィールドを除くすべてのリクエストフィールドのキーと値をマップオブジェクトにカプセル化します。

  2. このマップオブジェクトを JSON 文字列にシリアル化するには、キーを自然順序付け、つまり ASCII コードに従ってソートする必要があります。Java では、jsonobject.tojsonstring(mapobject、SerializerFeature.mapsortfield)を使用できます。(注:JSON は、次のコードブロックのように、フィールド間のスペースを削除するために圧縮する必要があります)

  3. serviceSecret を取得します。

  4. sign = MD5(ソート後に生成された JSON 文字列 + serviceSecret)

  5. 計算された sign を元のマップオブジェクトに入れ、JSON 文字列にシリアル化します。これが最終的な完全な JSON リクエストメッセージです。

ユーザー プロパティ リクエスト JSON パラメーターを報告する

image

レスポンスパラメーター

詳細については、「WordPress REST API」をご参照ください。

応答 JSON 文字列には、code フィールドと message フィールドの 2 つのフィールドが含まれています。

コード

メッセージ

説明

Httpapi_300_200

レポート成功

成功

Httpapi_300_101

不正な署名

署名検証に失敗しました。詳細については、「署名生成ルール」をご参照ください。

Httpapi_300_102

レポートされたデータ型は JSON 形式ではありません。

データ形式リクエストパラメータは JSON 形式ではありません

Httpapi_300_103

必須フィールドがありません

リクエストパラメータテーブルを参照して、必須パラメータが省略されているかどうかを確認してください

Httpapi_300_104

ユーザー属性に必須フィールドがありません

リクエストパラメータテーブルを参照して、必須パラメータが省略されているかどうかを確認してください

Httpapi_300_105

無効なイベント ID

不正なイベント ID

Httpapi_300_106

不正な ak/sk

Java デモ リファレンス

package com.aliyun.app.quickaplus.mock.once_mock;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.aliyun.app.quickaplus.mock.util.MD5Util;
import okhttp3.*;
import java.io.IOException;
/**
* サーバー ApiDemo
*
* @author chengtao
*/
public class ServiceApiDemo {
    /**
    * プライマリドメイン
    */
    private static final String API_URL = "*****";
    /**
    * サーバートラッキング情報内の ServiceID に対応します。
    */
    private static final String SERVICE_ID = "*******";
    /**
    * サーバートラッキング情報内の ServiceSecret に対応します。
    */
    private static final String SERVICE_SECRET = "*******";
    /**
    * クライアントログ
    */
    private static final OkHttpClient client = new OkHttpClient();
/**
* メイン関数
*
* @param args パラメーター
*/
    public static void main(String[] args) {
        String srcJsonString = getMockData();
        JSONObject json = JSON.parseObject(srcJsonString);
        // サービス ID をメッセージに追加します。
        json.put("app_id",SERVICE_ID);
        // ts をメッセージに追加します。
        json.put("ts", String.valueOf(System.currentTimeMillis()));
        //署名を計算する
        String sign = MD5Util.md5(JSONObject.toJSONString(json,
        SerializerFeature.MapSortField) + SERVICE_SECRET);
        json.put("sign", sign);
        String desJsonString = JSON.toJSONString(json,
        SerializerFeature.DisableCircularReferenceDetect);
        Request request = new Request.Builder()
        .url(API_URL + "/server")
        .post(RequestBody.create(desJsonString,
        MediaType.parse("application/json")))
        .build();
        try {
            Response response = client.newCall(request).execute();
            if (!response.isSuccessful()) {
                System.out.printf("[DEMO] ログの送信に失敗しました %s%n", response);
            } else {
                System.out.printf("[DEMO] 送信に成功しました %s%n",
                response.body().string());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
/**
* MockData を取得します。
*
* @return 戻り値。
*/
    private static String getMockData() {
        return "{\n" +
        " \"appkey\": \"1344444\",\n" +
        " \"id\": \"get_coupons\",\n" +
        " \"umid\": \"uuid()\",\n" +
        " \"puid\": \"puid1\",\n" +
        " \"page_name\": \"home_page\",\n" +
        " \"cusp\": {\n" +
        " \"p1\": \"1\",\n" +
        " \"p2\": \"2\",\n" +
        " \"p3\": \"3\"\n" +
        " },\n" +
        " \"gp\": {\n" +
        " \"p1\": \"1\",\n" +
        " \"p2\": \"2\",\n" +
        " \"p3\": \"3\"\n" +
        " },\n" +
        " \"sdk_type\": \"httpapi\"\n" +
        "}";
    }
}

Python デモ リファレンス

# 正しい署名形式。
{"appkey": "4b6G49PAkLUb4212","cusp":{"p1":"1","p2":"2","p3":"3"},"gp":{"p1":"1","p2":"2","p3":"3"},"id":"get_coupons","page_name":"home_page","puid":"puid1","sdk_type":"httpapi","umid":"uuid()"}tEkNnx8VDuR0mwEl3hXd7aozYh8Q2qS4
# 無効な署名形式。
{"appkey": "AppKey in your environment", "cusp": {"p1": "1", "p2": "2", "p3": "3"}, "gp": {"p1": "1", "p2": "2", "p3": "3"}, "id": "get_coupons", "page_name": "home_page", "puid": "puid1", "sdk_type": "httpapi", "umid": "uuid()"}tEkNnx8VDuR0mwEl3hXd7aozYh8Q2qS4 

import json
import hashlib
import http.client
import ssl
import time

# service_id
service_id =service_id in your environment
# service_secret
service_secret =service_secret in your environment
# トラッキング サービスを構成します。
qlc_end_point =address of the receiving service in your environment
# Mock のメッセージ
def get_millisecond():
    # 13 桁のタイムスタンプをミリ秒単位で取得します。
    millis = int(round(time.time() * 1000))
    return str(millis)
ts1 = get_millisecond()
print(ts1)
data = {
   # 公開時にはコードを削除する必要があります。コードは、「トラッキング検証 - サーバー検証」に入力された DebugKey と同じである必要があります。
     "dk":"",
   # アプリケーションキー
    "appkey":"",
    "app_id": service_id,
    "id": "get_coupons",
    "umid": "uuid1",
    "puid": "puid2",
     "page_name": "home_page",
    "ts": ts1,
    "cusp": {
        "card_type": "self-managed",
        "scene": "Active purchase",
        "card_level": "Experience member",
        "carrier": "Enough apps",
        "card_no": "d7tyk",
        "user_id": "zsfMzsvHyA==",
        "card_name": "7-day experience card",
        "resource_id": "eedf17067cf64be299a844bbc8101426"
    },
    "gp": {
        "p1": "1",
        "p2": "2",
        "p3": "3"
    },
    "sdk_type": "httpapi"
}
def sort_dict(d):
    # ソート済み辞書のプライマリ キー。
    sorted_dict = {k: sort_dict(v) if isinstance(v, dict) else v for k, v in sorted(d.items())}
    return sorted_dict
    
# キーを辞書式順序でソートします。
sorted_data = sort_dict(data)
sorted_dict = dict(sorted_data)
#string = json.dumps(sorted_dict, separators=(',', ':')) + service_secret
string = json.dumps(sorted_dict,ensure_ascii=False, separators=(',', ':')) + service_secret
print(string)
data['sign'] = hashlib.md5(string.encode('utf-8')).hexdigest()
data = json.dumps(data)

protocl,domain = qlc_end_point.split('://')
if (protocl == 'http'):
    conn = http.client.HTTPConnection(domain)
if (protocl == 'https'):
    conn = http.client.HTTPSConnection(domain)
    
conn.request("POST", "/server", body=data, headers={"Content-Type": "application/json"})
response = conn.getresponse()
print(response.read().decode())
conn.close()

JavaScript で REST API を使用する

package com.aliyun.app.quickaplus.mock.util;

import java.security.MessageDigest;

/**
 * md5 暗号化ツール クラス
 *
 * @author 作成者:zheng.zhang
 */
public class MD5Util {

    public static String md5(String s) {
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] btInput = s.getBytes();
            // MD5 ダイジェスト アルゴリズムの MessageDigest オブジェクトを取得します。
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 指定されたバイトでダイジェストを更新します。
            mdInst.update(btInput);
            // 暗号文を取得します。
            byte[] md = mdInst.digest();
            // 暗号文を 16 進数文字列に変換します。
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 単体テスト
     */
    public static void main(String[] args) {
        StringBuilder dtskey = new StringBuilder("abc12390");
        dtskey.append('\0').append("~!@#$%^&*()_+");
        System.out.println(MD5Util.md5(dtskey.toString()));
        System.out.println(MD5Util.md5("20121221"));
        System.out.println(MD5Util.md5("Encryption"));
    }
}