费率表管理
1. 费率表类型
| 类型 | 用途 |
|---|---|
| 买费率表 (Buy) | 运营商成本价,关联到中继 |
| 卖费率表 (Sell) | 客户销售价,关联到租户 |
2. 创建费率表
Wholesale → 费率表 → 新建:
- 名称:如 “buy-carrier-a-cn”
- 类型:买/卖
- 描述:备注
3. 费率条目
每个费率表包含多条费率条目:
| 字段 | 说明 | 示例 |
|---|---|---|
| 前缀 | 号码前缀(最长匹配) | 8610 |
| 费率 | 每分钟价格(元) | 0.03 |
| 最低时长 | 最低计费秒数 | 6 |
| 计费步长 | 计费单位秒数 | 6 |
计费公式
话单时长 = max(实际通话时长, 最低时长)
计费时长 = ceil(话单时长 / 计费步长) × 计费步长
费用 = 计费时长 / 60 × 费率
示例:费率 0.03 元/分钟,最低 6 秒,步长 6 秒
- 通话 4 秒 → 计费 6 秒 → 0.003 元
- 通话 15 秒 → 计费 18 秒 → 0.009 元
- 通话 60 秒 → 计费 60 秒 → 0.03 元
前缀匹配规则
使用 Trie 最长前缀匹配:
- 号码
861012345678同时匹配86(0.05)和8610(0.03),选择8610 - 无匹配前缀时拒绝呼叫
4. CSV 批量导入
费率表详情 → 导入 → 上传 CSV
CSV 格式:
prefix,rate,min_duration,increment
86,0.05,6,6
8610,0.03,6,6
8613,0.04,6,6
1,0.08,6,6
44,0.06,1,1
| 列 | 必填 | 说明 |
|---|---|---|
| prefix | 是 | 号码前缀 |
| rate | 是 | 每分钟费率 |
| min_duration | 否 | 最低时长,默认 6 |
| increment | 否 | 计费步长,默认 6 |
导入行为要点:
- 幂等 upsert——相同前缀重复导入会更新费率而不是新增行,修正后的 CSV 可以放心重跑。
- 前缀即主键——也意味着前缀打错会创建新条目而不是报错;导入前用文件行数与导入数对一下。
- 粒度可混用——同一张费率表常同时存在按秒(
1,1)的高价目的地与按 6 秒的批量目的地。 - 先预览后提交——大文件导入会先展示解析结果,确认后才写入。
5. 热加载
修改费率表后,需点击 “重新加载” 按钮:
- 系统从数据库导出到
rate_decks.generated.toml - 重新构建内存中的 Prefix Trie
- 后续新通话使用新费率,已有通话不受影响
6. 诊断工具
租户详情 → 价格计算器:
- 输入被叫号码
- 系统显示匹配的前缀、卖费率、路由中继、买费率、预期利润
- 用于验证费率配置是否正确