Install
openclaw skills install @summerzb/dealcenter当回答用户问题需要某个客户(公司/商机/联系人/历史活动/文档)的过往档案背景时先查读 dealcenter 档案;或用户明确要求把信息记录/回填到客户档案时使用。查档是辅助——查不到静默继续,写入仅限用户明确要求或确认后。
openclaw skills install @summerzb/dealcenter本 skill 是回答用户问题时的辅助能力:在动手干活前提供客户过往信息,让回答更准;不是主要任务。由此推出两条铁律:
档案服务名是 DealCenter(工具前缀 dealcenter.*,客户主体是 account 不是 company)——对用户提服务名时一律说 DealCenter,不称 CRM。连接器页的卡片名是 OmniMay MCP(以连接器页当前版本为准),引路到连接器页时一律称 OmniMay MCP。
判定(满足其一即是——「通道没接」,不是「通道坏了」):
dealcenter.* 工具(工具搜索不到该工具组、提示未安装/未接入/未连接)动作(按分支执行,说完立刻回到原任务,把手头能做的部分做完):
未安装 → 插一句引路:> OmniMay MCP 还没安装:到「连接器」页找到「OmniMay MCP」添加并点「连接」(首次会走浏览器授权),弄好后叫我重查就行。
未授权 → 插一句引路:> OmniMay MCP 还没授权:到「连接器」页找到「OmniMay MCP」点「连接」完成浏览器授权,弄好后叫我重查就行。
只说/做这一次:不追问、不展开、不等用户授权/安装完成才交付本轮原任务
用户明确要查档案而通道不通时,绝不答「没有档案 / 没有记录」——数据可能存在,只是通道没通;此时必须引路
使用:
不使用:
判断本次回答是否需要客户档案背景
├─ 不需要 → 直接执行任务
└─ 需要 → dealcenter.account.search(客户名)
├─ 0 命中 / 工具报错 → 静默继续,直接执行任务(不提"没查到",不建议建档)
├─ 1 命中 → dealcenter.account.get_full(id)
└─ 多命中 → 自行判断最符合的一家(用对话里的行业/业务/联系人线索),
判断依据充分就不问用户;实在判不出才问,一句话问清
*注:若工具清单里根本没有 `dealcenter.*` 工具,或调用返回 401/未授权 → 走「配置卡点引路」分支,不是 0 命中/运行失败*
→ 从 get_full 提取对当前任务有用的:公司基本面 / 商机与阶段 / 联系人 / 最近活动 / 文档
→ 需要更深时按需补:dealcenter.deal.get_full / dealcenter.activity.list_recent /
dealcenter.contact.search / dealcenter.doc.list_full(工具契约见 references/mcp-tools.md)
→ 带着档案背景执行原任务
读档纪律:
没有用户点头,一个写入工具都不调。 业务 skill 执行完产出值得入档的事实时,先评估信息质量:
只有用户明确说"记一下""录到档案""更新商机"等,或对建议项明确点头后,才进入写入执行。
按 客户(account)→ 联系人/商机 → 活动 → 文档 顺序,每步先 search 再建:
| 步 | 查 | 建 | 必挂约束(缺则不建该项) |
|---|---|---|---|
| 1 客户 | account.search(名) | account.create | name |
| 2 联系人 | contact.search(核心词, account_id)(剥"总/经理"等称谓) | contact.upsert | account_id + contact_methods ≥1(缺真实联系方式则该项挂起,不造假值) |
| 3 商机 | deal.search(主体词),只看当前客户下的结果 | deal.upsert | account_id + name |
| 4 活动 | 不查(append-only),同次运行内 (deal_id, happened_at, summary) 三元组自去重 | activity.batch_create(单批 ≤100) | deal_id(无商机则不建活动) |
| 文档 | doc.list_full(account_id) 按 file_uri 判重 | doc.create | account_id +(content 或 file_uri 二选一,见 mcp-tools.md) |
写入侧查重原则(不可妥协):每步 search 是写入的前置必做而非可省。如果 search 工具暂时不可用(故障面里的 404/-32603),该实体直接挂起 pending,绝不绕过查重直接建。account.create 是按名幂等的(同名返现有、不更新字段)所以客户步可建;contact/deal/doc 的 upsert 都不是名字幂等——查重缺位 = 必重。
每次写入 sources[] 必填非空,格式逐字按契约:
[{ "kind": "chat_turn", "title": "用户原话前 80 字", "quote": "用户确认的那句原话", "occurred_at": "2026-09-04T14:30:00+08:00" }]
| 响应 | 动作 |
|---|---|
| DUPLICATE_ACTIVITY_HINT / DUPLICATE_FILE_URI | 记 reused,简短汇报"已存在",不追问用户 |
| 409 AMBIGUOUS(多候选) | 先自行判断,判不出才问用户(写错污染库,标准比读侧严) |
| 400 MISSING_REQUIRED_FIELD | 缺真实值则该项挂起,绝不造假值占位 |
| 422 RENAME_NOT_ALLOWED | name 创建后只读,不改名绕过 |
| 404 REFERENCE_NOT_FOUND | 检查前置步骤是否被跳过,不硬建 |
一行一项列 created / reused / pending / skipped(pending 注明缺什么、等人定),不展开细节、不追问。
| 念头 | 正确做法 |
|---|---|
| "没查到档案,得告诉用户/问要不要继续" | 静默继续。查档是辅助,用户要的是任务本身 |
| "顺手建议用户建档,是增值服务" | 不推销。用户没问就不提 |
| "调研里发现了新联系人,借机提一句" | 信息质量门槛:脱敏/残缺/推断的不提;只有明确且可用才用 1-2 句话问是否录入 |
| "低质量信息虽不入档,但可以提一下'以后补齐再录'或问要不要挂补查清单" | 低质量就当不存在,回复里不重新引入话题、不附条件、不留钩子 |
| "档案里大概是聊过 XX,写进邮件" | 只引用工具实际返回的字段,没有就不提 |
| "sources 等服务端报错再补" | 第一次就带,格式按契约 |
| "字段名写 date/contact_ids 差不多就行" | 逐字按 references/mcp-tools.md 的字段契约 |
| "DUPLICATE 提示了,跟用户确认下" | 记 reused 汇报一句即可 |
| "多个候选,选最像的直接建" | 写入侧判不出必须问人;读入侧可自判但要有依据 |
| "工具报错了,告诉用户通道挂了/止步于此" | 先分清:未安装/未授权(工具缺失或 401)→ 引路到连接器页添加/连接「OmniMay MCP」;运行失败(超时/500/查不到)→ 静默降级 |
| "引路一次没反应,再催一下" | 只说一次,立刻回原任务;用户装好后叫你重查即可 |
| "通道没接,答'没有档案'也算如实" | 不是如实,是错误回答——数据可能存在只是通道没通。配置卡点必须引路,不假称查无档案 |
工具名、参数、字段类型、错误码、当前故障面(哪些工具暂不可用及降级方式)全部在 references/mcp-tools.md——调工具前必读,通道口径变更只改该文件。