chore: rename product to 聆界短信平台

This commit is contained in:
hectorzhao
2026-09-16 11:31:45 +08:00
parent 86cb9aea36
commit a0209f93bc
15 changed files with 40 additions and 18 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# CMPP 平台仓库开发约束 # 聆界短信平台仓库开发约束
本文件适用于整个仓库。进入子目录工作时,如果存在更具体的 `AGENTS.md`,还应同时遵守子目录规范。 本文件适用于整个仓库。进入子目录工作时,如果存在更具体的 `AGENTS.md`,还应同时遵守子目录规范。
+3 -3
View File
@@ -26,8 +26,8 @@ async function bootstrap() {
configureHttpBodyParsers(app); configureHttpBodyParsers(app);
const swaggerConfig = new DocumentBuilder() const swaggerConfig = new DocumentBuilder()
.setTitle('CMPP Platform API') .setTitle('聆界短信平台 API')
.setDescription('First-version CMPP SMS platform API') .setDescription('聆界短信平台 API')
.setVersion('0.1.0') .setVersion('0.1.0')
.build(); .build();
const document = SwaggerModule.createDocument(app, swaggerConfig); const document = SwaggerModule.createDocument(app, swaggerConfig);
@@ -36,7 +36,7 @@ async function bootstrap() {
const clientDocument = SwaggerModule.createDocument( const clientDocument = SwaggerModule.createDocument(
app, app,
new DocumentBuilder() new DocumentBuilder()
.setTitle('CMPP短信平台 HTTP 客户接口') .setTitle('聆界短信平台 HTTP 客户接口')
.setDescription('单条短信发送、短信状态查询、上行短信查询及回调验签接口') .setDescription('单条短信发送、短信状态查询、上行短信查询及回调验签接口')
.setVersion('1.0.0') .setVersion('1.0.0')
.build(), .build(),
+1 -1
View File
@@ -63,5 +63,5 @@ export function renderHttpGuide(markdown: string, origin: string) {
if (line.trim() && !/^---+$/.test(line)) current.body.push(`<p>${inline(line.replace(/^>\s?/, '').replace(/^- /, '• '))}</p>`); if (line.trim() && !/^---+$/.test(line)) current.body.push(`<p>${inline(line.replace(/^>\s?/, '').replace(/^- /, '• '))}</p>`);
} }
closeTable(); closeTable();
return `<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>聆界短信 · HTTP 接入文档</title><style>${asset('reader.css')}</style></head><body class="http-developer-docs"><header class="http-doc-header"><div><strong>聆界短信 · 开发者文档</strong><h1>HTTP 接口接入文档</h1><p>${escapeHtml(httpDocVersion(markdown))} · 基础地址 ${escapeHtml(origin || '当前环境')}/api/openapi/v1</p></div><div class="http-doc-actions"><a href="/api/client-docs?format=md" download="client-http-api-guide.md">下载 MD</a><a href="/api/client-docs-json" target="_blank" rel="noreferrer">OpenAPI JSON</a></div></header><div class="http-doc-layout"><nav aria-label="文档目录"><details open><summary>目录</summary>${sections.map((section) => `<a href="#${section.id}">${inline(section.title)}</a>`).join('')}</details><label for="doc-search">错误码 / 文档检索</label><input id="doc-search" type="search" placeholder="输入错误码或关键词"><p id="search-status" role="status"></p></nav><main>${sections.map((section) => `<section id="${section.id}" data-doc-section><div class="http-doc-body"><h2>${inline(section.title)}</h2>${section.body.join('')}</div></section>`).join('')}<p id="no-results" hidden>没有匹配的文档内容,请更换关键词。</p></main></div><p class="http-doc-copy-status" role="status" id="copy-status"></p><script>${asset('reader.js')}</script></body></html>`; return `<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>聆界短信平台 · HTTP 接入文档</title><style>${asset('reader.css')}</style></head><body class="http-developer-docs"><header class="http-doc-header"><div><strong>聆界短信平台 · 开发者文档</strong><h1>HTTP 接口接入文档</h1><p>${escapeHtml(httpDocVersion(markdown))} · 基础地址 ${escapeHtml(origin || '当前环境')}/api/openapi/v1</p></div><div class="http-doc-actions"><a href="/api/client-docs?format=md" download="client-http-api-guide.md">下载 MD</a><a href="/api/client-docs-json" target="_blank" rel="noreferrer">OpenAPI JSON</a></div></header><div class="http-doc-layout"><nav aria-label="文档目录"><details open><summary>目录</summary>${sections.map((section) => `<a href="#${section.id}">${inline(section.title)}</a>`).join('')}</details><label for="doc-search">错误码 / 文档检索</label><input id="doc-search" type="search" placeholder="输入错误码或关键词"><p id="search-status" role="status"></p></nav><main>${sections.map((section) => `<section id="${section.id}" data-doc-section><div class="http-doc-body"><h2>${inline(section.title)}</h2>${section.body.join('')}</div></section>`).join('')}<p id="no-results" hidden>没有匹配的文档内容,请更换关键词。</p></main></div><p class="http-doc-copy-status" role="status" id="copy-status"></p><script>${asset('reader.js')}</script></body></html>`;
} }
@@ -313,7 +313,7 @@ export class ReportChannelExportService {
missingFields: detail.missingFields, missingFields: detail.missingFields,
}); });
const workbook = new ExcelJS.Workbook(); const workbook = new ExcelJS.Workbook();
workbook.creator = 'CMPP短信平台'; workbook.creator = '聆界短信平台';
const sheet = workbook.addWorksheet('签名报备', { views: [{ state: 'frozen', ySplit: 1 }] }); const sheet = workbook.addWorksheet('签名报备', { views: [{ state: 'frozen', ySplit: 1 }] });
sheet.columns = detail.fields.map((field) => ({ sheet.columns = detail.fields.map((field) => ({
header: field.exportName || field.name, header: field.exportName || field.name,
@@ -16,7 +16,7 @@ export class ReportOfficialExportService {
async buildOfficialTemplate(reportType: 'signature' | 'drainage', operatorId?: string) { async buildOfficialTemplate(reportType: 'signature' | 'drainage', operatorId?: string) {
const workbook = new ExcelJS.Workbook(); const workbook = new ExcelJS.Workbook();
workbook.creator = 'CMPP短信平台'; workbook.creator = '聆界短信平台';
const sheet = workbook.addWorksheet(reportType === 'signature' ? '签名资料' : '引流信息', { views: [{ state: 'frozen', ySplit: 1 }] }); const sheet = workbook.addWorksheet(reportType === 'signature' ? '签名资料' : '引流信息', { views: [{ state: 'frozen', ySplit: 1 }] });
const headers = reportType === 'signature' const headers = reportType === 'signature'
? ['短信签名', '用途说明', '营业执照图片', '授权书图片', '备注'] ? ['短信签名', '用途说明', '营业执照图片', '授权书图片', '备注']
+2 -2
View File
@@ -1,10 +1,10 @@
# 聆界短信 HTTP API 参考手册 # 聆界短信平台 HTTP API 参考手册
**接口版本:v1 · 文档日期:2026-09-15** **接口版本:v1 · 文档日期:2026-09-15**
## 1. API 概览 ## 1. API 概览
聆界短信 HTTP API 提供单条短信发送、发送结果查询和用户回复查询。平台还可将短信回执和用户回复主动推送到客户系统。 聆界短信平台 HTTP API 提供单条短信发送、发送结果查询和用户回复查询。平台还可将短信回执和用户回复主动推送到客户系统。
### 1.1 服务地址与数据格式 ### 1.1 服务地址与数据格式
@@ -1,4 +1,4 @@
# CMPP 短信平台第一版开发需求文档 # 聆界短信平台第一版开发需求文档
## 0. 文档前提 ## 0. 文档前提
@@ -2317,3 +2317,7 @@ Webhook需在当前受支持Node运行时通过真实HTTPS投递;SSRF校验后
## 2026-09-15 HTTP调试工具与合并整改 ## 2026-09-15 HTTP调试工具与合并整改
继续前述新签名规则,客户端与运营端新增HTTP签名计算页:输入方法、路径、秒时间戳、nonce、AccessSecret和POST原始正文,本地生成HMAC-SHA256并复制,不上传/存储密钥、不发短信。修改输入使旧结果失效。运营端签名与引流报备统一三运营商列组件;客户端企业认证仅隐藏新申请入口,保留状态/进度。HTTP发送按独立HTTP总开关/发送能力校验,不能依赖CMPP开关。上行手机号过滤须1开头11位,接入号1–21位数字,非法返回400。设计及真实验收边界见http-api-assessment-20260910.md的2026-09-15补充。 继续前述新签名规则,客户端与运营端新增HTTP签名计算页:输入方法、路径、秒时间戳、nonce、AccessSecret和POST原始正文,本地生成HMAC-SHA256并复制,不上传/存储密钥、不发短信。修改输入使旧结果失效。运营端签名与引流报备统一三运营商列组件;客户端企业认证仅隐藏新申请入口,保留状态/进度。HTTP发送按独立HTTP总开关/发送能力校验,不能依赖CMPP开关。上行手机号过滤须1开头11位,接入号1–21位数字,非法返回400。设计及真实验收边界见http-api-assessment-20260910.md的2026-09-15补充。
## 2026-09-16 产品名称统一
产品正式名称为“聆界短信平台”,页面标题、API文档品牌名称、导出表格作者和充值回执替代文本统一。产品3.0、工程3.0.0不变;CMPP协议名称及技术标识保持兼容。名称调整仅涉及展示文案和导出作者元数据,不改变布局、业务流程、协议、接口地址或工程版本;版本元数据属于独立变更。
+6 -1
View File
@@ -1,4 +1,4 @@
# CMPP 短信平台第一版系统功能测试用例 # 聆界短信平台第一版系统功能测试用例
## 1. 用例说明 ## 1. 用例说明
@@ -5564,3 +5564,8 @@ CLIENT-0914-0107 的模板样式/顺序、文档归属与检索、中文状
- 回调:成功单次;503 自动重试成功;400 单次终止;超时达到隔离配置两次上限。真实 HTTPS 接收与原字节 HMAC 验证 16/16,保留两项预期失败,不人工重投。 - 回调:成功单次;503 自动重试成功;400 单次终止;超时达到隔离配置两次上限。真实 HTTPS 接收与原字节 HMAC 验证 16/16,保留两项预期失败,不人工重投。
- 收尾:25 条消息终态、25 个批次终态、23 个发送 Outbox dispatched12 条送达按 325 内部单位计费,失败退款 325,最终余额 996100,冻结/释放相抵,三个消费组无积压。专用测试配置停用后数据和余额保留。 - 收尾:25 条消息终态、25 个批次终态、23 个发送 Outbox dispatched12 条送达按 325 内部单位计费,失败退款 325,最终余额 996100,冻结/释放相抵,三个消费组无积压。专用测试配置停用后数据和余额保留。
- 测试环境浏览器 UI 及独立验证码策略不计通过,见 [2026-09-15 记录](http-api-acceptance-20260915.md)。 - 测试环境浏览器 UI 及独立验证码策略不计通过,见 [2026-09-15 记录](http-api-acceptance-20260915.md)。
## 产品名称统一验收(2026-09-16)
- TC-BRAND-20260916-01:浏览器标题、平台Swagger、客户OpenAPI及HTTP文档展示“聆界短信平台”;充值回执图片替代文本、两类报备导出工作簿作者一致。源码检查与构建结果见测试进度,真实页面/API/导出验收单独记录。
- TC-BRAND-20260916-02:产品3.0/工程3.0.0、客户接口独立版本、CMPP协议、API路径、签名规则、工程包名和基础设施标识保持不变;已有工作区修改不被覆盖。
+13
View File
@@ -5058,3 +5058,16 @@ CUA本轮可用,实际后端文档三尺寸1600×1000/1366×768/390×844无页
代码 c781313 与补充修复 cbc4a03 已提交推送,测试环境精确运行 cbc4a033251c7496414b1e7aa6233ed49bd108ec17:36 核验)。包含最新签名协议、双端计算页、报备三列及认证入口隐藏,未遗漏前序范围。最终后端 830/830、前端 158/158,类型/构建/质量门禁通过;最终真实参数回归 78/78,前序独立配置回归 15/15,引流六分支复测通过。25 条隔离记录、13 次模拟 Submit,账务余额与流水一致、冻结净额 0、队列 pending/lag 均 0。Webhook 成功/503 重试/400 终止/超时上限及上行已验收,16 次业务回调 HMAC 正确。专用配置、凭据和模拟器已停用,hosts 精确恢复,未发送至真实运营商。 代码 c781313 与补充修复 cbc4a03 已提交推送,测试环境精确运行 cbc4a033251c7496414b1e7aa6233ed49bd108ec17:36 核验)。包含最新签名协议、双端计算页、报备三列及认证入口隐藏,未遗漏前序范围。最终后端 830/830、前端 158/158,类型/构建/质量门禁通过;最终真实参数回归 78/78,前序独立配置回归 15/15,引流六分支复测通过。25 条隔离记录、13 次模拟 Submit,账务余额与流水一致、冻结净额 0、队列 pending/lag 均 0。Webhook 成功/503 重试/400 终止/超时上限及上行已验收,16 次业务回调 HMAC 正确。专用配置、凭据和模拟器已停用,hosts 精确恢复,未发送至真实运营商。
最终标准 verify 唯一提示为业务计数 +6 条短信/+2 次 Submit,已与本轮六个引流用例逐条核对,工具状态保留 deployed-needs-review,不伪造全绿。浏览器连接超时,测试环境登录后 UI 尚未验收;独立“验证码限制”的具体规则仍需明确。预生产未操作,容量治理未完成。完整证据、失败记录、时间、版本与恢复资产见 [HTTP 接口联合验收记录](http-api-acceptance-20260915.md)。 最终标准 verify 唯一提示为业务计数 +6 条短信/+2 次 Submit,已与本轮六个引流用例逐条核对,工具状态保留 deployed-needs-review,不伪造全绿。浏览器连接超时,测试环境登录后 UI 尚未验收;独立“验证码限制”的具体规则仍需明确。预生产未操作,容量治理未完成。完整证据、失败记录、时间、版本与恢复资产见 [HTTP 接口联合验收记录](http-api-acceptance-20260915.md)。
## 2026-09-16 产品统一更名为聆界短信平台(本地完成)
- 用户要求将项目产品名称由CMPP平台更名为“聆界短信平台”。设计与兼容边界维护于version-3.0-baseline.md“产品名称统一”,需求及TC-BRAND-20260916-01/02同步。
- 已更新浏览器标题、登录页标题/Logo替代文本、双端AppShell品牌名称、充值回执替代文本、平台Swagger/客户OpenAPI名称、HTTP文档页面与MD、两类报备导出工作簿作者,以及当前根规范/UI规范/需求/测试用例/版本基线名称。历史实施记录不追溯改写;CMPP协议、工程包名、服务/存储标识、目录路径、业务逻辑和接口签名不变,工程版本保持3.0.0。
- 11:27 CST验证:前端33文件158项通过,后端76套831项通过;前端tsc --noEmit及最终Vite生产构建、API tsc -p tsconfig.build.json通过;结构质量检查、包体预算检查、git diff --check通过。构建HTML标题与编译后的HTTP文档渲染函数确认新名称。当前终端npm不在PATH,直接调用仓库node_modules内对应CLI完成等价验证,未改全局环境。
- 质量门禁遗留:定向ESLint在official-export.service.ts报告47个原有未使用导入错误,另有LoginPage/RechargeReceiptDialog共3个既有警告;Prettier在official-export.service.ts和RechargeReceiptDialog.tsx报告原有格式问题。已将名称替换在内存中还原后复核,两文件修改前格式检查仍失败、official-export修改前仍47个lint错误;未以整文件格式化扩大范围,不能宣称全部门禁通过。初次Vite构建存在既有大chunk提示。
- 真实浏览器三尺寸、登录后页面、Swagger真实API及报备导出验收未执行;当前项目无可解析的Playwright依赖,未安装依赖或将隔离测试冒充真实业务验收。未连接/修改线上服务,未发送、补发、重投短信或改业务配置。
- Git核验main/实际远端仍为86cb9aea36f7759eef9cc4f0949a9bca7f85617b,暂存区空。已有metrics、发布工具、部署脚本、版本及文档草稿保留,仅对共享文档精确替换名称/追加本轮记录。本地修改完成;本地提交、推送、测试部署、预生产部署均未执行。
### 2026-09-16 更名本地提交范围核对
用户追加授权本地提交。本次精确暂存更名代码、规范标题及需求/用例/进度中的更名段落;package及lock版本、main.ts的Swagger版本变更和既有未跟踪version-3.0-baseline.md草稿不纳入本次提交。3.0.0版本元数据仍留在工作区,提交不代表版本标识已发布。前述测试为本地工作区结果,不冒称隔离候选精确提交的全量验证。既有metrics、发布工具、部署脚本与其他文档改动保留。推送、测试部署及预生产部署未执行。
+1 -1
View File
@@ -1,4 +1,4 @@
# CMPP 平台 UI 设计规范 # 聆界短信平台 UI 设计规范
## 设计原则 ## 设计原则
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" href="/logo/fav.ico" /> <link rel="icon" href="/logo/fav.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>聆界短信管理平台</title> <title>聆界短信平台</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
+2 -2
View File
@@ -86,9 +86,9 @@ export function LoginPage({ portal }: LoginPageProps) {
{!isAdmin ? <ClientLoginCanvas /> : null} {!isAdmin ? <ClientLoginCanvas /> : null}
<section className="login-panel"> <section className="login-panel">
<div className="login-brand"> <div className="login-brand">
<img alt={isAdmin ? 'CMPP 运营端 logo' : 'CMPP 客户端 logo'} src="/logo/logo1.png" /> <img alt={isAdmin ? '聆界短信平台运营端 logo' : '聆界短信平台客户端 logo'} src="/logo/logo1.png" />
<div> <div>
<h1></h1> <h1></h1>
<p>{isAdmin ? '运营端登录' : '客户端登录'}</p> <p>{isAdmin ? '运营端登录' : '客户端登录'}</p>
</div> </div>
</div> </div>
+1 -1
View File
@@ -43,7 +43,7 @@ export function RechargeReceiptDialog({
<article className={['recharge-receipt', isCorrection ? 'recharge-receipt--correction' : ''].filter(Boolean).join(' ')}> <article className={['recharge-receipt', isCorrection ? 'recharge-receipt--correction' : ''].filter(Boolean).join(' ')}>
<header className="recharge-receipt__header"> <header className="recharge-receipt__header">
<img <img
alt="聆界短信服务平台" alt="聆界短信平台"
className="recharge-receipt__logo" className="recharge-receipt__logo"
src="/logo/logo1.png" src="/logo/logo1.png"
/> />
+1 -1
View File
@@ -137,7 +137,7 @@ function AdminAuthenticatedLayout({ session }: { session: LoginSession }) {
return ( return (
<AppShell <AppShell
title="CMPP 运营端" title="聆界短信平台运营端"
subtitle="平台运营管理中心" subtitle="平台运营管理中心"
workspaceName="平台运营工作区" workspaceName="平台运营工作区"
loginPath="/admin/login" loginPath="/admin/login"
+1 -1
View File
@@ -23,7 +23,7 @@ export function ClientLayout() {
function ClientAuthenticatedLayout({ session }: { session: import('@/api/session').LoginSession }) { function ClientAuthenticatedLayout({ session }: { session: import('@/api/session').LoginSession }) {
return ( return (
<AppShell <AppShell
title="短信服务平台" title="聆界短信平台客户端"
subtitle="短信服务控制台" subtitle="短信服务控制台"
workspaceName={session.user.tenantName ?? '企业客户空间'} workspaceName={session.user.tenantName ?? '企业客户空间'}
loginPath="/client/login" loginPath="/client/login"