mirror of
https://github.com/sinanyuntu/trade-message-center.git
synced 2026-09-17 13:22:11 +08:00
docs: clarify OneTalk business card profile projection
This commit is contained in:
@@ -33,9 +33,9 @@ originalData.params keys =
|
||||
|
||||
`showCompanyName`、`showEmailAddress` 和 `showCertifications` 是展示开关;它们不是公司名、邮箱或认证详情本身。
|
||||
|
||||
### 2.2 会话联系人对象
|
||||
### 2.2 历史条目的 `contact`(登录人/发送者资料,不能作为客户来源)
|
||||
|
||||
同一条 SDK 条目的 `contact` 中可观察到以下候选字段:
|
||||
同一条 SDK 条目的 `contact` 中可观察到以下候选字段。运行态复核确认,这组资料对应登录人或发送者侧的用户资料,不等于当前会话关联客户资料;它不能被当作名片内容来源。
|
||||
|
||||
```text
|
||||
accountId, accountIdEncrypt, aliId, aliIdEncrypt,
|
||||
@@ -45,12 +45,12 @@ companyName, complianceCountryCode, currentTimeZone, serviceType
|
||||
|
||||
可谨慎使用的资料含义如下:
|
||||
|
||||
| 字段 | 可表达的信息 | 限制 |
|
||||
| ------------------------------- | ------------- | ---------------------------------------- |
|
||||
| `contact.name` | 联系人显示名 | 是会话联系人资料,不能证明是名片固定字段 |
|
||||
| `contact.companyName` | 联系人公司名 | 可为空或滞后 |
|
||||
| `contact.complianceCountryCode` | 国家/地区代码 | 国旗由 UI 按代码渲染,不是消息图片 |
|
||||
| `contact.fullPortrait` | 头像候选 URL | 本样本未填;不能假设必有 |
|
||||
| 字段 | 观察到的信息 | 使用限制 |
|
||||
| ------------------------------- | ------------- | ----------------------------------------------------- |
|
||||
| `contact.name` | 显示名 | 可能是登录人/发送者资料,不能证明是会话客户或名片字段 |
|
||||
| `contact.companyName` | 公司名 | 可为空或滞后;不能写入名片消息事实 |
|
||||
| `contact.complianceCountryCode` | 国家/地区代码 | 国旗由 UI 按代码渲染,不是消息图片 |
|
||||
| `contact.fullPortrait` | 头像候选 URL | 本样本未填;不能假设必有或作为名片快照保存 |
|
||||
|
||||
截图中的邮箱没有观察到独立的 `email` JSON 字段。本样本 `content` 是非 JSON 的普通字符串;邮箱可能出现在其中的展示文本,但没有验证出可复用的字段格式。
|
||||
|
||||
@@ -88,9 +88,20 @@ const getBusinessCardMessages = async (conversation) => {
|
||||
};
|
||||
```
|
||||
|
||||
如果后续业务需要联系人名称、公司、国家代码或头像,必须明确它们是 `contact` 资料观察,不是名片内容的权威声明。跨层同步只应传递经业务批准的白名单字段;不能透传 `contact` 整体对象、加密标识、`chatToken`、`content` 或 `sign`。
|
||||
如果后续业务需要联系人名称、公司、国家代码或头像,应从独立的联系人资料观察链路获取,而不是复用历史条目的 `contact`。`window.__conversationListData__` / profile 观察与消息采集可能异步到达,因此消息观察只输出 `{ version: 1, kind: "business_card" }` marker;Bright 读取 `/messages` 时再按 `[channelAccountId, conversationId]` 读取当前客户资料,并以内存方式补出 `contactName`、`companyName`、`countryCode`、`avatarUrl` 四项。没有客户资料时返回 marker,单字段缺失时返回 `null`,不回退到登录人资料,也不把 view 写回消息事实。
|
||||
|
||||
## 4. 已验证与未覆盖
|
||||
跨层同步只应传递经业务批准的 profile 白名单字段;不能透传 `contact` 整体对象、加密标识、`chatToken`、`content` 或 `sign`。
|
||||
|
||||
- 已验证:`10010/57/cardType=1` 判别组合,`originalData.params` 键集合,联系人候选资料和 `icbuData` 可用性。
|
||||
## 4. 跨层使用边界(实施后)
|
||||
|
||||
- MAIN 历史 decoder 仍使用完整 `(messageType, type, viewType, msgType, subType, cardType)` 联合条件识别名片,但只生成 `business_card` marker。
|
||||
- `item.contact` 不参与名片消息归一化;它可能描述登录人/发送者,不能代表当前会话关联客户。
|
||||
- 客户资料沿独立 `contact.profile.observed` → `onetalk_contact_profile` 路径持久化。消息事实表的 `content` 只保留 `kind` 和 `version`,数据库 exact CHECK 会拒绝附带客户字段的名片 JSON。
|
||||
- 服务端读取先按账号和会话读取当前 profile,再以内存组合出可选 view。profile 不存在时对外仍是 marker;部分 profile 只返回对应 `null`。
|
||||
- 以上实施边界不改变本页“单个真实样本的运行态观察”性质;它记录的是如何避免把观察到的登录人资料误当成客户资料。
|
||||
|
||||
## 5. 已验证与未覆盖
|
||||
|
||||
- 已验证:`10010/57/cardType=1` 判别组合,`originalData.params` 键集合,`contact` 候选资料和 `icbuData` 可用性;`contact` 不应作为会话客户名片来源。
|
||||
- 已实施的跨层规则:消息事实只保存 marker,读取时按同账号同会话 profile 组合 view,资料缺失/部分缺失分别返回 marker/`null`。
|
||||
- 未覆盖:`content` 的名片展示文本格式,独立邮箱字段来源,头像字段在不同名片中的填充率,以及名片详情/跳转链接。
|
||||
|
||||
Reference in New Issue
Block a user