Files
manta-audience-manual/index.html
T

731 lines
54 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<title>Manta 人群包操作手册</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;450;500;600;700&display=swap">
<style>html{color-scheme:light dark}body{margin:0}img{max-width:100%}[hidden]{display:none!important}</style>
</head>
<body>
<style>
:root{
--ground:#F4F6F9;
--surface:#FFFFFF;
--surface-2:#EDF0F5;
--ink:#141A22;
--ink-2:#3D4855;
--muted:#697687;
--line:#DBE1EA;
--line-strong:#C3CCD9;
--accent:#1B5FD9;
--accent-soft:#E4EDFD;
--op-and:#2F6FE4;
--op-or:#238A57;
--op-not:#CE4034;
--op-xor:#C98A08;
--warn:#9A5B00;
--warn-bg:#FDF3E3;
--warn-line:#E8C48A;
--danger:#B3302A;
--danger-bg:#FCEDEC;
--danger-line:#E9B4B0;
--ok:#1E7A4F;
--ok-bg:#E7F4EE;
--shadow:0 1px 2px rgba(20,26,34,.06),0 8px 24px rgba(20,26,34,.06);
--radius:10px;
/* 正文行宽:中文按 em 计(1em ≈ 1 个汉字),约 44 字/行 */
--measure:44em;
--sans:"IBM Plex Sans","PingFang SC","Hiragino Sans GB","Microsoft YaHei",system-ui,sans-serif;
--mono:"IBM Plex Mono","SF Mono",ui-monospace,"PingFang SC",monospace;
}
@media (prefers-color-scheme:dark){
:root:not([data-theme="light"]){
--ground:#0D1117;
--surface:#151C25;
--surface-2:#1D2632;
--ink:#E7ECF3;
--ink-2:#BCC6D3;
--muted:#8A97A8;
--line:#27313E;
--line-strong:#384555;
--accent:#77A6FF;
--accent-soft:#1A2740;
--op-and:#77A6FF;
--op-or:#5CC08C;
--op-not:#F0796C;
--op-xor:#E8B94A;
--warn:#E8B76B;
--warn-bg:#2A2113;
--warn-line:#5A4520;
--danger:#F58C84;
--danger-bg:#2C1817;
--danger-line:#5C2E2A;
--ok:#65C795;
--ok-bg:#14261D;
--shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.35);
}
}
:root[data-theme="dark"]{
--ground:#0D1117;
--surface:#151C25;
--surface-2:#1D2632;
--ink:#E7ECF3;
--ink-2:#BCC6D3;
--muted:#8A97A8;
--line:#27313E;
--line-strong:#384555;
--accent:#77A6FF;
--accent-soft:#1A2740;
--op-and:#77A6FF;
--op-or:#5CC08C;
--op-not:#F0796C;
--op-xor:#E8B94A;
--warn:#E8B76B;
--warn-bg:#2A2113;
--warn-line:#5A4520;
--danger:#F58C84;
--danger-bg:#2C1817;
--danger-line:#5C2E2A;
--ok:#65C795;
--ok-bg:#14261D;
--shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px rgba(0,0,0,.35);
}
*{box-sizing:border-box}
body{
margin:0;
background:var(--ground);
color:var(--ink);
font-family:var(--sans);
font-size:15px;
line-height:1.72;
-webkit-font-smoothing:antialiased;
}
a{color:var(--accent)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}
/* ---------- shell ---------- */
.shell{max-width:1200px;margin:0 auto;padding:0 28px 96px;display:grid;grid-template-columns:184px minmax(0,1fr);gap:36px;align-items:start}
@media (max-width:960px){.shell{grid-template-columns:minmax(0,1fr);gap:0;padding:0 20px 72px}}
/* ---------- masthead ---------- */
.masthead{grid-column:1/-1;padding:56px 0 34px;border-bottom:1px solid var(--line)}
.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin:0 0 14px}
.masthead h1{font-size:clamp(30px,4.4vw,44px);line-height:1.12;margin:0 0 12px;font-weight:600;letter-spacing:-.02em;text-wrap:balance}
.masthead .lede{margin:0;max-width:var(--measure);color:var(--ink-2);font-size:16px}
.meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:24px}
.chip{display:inline-flex;align-items:center;gap:7px;background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:5px 13px;font-size:12.5px;color:var(--ink-2)}
.chip b{font-weight:550;color:var(--ink)}
/* ---------- toc ---------- */
.toc{position:sticky;top:22px;padding-top:34px}
@media (max-width:960px){.toc{position:static;padding:26px 0 8px;border-bottom:1px solid var(--line);margin-bottom:8px}}
.toc-h{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 12px}
.toc ol{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1px}
@media (max-width:960px){.toc ol{flex-direction:row;flex-wrap:wrap;gap:6px}}
.toc a{display:flex;gap:10px;padding:6px 10px;border-radius:7px;text-decoration:none;color:var(--ink-2);font-size:13.5px;border:1px solid transparent}
@media (max-width:960px){.toc a{border-color:var(--line);background:var(--surface)}}
.toc a:hover{background:var(--surface);color:var(--ink)}
.toc a.on{background:var(--accent-soft);color:var(--accent);font-weight:550}
.toc .n{font-family:var(--mono);font-size:12px;opacity:.72;min-width:14px}
/* ---------- sections ---------- */
main{padding-top:34px;min-width:0}
section{scroll-margin-top:20px;margin-bottom:62px}
.sec-head{display:flex;align-items:baseline;gap:14px;margin:0 0 6px}
.sec-num{font-family:var(--mono);font-size:13px;color:var(--accent);font-weight:600;letter-spacing:.04em}
h2{font-size:25px;line-height:1.25;margin:0;font-weight:600;letter-spacing:-.015em;text-wrap:balance}
.sec-sub{color:var(--muted);margin:0 0 26px;font-size:14.5px;max-width:var(--measure)}
h3{font-size:16.5px;margin:34px 0 10px;font-weight:600;letter-spacing:-.005em}
p{margin:0 0 14px;max-width:var(--measure)}
ul,ol.list{margin:0 0 16px;padding-left:22px;max-width:var(--measure)}
li{margin-bottom:7px}
strong{font-weight:600}
code{font-family:var(--mono);font-size:.885em;background:var(--surface-2);border:1px solid var(--line);border-radius:5px;padding:1.5px 5px}
kbd{font-family:var(--mono);font-size:.82em;background:var(--surface);border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:5px;padding:1px 6px}
/* ---------- steps ---------- */
.steps{display:flex;flex-direction:column;gap:0;counter-reset:step;margin:0;padding:0;list-style:none}
.step{display:grid;grid-template-columns:34px minmax(0,1fr);gap:16px;padding:0 0 26px;position:relative}
.step::before{content:"";position:absolute;left:16.5px;top:32px;bottom:0;width:1px;background:var(--line)}
.step:last-child::before{display:none}
.step-n{grid-column:1;width:34px;height:34px;border-radius:50%;background:var(--surface);border:1px solid var(--line-strong);display:grid;place-items:center;font-family:var(--mono);font-size:13px;font-weight:600;color:var(--ink-2);position:relative;z-index:1}
.step-b{grid-column:2;min-width:0;padding-top:3px}
.step-b h4{margin:0 0 7px;font-size:15.5px;font-weight:600;line-height:1.5}
.step-b p{margin:0 0 11px}
.step-b :last-child{margin-bottom:0}
/* ---------- figure ---------- */
figure{margin:18px 0 4px}
.shot{display:block;width:100%;border:1px solid var(--line-strong);border-radius:var(--radius);box-shadow:var(--shadow);background:var(--surface);cursor:zoom-in}
figcaption{margin-top:9px;font-size:12.5px;color:var(--muted);display:flex;gap:9px;align-items:baseline}
figcaption .fignum{font-family:var(--mono);font-size:11.5px;color:var(--accent);font-weight:600;white-space:nowrap}
/* ---------- callouts ---------- */
.note{border:1px solid var(--line);border-left:3px solid var(--line-strong);background:var(--surface);border-radius:0 var(--radius) var(--radius) 0;padding:14px 18px;margin:18px 0;font-size:14.5px;max-width:calc(var(--measure) + 3em)}
.note p{margin:0 0 9px;max-width:none}
.note :last-child{margin-bottom:0}
.note .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;font-weight:600;display:block;margin-bottom:6px}
.note.warn{border-left-color:var(--warn-line);background:var(--warn-bg)}
.note.warn .lbl{color:var(--warn)}
.note.danger{border-left-color:var(--danger-line);background:var(--danger-bg)}
.note.danger .lbl{color:var(--danger)}
.note.tip{border-left-color:var(--accent);background:var(--accent-soft)}
.note.tip .lbl{color:var(--accent)}
/* ---------- expression syntax ---------- */
.expr{font-family:var(--mono);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;font-size:14.5px;overflow-x:auto;margin:16px 0;white-space:nowrap}
.expr .op{color:var(--op-and);font-weight:600}
.expr .tag{color:var(--ink)}
.expr .fresh{color:var(--op-xor);font-weight:600}
.expr .dim{color:var(--muted)}
.anno{display:grid;gap:9px;margin:14px 0 22px;padding:0;list-style:none;max-width:var(--measure)}
.anno li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;align-items:start;margin:0;font-size:14px}
.anno code{white-space:nowrap}
/* ---------- operator grid ---------- */
.ops{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin:18px 0 22px}
.op-card{background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--c);border-radius:0 var(--radius) var(--radius) 0;padding:13px 15px}
.op-card .sym{font-family:var(--mono);font-weight:600;font-size:13px;color:var(--c);letter-spacing:.05em}
.op-card .zh{font-weight:600;font-size:15px;margin:2px 0 5px}
.op-card .d{font-size:13px;color:var(--muted);line-height:1.6}
/* ---------- tables ---------- */
.tw{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);margin:18px 0;background:var(--surface)}
table{border-collapse:collapse;width:100%;font-size:13.5px;min-width:520px}
th,td{text-align:left;padding:10px 15px;border-bottom:1px solid var(--line);vertical-align:top}
thead th{background:var(--surface-2);font-weight:600;font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);white-space:nowrap;position:sticky;top:0}
tbody tr:last-child td{border-bottom:none}
td.num,th.num{font-family:var(--mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.tid{font-family:var(--mono);color:var(--accent);font-weight:600;font-variant-numeric:tabular-nums}
/* ---------- appendix search ---------- */
.finder{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:16px 0 4px}
.finder input{flex:1 1 240px;min-width:0;font-family:var(--sans);font-size:14px;padding:9px 13px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface);color:var(--ink)}
.finder input::placeholder{color:var(--muted)}
.segs{display:flex;gap:2px;background:var(--surface-2);border:1px solid var(--line);border-radius:9px;padding:3px}
.segs button{font-family:var(--sans);font-size:13px;padding:5px 13px;border:0;border-radius:6px;background:transparent;color:var(--ink-2);cursor:pointer;font-weight:500}
.segs button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.1)}
.count{font-size:12.5px;color:var(--muted);font-family:var(--mono);margin:10px 0 0}
.empty{padding:26px 15px;text-align:center;color:var(--muted);font-size:14px}
/* ---------- quickflow ---------- */
.flow{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;margin:6px 0 8px}
.flow div{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px}
.flow .k{font-family:var(--mono);font-size:11px;color:var(--accent);font-weight:600;letter-spacing:.08em}
.flow .v{font-weight:600;font-size:14.5px;margin-top:3px;line-height:1.45}
.flow .s{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.55}
/* ---------- lightbox ---------- */
#lb{position:fixed;inset:0;background:rgba(8,11,15,.9);display:none;place-items:center;z-index:99;padding:28px;cursor:zoom-out}
#lb.on{display:grid}
#lb img{max-width:100%;max-height:100%;border-radius:8px;box-shadow:0 24px 70px rgba(0,0,0,.6)}
#lb .hint{position:absolute;bottom:16px;left:0;right:0;text-align:center;color:#9AA6B6;font-size:12px;font-family:var(--mono)}
footer{grid-column:1/-1;border-top:1px solid var(--line);padding-top:22px;color:var(--muted);font-size:13px;display:flex;flex-wrap:wrap;gap:8px 22px;justify-content:space-between}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
</style>
<div class="shell">
<header class="masthead">
<p class="eyebrow">内部操作手册 · AM / 运营</p>
<h1>Manta 人群包平台操作手册</h1>
<p class="lede">从登录到导出的完整流程:怎么圈一个人群包、覆盖人数怎么读、导出给 Midas / SAN 要走哪一步,以及六个容易踩的坑。</p>
<div class="meta">
<span class="chip">环境 <b>manta-test.hellay.net</b></span>
<span class="chip">账号体系 <b>SHAREid</b></span>
<span class="chip">平台版本 <b>MANTA 1.0</b></span>
<span class="chip">整理日期 <b>2026-09-01</b></span>
</div>
</header>
<nav class="toc" aria-label="目录">
<p class="toc-h">目录</p>
<ol>
<li><a href="#s0"><span class="n">—</span>五步速览</a></li>
<li><a href="#s1"><span class="n">1</span>登录</a></li>
<li><a href="#s2"><span class="n">2</span>进入人群包管理</a></li>
<li><a href="#s3"><span class="n">3</span>新建人群包</a></li>
<li><a href="#s4"><span class="n">4</span>读懂覆盖人数</a></li>
<li><a href="#s5"><span class="n">5</span>导出</a></li>
<li><a href="#s6"><span class="n">6</span>编辑与删除</a></li>
<li><a href="#s7"><span class="n">7</span>六个坑</a></li>
<li><a href="#s8"><span class="n">A</span>标签速查</a></li>
</ol>
</nav>
<main>
<!-- ============ 0 ============ -->
<section id="s0">
<div class="sec-head"><span class="sec-num">速览</span><h2>五步走完一个人群包</h2></div>
<p class="sec-sub">整个平台对 AM / 运营 来说只有一条主线,其余菜单都不用碰。</p>
<div class="flow">
<div><div class="k">01</div><div class="v">登录</div><div class="s">SHAREid 账号</div></div>
<div><div class="k">02</div><div class="v">新增人群包</div><div class="s">起名 + 选运算符</div></div>
<div><div class="k">03</div><div class="v">加标签</div><div class="s">分类 → 值 → 新鲜度</div></div>
<div><div class="k">04</div><div class="v">提交</div><div class="s">无需审核,立即生效</div></div>
<div><div class="k">05</div><div class="v">导出</div><div class="s">CSV 文件 或 接口</div></div>
</div>
<div class="note tip">
<span class="lbl">一句话</span>
<p>人群包 = 一条<strong>集合运算表达式</strong>。你在页面上点的每一步,最后都落成 <code>AND(〔36:RU•6〕,〔54•6〕)</code> 这样一行式子;看懂这行式子,整个平台就通了。</p>
</div>
</section>
<!-- ============ 1 ============ -->
<section id="s1">
<div class="sec-head"><span class="sec-num">01</span><h2>登录</h2></div>
<p class="sec-sub">先确认网络环境,再用 SHAREid 账号登录。平台没有注册入口,账号由研发侧开通。</p>
<div class="note tip">
<span class="lbl">前置 · 网络环境</span>
<p><strong>公司内网</strong>下直接访问,无需任何配置。</p>
<p><strong>在公司外</strong>(家里、出差、用手机热点)必须先连上<strong>飞连</strong>,否则页面打不开。打不开时先检查飞连是不是断了,再去找研发。</p>
</div>
<ol class="steps">
<li class="step">
<div class="step-n">1</div>
<div class="step-b">
<h4>打开 <code>manta-test.hellay.net/admin/login</code></h4>
<p>输入<strong>内部 SHAREid 账号</strong>和密码,点「登录」。页面上没有「注册」和「忘记密码」,这是正常的。</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="登录页。只有用户名、密码、登录按钮三个元素。" src="img/01-01.jpg"><figcaption><span class="fignum">图 1-1</span><span>登录页。只有用户名、密码、登录按钮三个元素。</span></figcaption></figure>
</div>
</li>
<li class="step">
<div class="step-n">2</div>
<div class="step-b">
<h4>打不开或登录失败</h4>
<p>找<strong>研发 - 杨继广</strong>配置权限。平台<strong>不区分角色</strong>,开通后所有人看到的内容和可执行的操作都一样。</p>
</div>
</li>
</ol>
<div class="note">
<span class="lbl">关于环境</span>
<p>本手册基于<strong>测试环境</strong> <code>manta-test.hellay.net</code> 编写。生产环境的页面布局与操作步骤一致,只有域名不同。</p>
</div>
</section>
<!-- ============ 2 ============ -->
<section id="s2">
<div class="sec-head"><span class="sec-num">02</span><h2>进入人群包管理</h2></div>
<p class="sec-sub">左侧六个菜单,日常只用一个。</p>
<p>登录后进入工作台。在左侧导航点 <strong>人群包管理 → 人群包管理</strong>,进入人群包列表 —— 这是你 90% 时间待的页面。</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="人群包列表。左侧导航、列表字段、右上角「新增人群包」按钮。" src="img/02-01.jpg"><figcaption><span class="fignum">图 2-1</span><span>人群包列表。左侧导航、列表字段、右上角「新增人群包」按钮。</span></figcaption></figure>
<h3>其余菜单要不要管</h3>
<div class="tw">
<table>
<thead><tr><th>菜单</th><th>用途</th><th>AM / 运营</th></tr></thead>
<tbody>
<tr><td><strong>工作台</strong></td><td>登录日志与系统提示</td><td>不用看</td></tr>
<tr><td><strong>标签管理</strong></td><td>标签的创建与审核,由数据侧维护</td><td>不用碰</td></tr>
<tr><td><strong>人群包管理</strong></td><td>创建、查看、导出、编辑、删除人群包</td><td><strong>主战场</strong></td></tr>
<tr><td><strong>IP 黑名单管理</strong></td><td>IP 拦截配置</td><td>不用碰</td></tr>
<tr><td><strong>管理权限</strong></td><td>后台账号权限</td><td>不用碰</td></tr>
<tr><td><strong>我的帐号</strong></td><td>改自己的密码等</td><td>按需</td></tr>
</tbody>
</table>
</div>
<h3>列表字段怎么读</h3>
<div class="tw">
<table>
<thead><tr><th>字段</th><th>含义</th></tr></thead>
<tbody>
<tr><td><strong>ID</strong></td><td>人群包编号,导出文件名和接口都会带上它</td></tr>
<tr><td><strong>名称</strong></td><td>创建时自己起的名字</td></tr>
<tr><td><strong>圈选策略</strong></td><td>这个包的集合运算表达式,见 <a href="#s3">第 3 节</a></td></tr>
<tr><td><strong>覆盖人数</strong></td><td><strong>创建时的快照</strong>,不会自动刷新,见 <a href="#s4">第 4 节</a></td></tr>
<tr><td><strong>添加时间</strong></td><td><strong>UTC 时间</strong>,比北京时间晚 8 小时</td></tr>
<tr><td><strong>操作</strong></td><td>导出 ▾ / 编辑 / 删除</td></tr>
</tbody>
</table>
</div>
<p>列表按 <strong>ID 倒序</strong>排列,最新创建的排在最上面。</p>
<div class="note tip">
<span class="lbl">两个创建入口</span>
<p>左侧「<strong>新增人群包</strong>」和列表右上角的「<strong>新增人群包</strong>」按钮是同一个页面。右上角蓝色的「<strong>+ 创建</strong>」是通用入口,展开后可以选创建<strong>人群包</strong>或创建<strong>标签</strong> —— 运营选人群包即可。</p>
</div>
</section>
<!-- ============ 3 ============ -->
<section id="s3">
<div class="sec-head"><span class="sec-num">03</span><h2>新建人群包</h2></div>
<p class="sec-sub">起名 → 选运算符 → 逐个加标签 → 提交。全程无审核。</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="新增人群包表单上半部分:名称、操作类型、预估受众人数、选择标签。" src="img/03-01.jpg"><figcaption><span class="fignum">图 3-1</span><span>新增人群包表单上半部分:名称、操作类型、预估受众人数、选择标签。</span></figcaption></figure>
<figure><img class="shot" loading="lazy" decoding="async" alt="表单下半部分:构建表达式区与「提交 / 返回列表」按钮。" src="img/03-02.jpg"><figcaption><span class="fignum">图 3-2</span><span>表单下半部分:构建表达式区与「提交 / 返回列表」按钮。</span></figcaption></figure>
<ol class="steps">
<li class="step">
<div class="step-n">1</div>
<div class="step-b">
<h4>填写人群包名称</h4>
<p>建议用<strong>「产品_国家_人群特征_日期」</strong>的格式,例如 <code>Edadeal_RU_Ecom_0901</code>、<code>Amazon_SA_Travel&amp;local_0831</code>。名称是后面找包和对接渠道时唯一的抓手,别用「测试1」这类。</p>
</div>
</li>
<li class="step">
<div class="step-n">2</div>
<div class="step-b">
<h4>选择操作类型(集合运算符)</h4>
<p>决定多个标签之间怎么组合。四选一:</p>
<div class="ops">
<div class="op-card" style="--c:var(--op-and)"><div class="sym">AND</div><div class="zh">交集</div><div class="d">同时满足所有标签。最常用 —— 「俄罗斯 <em>且</em> 逛过电商」。</div></div>
<div class="op-card" style="--c:var(--op-or)"><div class="sym">OR</div><div class="zh">并集</div><div class="d">满足任一标签即可。用来放大量级。</div></div>
<div class="op-card" style="--c:var(--op-not)"><div class="sym">NOT</div><div class="zh">差集</div><div class="d">排除某部分人。用来剔除已转化或已安装用户。</div></div>
<div class="op-card" style="--c:var(--op-xor)"><div class="sym">XOR</div><div class="zh">对称差</div><div class="d">只保留「二选一」的人,两者都满足的反而排除。用得少。</div></div>
</div>
<div class="note warn">
<span class="lbl">注意</span>
<p>点中运算符后,<strong>卡片本身没有任何选中高亮</strong>,界面上看不出你选没选。判断依据是往下滚看「构建表达式」区 —— 出现 <code>AND(</code> 就说明选中了。</p>
</div>
</div>
</li>
<li class="step">
<div class="step-n">3</div>
<div class="step-b">
<h4>挑一个标签分类</h4>
<p>「选择标签」区有四个页签,括号里是该类下的标签数量。选中的页签会变成深色底:</p>
<ul>
<li><strong>基础资料 (5)</strong> —— 语言、国家、城市、手机品牌、app_id</li>
<li><strong>用户行为 (112)</strong> —— 购买、付费、安装过某类产品……</li>
<li><strong>用户分类 (28)</strong> —— 游戏、金融、购物、旅游与本地生活……</li>
<li><strong>设备属性 (1)</strong> —— android 系统版本</li>
</ul>
<p>完整清单见文末<a href="#s8">标签速查</a>。</p>
</div>
</li>
<li class="step">
<div class="step-n">4</div>
<div class="step-b">
<h4>选具体标签与新鲜度</h4>
<p>下拉框里每一项都是 <code>[标签ID] 标签名</code> 的格式。下拉打开后<strong>顶部有搜索框</strong>,用户行为有 112 个标签,直接搜关键词比往下翻快得多。</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="标签下拉。顶部搜索框,选项格式为 [标签ID] 标签名。" src="img/03-06.jpg"><figcaption><span class="fignum">图 3-3</span><span>标签下拉。顶部搜索框,选项格式为 [标签ID] 标签名。</span></figcaption></figure>
<div class="note warn">
<span class="lbl">注意 · 下拉框数量会变</span>
<p>不同分类的标签,需要填的下拉框数量<strong>不一样</strong>,这是最容易卡住新手的地方:</p>
<ul>
<li><strong>3 个下拉</strong> —— 标签本身还要选值。如 <code>[36] 国家</code> 必须再选 <code>RU</code>;<code>[44] 手机品牌</code> 必须再选具体品牌。</li>
<li><strong>2 个下拉</strong> —— 标签就是条件本身,没有值可选。如 <code>[54] 旅游与本地生活</code>、<code>[38] 购买</code>。</li>
</ul>
<p>看不到第三个框不是页面坏了,是这个标签不需要值。</p>
</div>
<p>最后一个下拉是<strong>新鲜度</strong>,指圈的是最近多长时间的数据,四选一:</p>
<div class="tw">
<table>
<thead><tr><th>新鲜度</th><th class="num">表达式里的写法</th><th>适用</th></tr></thead>
<tbody>
<tr><td>一个月</td><td class="num">·1</td><td>行为新鲜、意图强,量级最小</td></tr>
<tr><td>三个月</td><td class="num">·3</td><td>兼顾新鲜度与量级</td></tr>
<tr><td>半年</td><td class="num">·6</td><td>最常用的默认档</td></tr>
<tr><td>一年</td><td class="num">·12</td><td>要量级时用</td></tr>
</tbody>
</table>
</div>
<figure><img class="shot" loading="lazy" decoding="async" alt="基础资料 → [36] 国家,需要三个下拉:标签、值 RU、新鲜度 半年。" src="img/03-03.jpg"><figcaption><span class="fignum">图 3-4</span><span>基础资料 → [36] 国家,需要三个下拉:标签、值 RU、新鲜度 半年。</span></figcaption></figure>
</div>
</li>
<li class="step">
<div class="step-n">5</div>
<div class="step-b">
<h4>点「添加标签」,把标签放进表达式</h4>
<p>每点一次「添加标签」,就往表达式里填一个操作数。加完第一个时是这样:</p>
<div class="expr"><span class="op">AND(</span> <span class="tag">〔国家:RU<span class="fresh">·6</span>〕</span><span class="dim">✕</span> , <span class="dim">[参数]</span> <span class="op">)</span></div>
<p><code>参数</code> 是还没填的占位。把第二个标签也加进去,表达式就完整了:</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="加入第一个标签后,第二个操作数显示为蓝色「参数」占位。" src="img/03-04.jpg"><figcaption><span class="fignum">图 3-5</span><span>加入第一个标签后,第二个操作数显示为蓝色「参数」占位。</span></figcaption></figure>
<figure><img class="shot" loading="lazy" decoding="async" alt="表达式填满,预估受众人数立即算出 16,049,379。" src="img/03-05.jpg"><figcaption><span class="fignum">图 3-6</span><span>表达式填满,预估受众人数立即算出 16,049,379。</span></figcaption></figure>
<h3 style="margin-top:26px">怎么读这行表达式</h3>
<div class="expr"><span class="op">AND(</span> <span class="tag">〔国家:RU<span class="fresh">·6</span>〕</span> , <span class="tag">〔旅游与本地生活<span class="fresh">·6</span>〕</span> <span class="op">)</span></div>
<ul class="anno">
<li><code>AND</code><span>运算符 —— 两个条件同时满足</span></li>
<li><code>国家:RU</code><span>标签名 : 标签值 —— 国家等于俄罗斯</span></li>
<li><code>·6</code><span>新鲜度 —— 最近 <strong>6 个月</strong>的数据</span></li>
<li><code>旅游与本地生活</code><span>该标签不需要值,所以没有冒号部分</span></li>
</ul>
<p>表达式下方还有一个文本框,显示同一条式子的 ID 形式:<code>AND(〔36:RU•6〕,〔54•6〕)</code> —— 这里的 <code>36</code> 和 <code>54</code> 是标签 ID。</p>
<div class="note warn">
<span class="lbl">注意 · 列表表头写错了</span>
<p>列表页「圈选策略」的表头括号里写着「数字为标签ID」,但列表里显示的 <code>〔国家:RU·6〕</code> 中的 <strong>6 是新鲜度,不是标签 ID</strong>。以本节的读法为准。</p>
</div>
<div class="note tip">
<span class="lbl">进阶 · 嵌套表达式</span>
<p>蓝色的「<strong>参数</strong>」占位是<strong>可以点的</strong> —— 点开可以在里面再嵌一层运算,构造 <code>AND(A, OR(B,C))</code> 这类复合条件。需要「俄罗斯 且(逛过电商 或 用过钱包)」时就靠它。</p>
</div>
</div>
</li>
<li class="step">
<div class="step-n">6</div>
<div class="step-b">
<h4>确认预估受众人数,提交</h4>
<p>表达式一填满,<strong>预估受众人数会自动算出来</strong>,不用手动点计算。这个数就是这个包能圈到的实际量级 —— 如果数字明显不对(太小或为 0),先回头检查标签和新鲜度,别急着提交。</p>
<p>确认无误后点 <strong>提交</strong>。<strong>平台没有审核环节</strong>,提交即生效。</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="提交成功页。页面会自动跳回列表,不跳就点「这里」。" src="img/03-07.jpg"><figcaption><span class="fignum">图 3-7</span><span>提交成功页。页面会自动跳回列表,不跳就点「这里」。</span></figcaption></figure>
</div>
</li>
</ol>
</section>
<!-- ============ 4 ============ -->
<section id="s4">
<div class="sec-head"><span class="sec-num">04</span><h2>读懂覆盖人数</h2></div>
<p class="sec-sub">列表上的数和编辑页里的数不是一回事,对数之前先搞清楚这点。</p>
<p>新建的包会出现在列表第一行,覆盖人数与创建时的预估完全一致:</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="ID 5 为刚创建的包,覆盖人数 16,049,379,与创建时的预估一致。" src="img/04-01.jpg"><figcaption><span class="fignum">图 4-1</span><span>ID 5 为刚创建的包,覆盖人数 16,049,379,与创建时的预估一致。</span></figcaption></figure>
<div class="tw">
<table>
<thead><tr><th>在哪看</th><th>叫什么</th><th>是什么</th></tr></thead>
<tbody>
<tr><td>人群包列表</td><td><strong>覆盖人数</strong></td><td><strong>创建时的快照</strong>,之后不再变化</td></tr>
<tr><td>编辑页</td><td><strong>预估受众人数</strong></td><td><strong>每次打开实时重算</strong>,随底层数据变动</td></tr>
</tbody>
</table>
</div>
<div class="note warn">
<span class="lbl">注意 · 两个数会对不上</span>
<p>同一个包、同一条表达式,列表显示 <strong>16,049,379</strong>,几分钟后打开编辑页显示 <strong>16,225,897</strong>。这不是 bug —— 底层数据在持续更新,实时值自然会漂。</p>
<p><strong>要报当前量级,进编辑页看实时值;列表里的数只代表建包那一刻。</strong></p>
</div>
<div class="note warn">
<span class="lbl">注意 · 时间是 UTC</span>
<p>列表「添加时间」是 <strong>UTC 时间</strong>,比北京时间<strong>晚 8 小时</strong>。页面显示 <code>2026-09-01 06:15:36</code>,实际是北京时间当天下午 <code>14:15</code>。导出文件名里的时间戳同理。</p>
</div>
</section>
<!-- ============ 5 ============ -->
<section id="s5">
<div class="sec-head"><span class="sec-num">05</span><h2>导出</h2></div>
<p class="sec-sub">两种方式:下载 CSV 文件,或生成接口地址给下游系统。</p>
<p>在目标人群包这一行,点「<strong>导出</strong>」右侧的 <strong>▾</strong>,展开两个选项:</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="导出菜单:接口 / 文件。" src="img/05-00.jpg"><figcaption><span class="fignum">图 5-1</span><span>导出菜单:接口 / 文件。</span></figcaption></figure>
<h3>方式一 · 文件(下载 CSV)</h3>
<p>点「文件」后<strong>没有任何弹窗、没有二次确认,页面也不会有任何变化</strong> —— 浏览器直接开始下载,唯一的反馈是右上角下载图标在转。</p>
<div class="note warn">
<span class="lbl">注意 · 别以为没反应就狂点</span>
<p>人群包越大文件越大,下载要等。实测 64.7 万人的包约 <strong>24 MB</strong>,1,604 万人的包超过 <strong>500 MB</strong>,且中途可能因网络中断。点一次就耐心等浏览器下载完。</p>
</div>
<p>导出文件的结构:</p>
<div class="tw">
<table>
<thead><tr><th>项目</th><th>说明</th></tr></thead>
<tbody>
<tr><td>文件名</td><td><code>{包名片段}_audience_{人群包ID}_{时间戳}.csv</code>,时间戳为 UTC</td></tr>
<tr><td>格式</td><td><strong>单列 CSV</strong>,第 1 行是表头 <code>gaid</code></td></tr>
<tr><td>内容</td><td>第 2 行起每行一个 GAID,标准 UUID 格式</td></tr>
<tr><td>行数</td><td>覆盖人数 + 1 行表头,可用来校验完整性</td></tr>
<tr><td>ID 类型</td><td><strong>只有 GAID(Android 广告 ID),不含 IDFA</strong></td></tr>
</tbody>
</table>
</div>
<p>示例:<code>SA_Travel&amp;Local_audience_4_2026_08_31_08_08_13.csv</code>,646,957 行 = 覆盖人数 646,956 + 表头。</p>
<h3>方式二 · 接口(给 Midas / SAN 调用)</h3>
<p>点「接口」弹出对话框,只有一个字段「<strong>选择接入方</strong>」,三个选项:<code>测试</code>、<code>midas</code>、<code>san</code>。</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="「导出接口」弹窗,选择接入方下拉。" src="img/05-02.jpg"><figcaption><span class="fignum">图 5-2</span><span>「导出接口」弹窗,选择接入方下拉。</span></figcaption></figure>
<p>选定接入方后,<strong>接口地址立即生成</strong>,没有确认按钮。点「复制」把地址交给下游系统即可:</p>
<div class="expr"><span class="dim">http://manta-test.hellay.net/api/v1/audience/export/</span><span class="op">{token}</span></div>
<figure><img class="shot" loading="lazy" decoding="async" alt="选定 midas 后生成的接口地址(token 段已打码)与「复制」按钮。" src="img/05-03.jpg"><figcaption><span class="fignum">图 5-3</span><span>选定 midas 后生成的接口地址(token 段已打码)与「复制」按钮。</span></figcaption></figure>
<div class="note danger">
<span class="lbl">安全</span>
<p>接口地址里的 <strong>token 就是凭证</strong>,拿到地址的人即可取走整个人群包。只发给对应的接入方,<strong>不要贴进公开文档、群聊或工单</strong>。不同接入方生成的地址不同,不要互相复用。</p>
</div>
</section>
<!-- ============ 6 ============ -->
<section id="s6">
<div class="sec-head"><span class="sec-num">06</span><h2>编辑与删除</h2></div>
<p class="sec-sub">改策略要整体重建;删除不可恢复。</p>
<h3>编辑</h3>
<p>点操作列的「编辑」,进入的页面和新增页布局完全一样,只是标题变成「编辑人群包」,名称和预估受众人数已经填好。</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="编辑页。布局与新增页一致,名称已回填。" src="img/06-01.jpg"><figcaption><span class="fignum">图 6-1</span><span>编辑页。布局与新增页一致,名称已回填。</span></figcaption></figure>
<p>原有的圈选策略<strong>会完整回显</strong>在构建表达式区:</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="编辑页回显原表达式,预估受众人数为实时重算值。" src="img/06-02.jpg"><figcaption><span class="fignum">图 6-2</span><span>编辑页回显原表达式,预估受众人数为实时重算值。</span></figcaption></figure>
<div class="note warn">
<span class="lbl">注意 · 改策略必须整体重建</span>
<p>虽然表达式回显了,但<strong>不能在原表达式上局部增删</strong>。要改圈选策略,得先点红色的「<strong>清空</strong>」,再从选操作类型开始重新搭一遍。</p>
<p>只改名字则不受影响,直接改完提交即可。</p>
</div>
<h3>删除</h3>
<p>点操作列的「删除」,弹出<strong>浏览器原生确认框</strong>:</p>
<figure><img class="shot" loading="lazy" decoding="async" alt="删除确认框。只有一句「您确认删除吗?」,不显示包名。" src="img/06-03.jpg"><figcaption><span class="fignum">图 6-3</span><span>删除确认框。只有一句「您确认删除吗?」,不显示包名。</span></figcaption></figure>
<div class="note danger">
<span class="lbl">高危 · 删错了救不回来</span>
<p>确认框<strong>只说「您确认删除吗?」,不显示被删的是哪个包、哪个 ID</strong>。平台没有回收站,点了「确定」就没了。</p>
<p><strong>核对办法</strong>:把鼠标停在「删除」上先别点,浏览器<strong>左下角状态栏</strong>会显示 <code>/admin/audience/delete?audience_id=3</code> —— 确认这个 ID 和你要删的那一行一致,再点。</p>
</div>
</section>
<!-- ============ 7 ============ -->
<section id="s7">
<div class="sec-head"><span class="sec-num">07</span><h2>六个坑</h2></div>
<p class="sec-sub">都是实际操作中撞到的,按撞到的概率排序。</p>
<div class="tw">
<table>
<thead><tr><th style="width:30%">现象</th><th>真相与应对</th></tr></thead>
<tbody>
<tr>
<td><strong>点了运算符,看不出选中没有</strong></td>
<td>操作类型卡片<strong>没有选中高亮</strong>。往下滚看「构建表达式」区,出现 <code>AND(</code> 之类的运算符才算选上。</td>
</tr>
<tr>
<td><strong>标签选完只有两个下拉框</strong></td>
<td>正常。<code>国家</code>、<code>手机品牌</code> 这类标签需要选值(3 个框),<code>旅游与本地生活</code>、<code>购买</code> 这类标签本身就是条件(2 个框)。</td>
</tr>
<tr>
<td><strong>列表时间和实际操作时间对不上</strong></td>
<td>列表「添加时间」和导出文件名里的时间戳都是 <strong>UTC</strong>,<strong>+8 小时</strong>才是北京时间。</td>
</tr>
<tr>
<td><strong>列表覆盖人数和编辑页数字不一样</strong></td>
<td>列表是<strong>建包时的快照</strong>,编辑页是<strong>实时重算</strong>。报当前量级用编辑页的数。</td>
</tr>
<tr>
<td><strong>点了导出没反应</strong></td>
<td>「文件」导出<strong>无弹窗无提示</strong>,已经在下载了。看浏览器右上角下载图标,大包要等很久,别重复点。</td>
</tr>
<tr>
<td><strong>「数字为标签ID」看不懂</strong></td>
<td>列表表头的这句提示<strong>写错了</strong>。<code>〔国家:RU·6〕</code> 里的 <code>6</code> 是新鲜度(半年)。标签 ID 出现在下拉框的 <code>[36]</code> 和表达式文本框里。</td>
</tr>
</tbody>
</table>
</div>
</section>
<!-- ============ 8 ============ -->
<section id="s8">
<div class="sec-head"><span class="sec-num">附录</span><h2>标签速查</h2></div>
<p class="sec-sub">共 146 个标签。下拉框里搜关键词最快,这张表用来提前想好圈哪些。</p>
<div class="finder">
<input id="q" type="search" placeholder="搜标签名或 ID,例如:电商、加密、38" aria-label="搜索标签">
<div class="segs" role="group" aria-label="按分类筛选">
<button data-cat="all" aria-pressed="true">全部</button>
<button data-cat="category" aria-pressed="false">用户分类 28</button>
<button data-cat="behavior" aria-pressed="false">用户行为 112</button>
<button data-cat="other" aria-pressed="false">基础 · 设备 6</button>
</div>
</div>
<p class="count" id="cnt"></p>
<div class="tw">
<table>
<thead><tr><th class="num" style="width:80px">标签ID</th><th>标签名</th><th style="width:130px">分类</th><th style="width:110px">需选值</th></tr></thead>
<tbody id="tb"></tbody>
</table>
<div class="empty" id="none" hidden>没有匹配的标签</div>
</div>
<div class="note">
<span class="lbl">说明</span>
<p>「需选值」为<strong>是</strong>的标签,在表单里会多出一个下拉框让你选具体的值(如国家选 <code>RU</code>);为<strong>否</strong>的标签本身就是条件,只需再选新鲜度。</p>
</div>
</section>
</main>
<footer>
<span>Manta 人群包平台操作手册 · 基于测试环境 manta-test.hellay.net 整理</span>
<span>如平台改版与本文不符,以页面实际为准</span>
</footer>
</div>
<div id="lb" role="dialog" aria-label="放大查看截图" aria-modal="true">
<img alt="">
<div class="hint">点击任意处或按 Esc 关闭</div>
</div>
<script>
(function(){
/* ---- lightbox ---- */
var lb=document.getElementById('lb'), lbi=lb.querySelector('img');
document.querySelectorAll('.shot').forEach(function(im){
im.addEventListener('click',function(){ lbi.src=im.src; lbi.alt=im.alt; lb.classList.add('on'); });
});
lb.addEventListener('click',function(){ lb.classList.remove('on'); lbi.src=''; });
document.addEventListener('keydown',function(e){ if(e.key==='Escape'&&lb.classList.contains('on')){ lb.classList.remove('on'); lbi.src=''; } });
/* ---- toc active state ---- */
var links=[].slice.call(document.querySelectorAll('.toc a'));
var map={}; links.forEach(function(a){ var el=document.querySelector(a.getAttribute('href')); if(el) map[el.id]=a; });
if('IntersectionObserver' in window){
var io=new IntersectionObserver(function(es){
es.forEach(function(en){
if(en.isIntersecting){ links.forEach(function(a){a.classList.remove('on')}); if(map[en.target.id]) map[en.target.id].classList.add('on'); }
});
},{rootMargin:'-10% 0px -70% 0px'});
document.querySelectorAll('section').forEach(function(s){io.observe(s)});
}
/* ---- tag appendix ---- */
var TAGS = [{"id":35,"n":"语言","c":"profile","v":true},{"id":36,"n":"国家","c":"profile","v":true},{"id":37,"n":"城市","c":"profile","v":true},{"id":44,"n":"手机品牌","c":"profile","v":true},{"id":82,"n":"app_id","c":"profile","v":true},{"id":43,"n":"android系统版本","c":"device","v":true},{"id":45,"n":"游戏","c":"category","v":false},{"id":46,"n":"金融","c":"category","v":false},{"id":47,"n":"购物","c":"category","v":false},{"id":48,"n":"社交与约会","c":"category","v":false},{"id":49,"n":"娱乐","c":"category","v":false},{"id":50,"n":"博彩","c":"category","v":false},{"id":51,"n":"工具","c":"category","v":false},{"id":52,"n":"商务","c":"category","v":false},{"id":53,"n":"美食与饮品","c":"category","v":false},{"id":54,"n":"旅游与本地生活","c":"category","v":false},{"id":55,"n":"赚钱与返利","c":"category","v":false},{"id":56,"n":"教育","c":"category","v":false},{"id":57,"n":"健康与健身","c":"category","v":false},{"id":58,"n":"汽车与交通工具","c":"category","v":false},{"id":59,"n":"生活方式","c":"category","v":false},{"id":60,"n":"新闻与杂志","c":"category","v":false},{"id":61,"n":"医疗","c":"category","v":false},{"id":62,"n":"图书与参考","c":"category","v":false},{"id":63,"n":"电信","c":"category","v":false},{"id":64,"n":"通讯","c":"category","v":false},{"id":65,"n":"家居","c":"category","v":false},{"id":66,"n":"体育","c":"category","v":false},{"id":67,"n":"地图与导航","c":"category","v":false},{"id":68,"n":"音乐与音频","c":"category","v":false},{"id":69,"n":"效率办公","c":"category","v":false},{"id":70,"n":"摄影","c":"category","v":false},{"id":71,"n":"虚拟","c":"category","v":false},{"id":72,"n":"视频播放与编辑","c":"category","v":false},{"id":38,"n":"购买","c":"behavior","v":false},{"id":39,"n":"付费","c":"behavior","v":false},{"id":40,"n":"入金","c":"behavior","v":false},{"id":41,"n":"投资","c":"behavior","v":false},{"id":42,"n":"贷款","c":"behavior","v":false},{"id":73,"n":"新手引导","c":"behavior","v":false},{"id":74,"n":"看广告","c":"behavior","v":false},{"id":75,"n":"等级达成","c":"behavior","v":false},{"id":76,"n":"加购","c":"behavior","v":false},{"id":77,"n":"商品浏览","c":"behavior","v":false},{"id":78,"n":"订阅","c":"behavior","v":false},{"id":79,"n":"申贷","c":"behavior","v":false},{"id":80,"n":"kyc开始","c":"behavior","v":false},{"id":81,"n":"kyc成功","c":"behavior","v":false},{"id":83,"n":"安装过数字银行产品","c":"behavior","v":false},{"id":84,"n":"安装过消费贷产品","c":"behavior","v":false},{"id":85,"n":"安装过小额贷款产品","c":"behavior","v":false},{"id":86,"n":"安装过数字钱包产品","c":"behavior","v":false},{"id":87,"n":"安装过音乐订阅产品","c":"behavior","v":false},{"id":88,"n":"安装过视频订阅产品","c":"behavior","v":false},{"id":89,"n":"安装过国家医疗服务产品","c":"behavior","v":false},{"id":90,"n":"安装过政府公共服务产品","c":"behavior","v":false},{"id":91,"n":"安装过电商卖家端产品","c":"behavior","v":false},{"id":92,"n":"安装过外卖骑手端产品","c":"behavior","v":false},{"id":93,"n":"安装过快递配送端产品","c":"behavior","v":false},{"id":94,"n":"安装过网约车司机端产品","c":"behavior","v":false},{"id":95,"n":"安装过线下门店经营产品","c":"behavior","v":false},{"id":96,"n":"安装过母婴育儿产品","c":"behavior","v":false},{"id":97,"n":"安装过女性时尚电商产品","c":"behavior","v":false},{"id":98,"n":"安装过美妆电商产品","c":"behavior","v":false},{"id":99,"n":"安装过经期管理产品","c":"behavior","v":false},{"id":100,"n":"安装过办公软件产品","c":"behavior","v":false},{"id":101,"n":"安装过外卖餐饮产品","c":"behavior","v":false},{"id":102,"n":"安装过即时配送产品","c":"behavior","v":false},{"id":103,"n":"安装过航空酒旅产品","c":"behavior","v":false},{"id":104,"n":"安装过星座塔罗占卜产品","c":"behavior","v":false},{"id":105,"n":"安装过办公IM产品","c":"behavior","v":false},{"id":106,"n":"安装过招聘求职产品","c":"behavior","v":false},{"id":107,"n":"安装过足球兴趣产品","c":"behavior","v":false},{"id":108,"n":"安装过足球游戏产品","c":"behavior","v":false},{"id":109,"n":"安装过驾考学习产品","c":"behavior","v":false},{"id":110,"n":"安装过汽车服务工具产品","c":"behavior","v":false},{"id":111,"n":"安装过摩托车品牌官方产品","c":"behavior","v":false},{"id":112,"n":"安装过汽车品牌官方产品","c":"behavior","v":false},{"id":113,"n":"安装过汽车交易平台产品","c":"behavior","v":false},{"id":114,"n":"安装过健身训练产品","c":"behavior","v":false},{"id":115,"n":"安装过运动健康追踪应用","c":"behavior","v":false},{"id":116,"n":"安装过投资交易产品","c":"behavior","v":false},{"id":117,"n":"安装过加密货币产品","c":"behavior","v":false},{"id":118,"n":"安装过智能家居产品","c":"behavior","v":false},{"id":119,"n":"安装过硬件检测及性能测试产品","c":"behavior","v":false},{"id":120,"n":"安装过体育博彩产品","c":"behavior","v":false},{"id":121,"n":"安装过伊斯兰教产品","c":"behavior","v":false},{"id":122,"n":"安装过基督教产品","c":"behavior","v":false},{"id":123,"n":"安装过视频剪辑与短视频制作产品","c":"behavior","v":false},{"id":124,"n":"安装过照片编辑与美化产品","c":"behavior","v":false},{"id":125,"n":"安装过平面设计产品","c":"behavior","v":false},{"id":126,"n":"安装过音频编辑与音乐创作产品","c":"behavior","v":false},{"id":127,"n":"安装过 AI 视觉创作应用","c":"behavior","v":false},{"id":128,"n":"安装过第三方拍摄增强产品","c":"behavior","v":false},{"id":129,"n":"安装过培训课程产品","c":"behavior","v":false},{"id":130,"n":"安装过少儿教育产品","c":"behavior","v":false},{"id":131,"n":"安装过语言学习产品","c":"behavior","v":false},{"id":132,"n":"安装过AI聊天机器人产品","c":"behavior","v":false},{"id":133,"n":"安装过AI音乐生成产品","c":"behavior","v":false},{"id":134,"n":"安装过AI艺术生成产品","c":"behavior","v":false},{"id":135,"n":"安装过交友约会产品","c":"behavior","v":false},{"id":136,"n":"安装过陌生人随机聊天产品","c":"behavior","v":false},{"id":137,"n":"安装过语音房社交应用","c":"behavior","v":false},{"id":138,"n":"安装过平台创作者后台产品","c":"behavior","v":false},{"id":139,"n":"安装过大学考试学习产品","c":"behavior","v":false},{"id":140,"n":"安装过短视频平台产品","c":"behavior","v":false},{"id":141,"n":"安装过漫画阅读产品","c":"behavior","v":false},{"id":142,"n":"安装过网文小说产品","c":"behavior","v":false},{"id":143,"n":"安装过时尚潮流购物产品","c":"behavior","v":false},{"id":144,"n":"安装过K歌社交产品","c":"behavior","v":false},{"id":145,"n":"安装过地图导航产品","c":"behavior","v":false},{"id":146,"n":"安装过网约车乘客端产品","c":"behavior","v":false},{"id":147,"n":"安装过公共交通出行产品","c":"behavior","v":false},{"id":148,"n":"安装过卫星地图与街景产品","c":"behavior","v":false},{"id":149,"n":"安装过家庭位置共享产品","c":"behavior","v":false},{"id":150,"n":"安装过GPS定位工具产品","c":"behavior","v":false},{"id":151,"n":"安装过地理标记拍照产品","c":"behavior","v":false},{"id":152,"n":"安装过房产买卖租赁产品","c":"behavior","v":false},{"id":153,"n":"安装过新闻资讯产品","c":"behavior","v":false},{"id":154,"n":"安装过播客产品","c":"behavior","v":false},{"id":155,"n":"安装过网络电台产品","c":"behavior","v":false},{"id":156,"n":"安装过电子书阅读产品","c":"behavior","v":false},{"id":157,"n":"安装过综合电商购物产品","c":"behavior","v":false},{"id":158,"n":"安装过二手交易产品","c":"behavior","v":false},{"id":159,"n":"安装过传统银行移动端产品","c":"behavior","v":false},{"id":160,"n":"安装过证券投资产品","c":"behavior","v":false},{"id":161,"n":"安装过外汇差价合约交易产品","c":"behavior","v":false},{"id":162,"n":"安装过二元期权交易产品","c":"behavior","v":false},{"id":163,"n":"安装过加密货币交易所产品","c":"behavior","v":false},{"id":164,"n":"安装过加密钱包产品","c":"behavior","v":false},{"id":165,"n":"安装过保险类产品","c":"behavior","v":false},{"id":166,"n":"安装过商家收款产品","c":"behavior","v":false},{"id":167,"n":"安装过餐饮商家经营产品","c":"behavior","v":false},{"id":168,"n":"安装过进销存管理产品","c":"behavior","v":false},{"id":169,"n":"安装过商家记账产品","c":"behavior","v":false},{"id":170,"n":"安装过企业财务会计产品","c":"behavior","v":false},{"id":171,"n":"安装过影视流媒体产品","c":"behavior","v":false},{"id":172,"n":"安装过音乐流媒体产品","c":"behavior","v":false},{"id":173,"n":"安装过微短剧产品","c":"behavior","v":false},{"id":174,"n":"安装过社交直播产品","c":"behavior","v":false},{"id":175,"n":"安装过游戏直播产品","c":"behavior","v":false},{"id":176,"n":"安装过直播电视产品","c":"behavior","v":false},{"id":177,"n":"安装过体育流媒体产品","c":"behavior","v":false},{"id":178,"n":"安装过动漫流媒体产品","c":"behavior","v":false},{"id":179,"n":"安装过UGC视频产品","c":"behavior","v":false},{"id":180,"n":"安装过有声书产品","c":"behavior","v":false}];
var CATNAME={category:'用户分类',behavior:'用户行为',profile:'基础资料',device:'设备属性'};
var tb=document.getElementById('tb'), cnt=document.getElementById('cnt'), none=document.getElementById('none'), q=document.getElementById('q');
var cat='all';
function render(){
var kw=q.value.trim().toLowerCase();
var rows=TAGS.filter(function(t){
var okCat = cat==='all' || (cat==='other' ? (t.c==='profile'||t.c==='device') : t.c===cat);
if(!okCat) return false;
if(!kw) return true;
return t.n.toLowerCase().indexOf(kw)>-1 || String(t.id).indexOf(kw)>-1;
});
tb.innerHTML = rows.map(function(t){
return '<tr><td class="num"><span class="tid">'+t.id+'</span></td><td>'+t.n+'</td><td>'+CATNAME[t.c]+'</td><td>'+(t.v?'是':'否')+'</td></tr>';
}).join('');
none.hidden = rows.length>0;
cnt.textContent = '显示 '+rows.length+' / '+TAGS.length+' 个标签';
}
q.addEventListener('input',render);
document.querySelectorAll('.segs button').forEach(function(b){
b.addEventListener('click',function(){
cat=b.dataset.cat;
document.querySelectorAll('.segs button').forEach(function(x){x.setAttribute('aria-pressed', x===b?'true':'false')});
render();
});
});
render();
})();
</script>
</body>
</html>