Open API Quick Start 快速上手

前提条件

在开始之前,你需要准备以下信息:

准备项说明获取方式
API 基础地址接口请求的 Base URL见下方说明
appSecretKey应用密钥,用于获取认证 Token管理员在用户管理页面生成
tenantId租户 IDSettings 配置页查看
userId用户 IDSettings 配置页查看
domainId分析域 ID分析域设置页 URL 中获取

API 基础地址(Base URL)

环境Base URL
国内 SaaS
https://api.clickzetta.com/clickzetta-campaign-data
https://api.clickzetta.com/clickzetta-campaign-data
海外版(新加坡)
https://ap-southeast-1-alicloud.api.singdata.com/clickzetta-campaign-data
https://ap-southeast-1-alicloud.api.singdata.com/clickzetta-campaign-data
私有化部署(OP)请联系对接人获取,每个环境不同

获取 appSecretKey

进入 管理 → 用户管理,选择对应用户,点击编辑,在「App Secret Key」区域点击 + 生成Key 即可。

获取 tenantId 和 userId

点击左下角头像,进入 Settings 配置页:

在配置页中可以看到 Tenant IDUser ID

获取 domainId

在分析域卡片上,点击设置按钮(齿轮图标):

进入设置页后,查看浏览器地址栏 URL,末尾的数字即为 domainId

完整流程(curl 版)

第一步:获取 Token

详细参数见 → GenerateAuthToken

curl "https://api.clickzetta.com/clickzetta-campaign-data/open/api/v1/appSecretKey/generateAuthToken?appSecretKey=YOUR_SECRET_KEY"

返回:

{ "success": true, "data": { "token": "eyJhbGciOiJIUzI1NiJ9..." } }

记下

data.token
data.token
,后续所有请求都需要用到。

第二步:创建会话(可选)

详细参数见 → CreateSession

如果你已有 sessionId,可跳过这一步。

curl -X POST "https://api.clickzetta.com/clickzetta-campaign-data/open/session/safe_new?tenantId=YOUR_TENANT_ID&userId=YOUR_USER_ID&loginToken=YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "tenantId": YOUR_TENANT_ID, "userId": YOUR_USER_ID, "domainId": YOUR_DOMAIN_ID, "title": "我的第一次 API 调用", "loginToken": "YOUR_TOKEN" }'

返回:

{ "success": true, "data": 4729 }

data
data
就是你的
sessionId
sessionId

第三步:提问

详细参数见 → Text2InsightQuery

curl -X POST "https://api.clickzetta.com/clickzetta-campaign-data/open/text2insight/query?tenantId=YOUR_TENANT_ID&userId=YOUR_USER_ID&loginToken=YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "tenantId": YOUR_TENANT_ID, "userId": YOUR_USER_ID, "domainId": YOUR_DOMAIN_ID, "sessionId": YOUR_SESSION_ID, "msg": "给我看下过去6个月各区域的销售额趋势", "loginToken": "YOUR_TOKEN" }'

返回:

{ "success": true, "data": { "questionId": 34339, "sessionId": 4729, "status": "running" } }

记下

data.questionId
data.questionId

第四步:轮询结果

详细参数见 → SafeQuestionPoll

每隔 2 秒调用一次,直到最后一条消息的

dataType
dataType
finish
finish
finish_stop
finish_stop
error
error

curl -X POST "https://api.clickzetta.com/clickzetta-campaign-data/open/safe_question_poll?tenantId=YOUR_TENANT_ID&userId=YOUR_USER_ID&loginToken=YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "tenantId": YOUR_TENANT_ID, "userId": YOUR_USER_ID, "domainId": YOUR_DOMAIN_ID, "questionId": YOUR_QUESTION_ID, "loginToken": "YOUR_TOKEN" }'

当分析完成时,返回中会包含完整的

responses
responses
数组。关于如何解读这些返回内容,请参考 理解返回结果

