团队、品牌与竞品管理
获取团队下的所有品牌
- 请求方法:POST
- 请求路径:
/geo/query/brand
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 品牌ID |
| brand_name | string | 品牌名称 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"id": "brand_test_001",
"brand_name": "测试品牌A"
}
]
}新建品牌
- 请求方法:POST
- 请求路径:
/geo/brand/create
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand | string | 品牌名称 | 是 |
| alias | string | 品牌别名 | 否 |
| team_id | string | 团队ID | 是 |
| website | string | 品牌官网 | 否 |
| description | string | 品牌描述 | 否 |
| icon_mime_type | string | 品牌 logo 的 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 否 |
| icon_data | string | 品牌 logo 内容,二进制字节流;最大 2MB | 否 |
| note | string | 品牌备注 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的品牌ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "brand_test_001"
}
}新建品牌(可同时初始化品牌基础信息、竞品、用户提问)
- 请求方法:POST
- 请求路径:
/geo/brand/bundle/create
说明:
- 当传入
team_id时,表示在已有团队下新建品牌。 - 当未传
team_id且传入team时,表示先创建团队,再在该团队下创建品牌。 user_prompts为品牌初始化时要创建的用户提问列表。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| team_id | string | 团队ID;已有团队下创建品牌时传入 | 否 |
| team | object | 团队信息;未传 team_id 时需传入 | 否 |
| team.name | string | 团队名称 | 条件必填 |
| team.description | string | 团队描述 | 否 |
| team.icon_mime_type | string | 团队 logo 的 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 否 |
| team.icon_data | string | 团队 logo 内容,二进制字节流;最大 2MB | 否 |
| brand | object | 品牌信息 | 是 |
| brand.brand_name | string | 品牌名称 | 是 |
| brand.alias | string | 品牌别名 | 否 |
| brand.website | string | 品牌官网 | 否 |
| brand.description | string | 品牌描述 | 否 |
| brand.note | string | 品牌备注 | 否 |
| brand.icon_mime_type | string | 品牌 logo 的 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 否 |
| brand.icon_data | string | 品牌 logo 内容,二进制字节流;最大 2MB | 否 |
| user_prompts | object 数组 | 初始化创建的用户提问列表 | 是 |
| user_prompts.question | string | 用户提问内容 | 是 |
| competitors | object 数组 | 竞品列表 | 否 |
| competitors.name | string | 竞品名称 | 否 |
| competitors.alias | string | 竞品别名 | 否 |
| competitors.description | string | 竞品描述 | 否 |
| competitors.website | string | 竞品官网 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| brand | object | 新建后的品牌信息 |
| brand.id | string | 品牌ID |
| brand.brand_name | string | 品牌名称 |
| brand.alias | string | 品牌别名 |
| brand.website | string | 品牌官网 |
| brand.description | string | 品牌描述 |
| brand.note | string | 品牌备注 |
| prompts | object 数组 | 初始化创建的用户提问列表 |
| prompts.prompt_id | string | 用户提问ID |
| prompts.question | string | 用户提问内容 |
| competitors | object 数组 | 新建后的竞品列表 |
| competitors.competitor_id | string | 竞品ID |
| competitors.name | string | 竞品名称 |
| competitors.alias | string | 竞品别名 |
| competitors.description | string | 竞品描述 |
| competitors.website | string | 竞品官网 |
| team | object | 团队信息 |
| team.team_id | string | 团队ID |
| team.name | string | 团队名称 |
| team.description | string | 团队描述 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"brand": {
"id": "brand_test_001",
"brand_name": "测试品牌A",
"alias": "品牌A",
"website": "https://brand-a.example.com",
"description": "这是一个用于接口演示的测试品牌",
"note": "测试备注"
},
"prompts": [
{
"prompt_id": "prompt_test_001",
"question": "测试品牌A适合哪些业务场景?"
}
],
"competitors": [
{
"competitor_id": "competitor_test_001",
"name": "测试竞品A",
"alias": "竞品A",
"description": "这是一个用于接口演示的测试竞品",
"website": "https://competitor-a.example.com"
}
],
"team": {
"team_id": "team_test_001",
"name": "测试团队A",
"description": "用于接口演示的测试团队"
}
}
}编辑品牌基础信息
- 请求方法:POST
- 请求路径:
/geo/brand/update
说明:更新时请一并传入全部可编辑字段,未传字段可能被置空。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| id | string | 品牌ID | 是 |
| brand_name | string | 品牌名称 | 是 |
| brand_alias | string | 品牌别名 | 是 |
| website | string | 品牌官网 | 是 |
| description | string | 品牌描述 | 是 |
| note | string | 品牌备注 | 是 |
| website_auto_trace | bool | 是否自动追踪官网内容:true-开启,false-关闭 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}更新品牌 logo
- 请求方法:POST
- 请求路径:
/geo/brand/update/icon
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| mime_type | string | 图片 MIME 类型;支持 image/jpeg、image/jpg、image/png、image/gif、image/webp、image/svg+xml | 是 |
| data | string | 图片内容,二进制字节流;最大 2MB | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| icon_url | string | 更新后的品牌 logo 地址 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"icon_url": "https://static.example.com/brand/logo-test.png"
}
}获取竞品列表
- 请求方法:POST
- 请求路径:
/geo/competitor/get
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| competitor_id | string | 竞品ID |
| competitor_name | string | 竞品名称 |
| competitor_alias | string | 竞品别名 |
响应示例:
{
"code": 0,
"msg": "success",
"data": [
{
"competitor_id": "competitor_test_001",
"competitor_name": "测试竞品A",
"competitor_alias": "竞品A"
}
]
}新建竞品
- 请求方法:POST
- 请求路径:
/geo/competitor/create
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| competitor_name | string | 竞品名称 | 是 |
| competitor_alias | string | 竞品别名 | 否 |
响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
| id | string | 新建的竞品ID |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"id": "competitor_test_001"
}
}编辑竞品
- 请求方法:POST
- 请求路径:
/geo/competitor/update
说明:更新时请一并传入全部可编辑字段,未传字段可能被置空。
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| competitor_id | string | 竞品ID | 是 |
| competitor_name | string | 竞品名称 | 是 |
| competitor_alias | string | 竞品别名 | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}删除竞品
- 请求方法:POST
- 请求路径:
/geo/competitor/delete
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
| brand_id | string | 品牌ID | 是 |
| competitor_id | string | 竞品ID | 是 |
响应参数:
接口调用成功时,返回空对象。
响应示例:
{
"code": 0,
"msg": "success",
"data": {}
}分页查询团队操作日志
- 请求方法:POST
- 请求路径:
/geo/team/logs
请求参数:
| 入参 | 类型 | 含义 | 是否必填 |
|---|---|---|---|
team_id | string | 团队 ID | 是 |
page | int | 默认 1 | 否 |
page_size | int | 默认 20;超过 100 时按 100 处理 | 否 |
actions | string 数组 | 操作类型;空数组或省略表示不过滤 | 否 |
operator_uids | string 数组 | 操作者 UID;空数组或省略表示不过滤 | 否 |
请求示例:
{
"team_id": "2001",
"page": 1,
"page_size": 20,
"actions": [
"set_member_role"
],
"operator_uids": [
"4002"
]
}响应参数:
| 返回值 | 类型 | 含义 |
|---|---|---|
code | int | 0 表示成功 |
msg | string | 返回消息 |
data.logs | object 数组 | 日志列表 |
data.logs[].log_id / team_id | string | 日志 ID / 团队 ID |
data.logs[].created_by | string | 操作者展示名,不是 UID |
data.logs[].content | string | 操作描述 |
data.logs[].created_at | string | 内网为 YYYY-MM-DD;海外为 UTC RFC 3339 时间 |
data.total | int | 符合条件的总数 |
响应示例:
{
"code": 0,
"msg": "success",
"data": {
"logs": [
{
"log_id": "8001",
"created_by": "测试管理员A",
"team_id": "2001",
"content": "测试管理员A将测试成员A设为成员",
"created_at": "2026-10-14"
}
],
"total": 1
}
}