APAC Tenant Monitoring and Scoring

筛选、信息补全、评分和报告的业务设计说明

以当前 APAC 代码为准 · 2026-07-14

1. 整体流程

目标是在 APAC 租户中找到更值得 Support / Sales 关注的对象。系统先确定租户范围,再补充组织、产品使用和 Billing 信息,最后计算分数与优先级。

同步 HubSpot Target List → 筛选 APAC 租户 → 查询租户信号 → 按规则分流 → 计算分数和优先级 → 生成日报与周报

流程同时处理两类租户:

  • Active candidate:当前满足 APAC 存量口径的租户,执行完整的信息查询和打分。
  • New signup:上一 CST 自然日注册的 APAC 租户,先做组织识别并进入评分;不查询集群和 Billing。

Dispatcher 每次运行先尝试同步完整的 HubSpot Company 目标列表,再从 DevOps DB 读取租户并发送到 Monitor SQS。HubSpot 同步逻辑位于独立模块;如果本次同步失败,租户处理不会被阻塞,Worker 会回退到最近一次成功快照。

2. 租户筛选条件

2.1 Active candidate

用于筛选 APAC 存量监控对象,并作为周报中 stock 类指标的范围。条件全部满足才会入选:

status = 'active'
AND kind = 'external'
AND sales_force_region = 'APAC'
AND country NOT IN ('JP')
AND plan NOT IN ('free_trial', 'new_user', 'closing')
条件设计含义
status = active只看当前活跃租户。
kind = external排除内部租户。
sales_force_region = APAC存量范围以 Salesforce region 为准;当前不会在该字段为空时回退到 country_region。
排除 JP业务范围包含 CN,但不包含 JP。
排除三个 planfree_trial、new_user 和 closing 不进入存量监控范围。

2.2 Previous-day new signup

用于发现刚注册的新租户。时间范围是上一 CST 自然日,不是过去 24 小时;数据库时间仍按 UTC 存储,查询使用 CST 零点对应的 UTC 边界:

created_at >= 上一 CST 自然日 00:00 对应的 UTC 时间
AND created_at < 当前 CST 自然日 00:00 对应的 UTC 时间
AND country_region = 'APAC'
AND country NOT IN ('JP')
与 Active candidate 的差异:新注册按 country_region 判断 APAC,并且不做 status、kind 或 plan 过滤。这样可以先保留上一日所有 APAC 注册,再由后续画像和评分判断价值。

2.3 读取的基础租户字段

两类筛选都会读取以下字段,作为统一画像的基础:

id、created_at、updated_at、name、email、country、time_zone、status、kind、plan、alias、country_region、sales_owner_email、custom_id、segmentation、sales_force_region、sales_force_kind、tam_name。

3. Worker 查询哪些信息

3.1 Domain Intelligence

从租户邮箱中提取 domain,补充以下信息:

结果说明
entity_ai_category组织分类:AI 核心公司、AI 相关公司、非 AI 公司、AI 相关机构、非 AI 机构、个人或 unknown。
business_description组织业务的一句话说明。
official_website可验证的官方网站。
  1. 空邮箱或无效 domain:记为 unknown。
  2. Gmail、Outlook、QQ、163 等已知公共邮箱:直接记为 individual,不做网络查询。
  3. 其他 domain:先读取缓存;缓存默认 30 天有效。
  4. 缓存不存在或过期:通过 Web Search 识别组织、业务和 AI 属性。

教育机构不会因此停止处理。只要是 Active candidate,Domain Intelligence 完成后仍会继续查询集群和 Billing。

3.2 集群和使用情况

查询结果计算方式
cluster_count拉取 DevOps 集群列表的全部分页,保留准确总数。
Service plan 数量分别统计 starter、essential、premium、dedicated。
tenant_avg_qps集群少于 10 个时,从 Clinic 查询过去 30 天 QPS,把同一时间点的各集群 QPS 相加,再计算时间样本平均值。
大集群优化:当 cluster_count >= 10 时,仍完整读取所有 DevOps 分页,确保集群总数和 service plan 数量准确;但不再逐集群查询 Clinic,tenant_avg_qps 写为 NULL。

如果任意一个集群的 Clinic 查询失败,本轮 QPS 也写为 NULL,避免把不完整结果误认为真实的低 QPS。

3.3 Billing 信息

每次处理 Active candidate 都会刷新 Billing 信号:

查询结果说明
has_credit_card是否存在 funding 类型为 credit 且未过期的信用卡。
billing_config_id当前可用的 Billing config,用于后续查询。
active_total_credits所有未关闭 credits 的额度总和。
latest_credit_grant_days_ago最近一笔 credit 开始时间距本次运行的天数。