完整流程(Python 版)

import requests import time import json # === 配置 === BASE_URL = "https://api.clickzetta.com/clickzetta-campaign-data" # 国内 SaaS 环境 APP_SECRET_KEY = "your_app_secret_key" TENANT_ID = 10 USER_ID = 1 DOMAIN_ID = 106 # === 第一步:获取 Token === resp = requests.get( f"{BASE_URL}/open/api/v1/appSecretKey/generateAuthToken", params={"appSecretKey": APP_SECRET_KEY} ) token = resp.json()["data"]["token"] print(f"✓ 获取 Token 成功") # === 第二步:创建会话 === resp = requests.post( f"{BASE_URL}/open/session/safe_new", params={"tenantId": TENANT_ID, "userId": USER_ID, "loginToken": token}, json={"tenantId": TENANT_ID, "userId": USER_ID, "domainId": DOMAIN_ID, "title": "API Quick Start", "loginToken": token} ) session_id = resp.json()["data"] print(f"✓ 创建会话成功,sessionId = {session_id}") # === 第三步:提问 === resp = requests.post( f"{BASE_URL}/open/text2insight/query", params={"tenantId": TENANT_ID, "userId": USER_ID, "loginToken": token}, json={"tenantId": TENANT_ID, "userId": USER_ID, "domainId": DOMAIN_ID, "sessionId": session_id, "msg": "给我看下过去6个月各区域的销售额趋势", "loginToken": token} ) question_id = resp.json()["data"]["questionId"] print(f"✓ 提问成功,questionId = {question_id}") # === 第四步:轮询结果 === print("⏳ 等待分析完成...") poll_count = 0 max_polls = 180 # 最多轮询 180 次(360 秒) while poll_count < max_polls: time.sleep(2) poll_count += 1 resp = requests.post( f"{BASE_URL}/open/safe_question_poll", params={"tenantId": TENANT_ID, "userId": USER_ID, "loginToken": token}, json={"tenantId": TENANT_ID, "userId": USER_ID, "domainId": DOMAIN_ID, "questionId": question_id, "loginToken": token} ) data = resp.json()["data"] responses = data.get("responses", []) if not responses: continue last_type = responses[-1].get("dataType", "") if last_type in ("finish", "finish_stop", "error"): print(f"✓ 分析完成(轮询 {poll_count} 次)") break # === 展示结果 === print("\n" + "=" * 60) print("分析结果:") print("=" * 60) for i, r in enumerate(responses): data_type = r.get("dataType", "unknown") if data_type == "summary": # 分析总结 summary = r.get("modelRes", {}).get("data", {}).get("summaryData") or r.get("message", "") print(f"\n📊 分析总结:\n{summary}") elif data_type == "metric": # 指标计算 message = r.get("message", "") print(f"\n📈 指标:{message}") elif data_type == "echarts_plus": # 图表 message = r.get("message", "") sql = r.get("modelRes", {}).get("data", {}).get("calculateSql", "") print(f"\n📉 图表:{message}") if sql: print(f" SQL: {sql[:100]}...") elif data_type == "error": print(f"\n❌ 错误:{r.get('message', '')}")

运行效果

执行上面的 Python 脚本,你会看到类似这样的输出:

✓ 获取 Token 成功 ✓ 创建会话成功,sessionId = 4729 ✓ 提问成功,questionId = 34339 ⏳ 等待分析完成... ✓ 分析完成(轮询 36 次) ============================================================ 分析结果: ============================================================ 📈 指标:Metric: 过去6个月各区域总销售额 📉 图表:各区域销售额趋势 (2025.07-2026.01) SQL: SELECT region AS 区域, month AS 月份, SUM(sales) AS 销售额 FROM ... 📊 分析总结: **各区域销售额趋势分析:** - 华东区域持续领先,占总销售额 42% - 华南区域增速最快,环比增长 15% ...

下一步

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询