已有的 billing_config_id 只用于优先定位,不能跳过信用卡验证。如果缓存配置无卡、失效或不存在,会重新扫描该租户的 active Billing configs。

3.4 New signup 的简化路径

New signup 只做 Domain Intelligence,然后按 HubSpot / Sales owner 规则写入对应租户表并触发评分。它不查询集群、QPS、信用卡或 credits。当同一租户后来进入 Active candidate 流程时,这些信息会被完整补齐。

4. 打分模型

total_score = Activity + Fit + Urgency,总分最高 100。三部分分别表示实际使用程度、目标画像匹配度和当前跟进紧迫度。

4.1 Activity,最高 40 分

以下信号累加,最后封顶 40 分:

条件分值
tenant_avg_qps >= 1+25
0.001 <= tenant_avg_qps < 1+12
cluster_count >= 1+10
cluster_count >= 3额外 +8
cluster_count >= 10额外 +5
有有效信用卡+10
tenant_avg_qps >= 1 且无信用卡+5

集群阈值是累加的:1、3、10 个及以上集群分别贡献 10、18、23 分,再受 Activity 40 分上限约束。

4.2 Fit,最高 30 分

Fit 只选择一项,不累加:

组织分类及 domain 条件分值
company_ai_core30
company_ai_related20
company_non_ai,非公共邮箱 domain15
company_non_ai,公共邮箱 domain5
institution_ai_related15
institution_non_ai8
individual0
unknown 或其他未匹配情况3

空 domain 既不属于企业 domain,也不属于已识别的公共邮箱;例如 company_non_ai 但 domain 为空时会落到 3 分。

4.3 Urgency,最高 30 分

以下信号累加,最后封顶 30 分:

条件分值
创建不超过 24 小时,且为 company_ai_core+20
创建不超过 48 小时,且为 company_ai_related+15
plan = poc+15
tenant_avg_qps >= 50+15
至少 3 个集群、无信用卡、且为已识别组织+12
新租户时间加分直接看 created_at,与 EMEA 当前模型保持一致,不要求 source_type = new_signup。

4.4 “已识别组织”的定义

以下五类属于 non-individual / known organization:

company_ai_core、company_ai_related、company_non_ai、institution_ai_related、institution_non_ai。

individual、unknown、空值和未识别分类不满足仅限组织的加急条件。

5. P0 / P1 / P2 优先级规则

优先级不是简单按总分排序。先判断所有 P0 条件;没有命中 P0,再判断 P1;其余为 P2。

5.1 P0:满足任意一项

  • cluster_count >= 50,不限制组织分类;
  • tenant_avg_qps >= 50;
  • tenant_avg_qps >= 10 且为 company_ai_core;
  • 创建不超过 24 小时且为 company_ai_core;
  • plan = poc 且为 company_ai_core 或 company_ai_related;
  • total_score >= 75 且为已识别组织。

5.2 P1:未命中 P0,并满足任意一项

  • total_score >= 45;
  • 创建不超过 48 小时且为 company_ai_related;
  • 创建不超过 24 小时、为 company_non_ai,且使用非公共邮箱 domain;
  • cluster_count >= 10 且为已识别组织;
  • cluster_count >= 3、无信用卡,且为已识别组织。

5.3 P2

没有命中任何 P0 或 P1 条件。

为什么高分租户可能只是 P1,而低分租户可能是 P0:总分只是优先级的一部分。例如 50 个集群会直接触发 P0,即使因为 QPS 未查询而总分较低;相反,72 分但未命中任何 P0 条件的租户仍然是 P1。

6. 特殊处理与性能取舍

6.1 10 个及以上集群

  • DevOps 集群列表仍读取全部分页,集群总数和 service plan 数量必须准确。
  • 跳过 Clinic 的逐集群 QPS 查询,QPS 保存为 NULL。
  • 评分时 NULL QPS 按数值 0 处理,不获得 QPS 分。
  • 10–49 个集群的已识别组织至少为 P1;individual 或 unknown 不会只因达到 10 个集群而升级。

6.2 50 个及以上集群

所有分类直接为 P0,包括 individual 和 unknown。这样即使跳过 QPS,也不会低估超大规模租户。

6.3 三个已知超大租户

以下租户走强制 Sales-owned 快速路径:保留 P0,直接写入 apac_sales_owned_tenants 并从 Active 删除,同时跳过 Domain Intelligence、集群、Clinic、Billing 和后续评分:

  • 1372813089209260919
  • 1372813089209300444
  • 1372813089209301246

6.4 HubSpot Target 与 Sales-owned 分流

除三个强制 Sales-owned 租户外,Worker 在完成必要画像后按以下顺序处理;顺序不可交换:

  1. HubSpot Target 命中:写入 apac_active_tenants,正常计算 total_score,最终优先级强制为 P0。
  2. 否则,sales_owner_email 命中配置的 APAC Sales 邮箱集合:写入 apac_sales_owned_tenants,分数和优先级均按普通规则计算。
  3. 否则:写入 apac_active_tenants,按普通规则评分。

HubSpot 依次尝试 portal ID、account ID、唯一的非个人邮箱根域名和唯一的官网根域名匹配。个人邮箱域名和存在歧义的域名不会自动命中。租户切换分流表时,会在同一事务中从另一张表删除同一 tenant ID,并保留已有评分和人工跟进字段。

当前配置状态:APAC_SALES_EMAILS 由部署参数提供。邮箱集合为空时,不会有租户进入 apac_sales_owned_tenants。HubSpot 的优先级高于 Sales owner。

6.5 查询失败

Domain、集群和 Billing 失败互相隔离:某一类信息失败时尽量保留数据库中的上一次结果,并继续收集其他信号。错误写入 error_message,但错误本身不参与打分,也不会自动提升优先级。

7. 日报与周报口径

7.1 每日 Summary

日报使用确定性 SQL 统计,不重新调用 Domain Intelligence,也不重新计算分数。日报包含两个租户范围:

范围条件用途
当日 Active stock满足 Active candidate 条件,并且最近 24 小时内完成处理。反映本轮已刷新的存量租户。
上一 CST 日 new signup满足 APAC signup 条件,且 created_at 位于上一 CST 自然日。反映上一日注册的新租户。

P0 和 P1 的总数及明细使用以上两个范围的并集,不是只统计 Active stock。因此,上一 CST 日的 new signup 在完成 Worker 和 Scoring 后,也会进入 P0 / P1 统计。

日报主要内容包括:

  • 上一 CST 日 APAC new signups 总数;
  • 其中真实 non-individual 数量;
  • 其中 AI-related 数量;
  • 统一 Summary 范围内的 P0、P1 数量;
  • 最近 7 天有成功 import 的租户数和 import event 数。

P0、P1 和 import 明细区每类最多展示前 10 条。tenant_avg_qps = NULL 显示为 N/A,真实测量结果为零时显示 0。

New signup 汇总根据 created_at 和 APAC signup 口径重新计算,不依赖可被后续 Active 更新覆盖的 source_type。Non-individual 只包含前述五种已识别公司和机构分类。Dispatcher 与 Summary 使用同一个 CST 日窗口。

7.2 Weekly Metrics

周报统计上一完整 CST 周(周日 00:00 到下一周日 00:00)的 new signups,并统计当前 APAC stock、P0 + P1、connected 和 paid 等指标。存量指标与 Active candidate 使用相同范围,signup 指标仍按 created_at 和 country_region 计算。

7.3 报告的数据边界

Summary 和 Weekly 只读取 apac_active_tenants,不会扫描 apac_sales_owned_tenants。最近 24 小时、最近 7 天等滚动窗口仍按实际时间长度计算;CST 只用于“自然日”和“完整周”的边界。

8. 数据结果与职责

数据用途
apac_active_tenants保存普通 APAC 租户和 HubSpot Target 租户的画像、使用信号、评分,以及 HubSpot 匹配证据;日报和周报只读取此表。
apac_sales_owned_tenants保存已由 APAC Sales 跟进的租户及其正常评分;日报和周报不扫描此表。
apac_hubspot_target_accounts保存最近一次成功同步的 HubSpot Target Company 完整快照及匹配字段。
apac_hubspot_target_sync_state保存 HubSpot 同步尝试、最近成功快照和失败状态,支持失败时回退。
domain_intelligence缓存 domain 分类、业务说明和官网,默认有效期 30 天。
apac_tenant_score_snapshots按 CST 日保存分数、优先级和当时的 tenant_bucket,供趋势分析使用。
apac_tenant_events保存 import 等事件;事件由外部生产方写入,本项目只消费统计。

当前实现由五个 Lambda 分别负责 Dispatcher、单租户 Worker、Scoring、日报和周报。Dispatcher 的 HubSpot 同步已拆到独立模块。Key Leads 功能、apac_key_leads 表和 key_lead 字段均已彻底移除。