# Fenbeitong Workbuddy

> 分贝通 WorkBuddy Connector。用于账号与企业、差旅、申请单、订单、消费规则、发票报销、消费洞察、合规、降本及客服。

- Skill: `ahang1598/fenbeitong-workbuddy` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add ahang1598/fenbeitong-workbuddy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ahang1598/fenbeitong-workbuddy/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ahang1598 (https://skillmd.com/u/ahang1598)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/ahang1598/fenbeitong-workbuddy

---


# 分贝通 WorkBuddy Connector

这份 Skill 指导 WorkBuddy 使用分贝通 MCP Connector。默认通过已启用的 Connector 调用工具，不要求用户提供或粘贴任何 Token。

## 适用场景

当用户需要处理以下分贝通业务时使用本 Skill：

- 查看当前账号、所在企业或切换企业；
- 查询酒店、机票、火车票，或创建和调整综合行程；
- 查询消费规则、申请单和商旅订单；
- 归集发票、生成费用草稿、创建或查询报销单；
- 查询消费金额、订单量、趋势、排行、结构或生成消费洞察；
- 筛查订单合规、违规、超标、异常、套现或重复风险；
- 分析可节省订单、金额、降本点、规则命中或优化空间；
- 查询产品规则、操作方法，或处理需要实际动作的问题。

只做普通旅行攻略、与分贝通无关的知识问答或不需要企业账号数据的请求时，不使用本 Skill。

## 使用边界

- 所有分贝通业务数据访问和业务操作都通过 MCP 工具完成；不要用本地脚本直接访问分贝通服务。
- 工具名称、参数、返回值和当前可用范围以 Connector 实时提供的工具描述为准，不凭记忆补充参数。
- 本 Skill 负责工具间的选择和多步流程，不替代 MCP Server 的鉴权、权限检查和副作用控制。
- 当前 WorkBuddy Connector 已验证模型可以读取工具结果的 `content`，但不能稳定读取 `structuredContent`。需要继续驱动流程的数据必须出现在模型可见文本中。
- `present_files` 是 WorkBuddy 平台内置的文件展示工具，不属于分贝通 MCP Server；需要展示本地 HTML 产物时按平台提供的接口调用。
- 只有工具真实返回成功时，才能声称已经查询、创建、修改、删除、提交或完成处置。

## 当前工具面

| 业务域 | MCP 工具 |
| --- | --- |
| 账号与企业 | `fbt_account` |
| 差旅 | `fbt_hotel_search`、`fbt_travel_search`、`fbt_trip_planner`、`fbt_apply_order`、`fbt_consumption_rules`、`fbt_order_search` |
| 发票与报销 | `fbt_invoice_management`、`fbt_expense_management`、`fbt_reimb_management` |
| 管控分析 | `fbt_consumption_insight`、`fbt_compliance_analysis`、`fbt_cost_reduction_analysis` |
| 客服 | `fbt_service_ask`、`fbt_self_solve` |

工具可能按账号状态、权限和渠道策略动态显示。上表只用于路由，不代表用户必然有权调用全部工具。

## 推荐调用顺序

1. 用户询问当前账号、企业或要求切换企业时，先调用 `fbt_account`。其他业务只有在当前企业不明确且会影响结果时才先确认企业。
2. 根据用户目标选择唯一匹配的业务工具；不要为了探索能力并行调用多个相近工具。
3. 调用前读取该工具当前的参数定义。缺少工具明确要求的关键信息时再向用户追问，不让用户填写一份与当前工具无关的完整表单。
4. 多步流程始终沿用前一步工具返回的真实业务 ID、状态和下一步参数，不猜测 ID，不重新创建同一业务对象。
5. 创建、修改、删除、提交或实际处置等有副作用的操作，遵守工具返回的确认门；查询类操作不额外制造确认步骤。

### 完整行程快速路径

用户要求新建、修改或取消包含去程、返程、会议、住宿或接驳组合的完整行程时，目标工具已经唯一确定为 `fbt_trip_planner`：

1. 工具已加载时直接调用，不先调用 `fbt_account`，不搜索或加载酒店、机票、火车票等其他差旅工具。
2. 工具尚未加载或处于 deferred 状态时，只查找并加载 `fbt_trip_planner` 这一个工具，随后立即调用；不得为了确认能力而搜索其他工具。
3. 只补问 `fbt_trip_planner` 当前调用确实缺少的关键信息，已能组成完整请求时不再增加确认轮次。
4. `fbt_trip_planner` 返回后直接进入下文规定的行程预览流程，不再调用账号或单点查询工具复核结果。

## 路由规则

- 单独查询酒店使用 `fbt_hotel_search`；单独查询机票或火车票使用 `fbt_travel_search`；完整行程的新建、修改或取消使用 `fbt_trip_planner`。
- `fbt_trip_planner` 规划成功后，最终回复必须逐项保留每个机票、火车票和酒店后的 `预订链接: <booking_url>`，不得省略、改写或把多个链接合并。展示 HTML 页面按下文“行程规划预览”流程执行；正文不输出 HTML Markdown 链接，只通过产物和 `present_files` 展示页面。同一行程的多轮修改必须沿用工具返回的同一 `conversation_id`，产物覆盖同一文件。
- 查询当前员工适用的差旅标准和消费政策使用 `fbt_consumption_rules`；查询本人商旅订单使用 `fbt_order_search`。
- 查询消费金额、订单量、趋势、排行、结构、报告或数据驱动建议使用 `fbt_consumption_insight`。它不回答消费规则，不筛查合规风险，也不测算降本空间。
- 查询违规、超标、异常、套现、重复等订单风险使用 `fbt_compliance_analysis`。它不回答一般消费情况，也不把降本机会当作违规问题。
- 查询可节省订单、金额、降本点、规则命中或优化空间使用 `fbt_cost_reduction_analysis`。它不回答一般消费情况，也不把合规风险解释成降本机会。
- 三个管控分析 Tool 的 `query` 必须传用户当轮完整原话，不提前拆解或改写分析条件；为兼容豆包，合规和降本不暴露额外可选参数，跨 Tool 背景直接并入本轮原话。
- 发票归集或票夹查询使用 `fbt_invoice_management`；把发票生成费用草稿使用 `fbt_expense_management`；创建或查询报销单使用 `fbt_reimb_management`。
- 产品规则和操作方法等知识问题使用 `fbt_service_ask`；需要重新推送、修正、诊断、建单或跟进等实际动作时使用 `fbt_self_solve`。
- `fbt_apply_order` 创建、修改或预览待提交草稿时，按下文“申请单草稿预览”流程呈现草稿编辑页；查询列表和正式提交成功时不呈现。

### 行程最终回复格式

`fbt_trip_planner` 规划成功并完成预览呈现后，最终回复使用紧凑格式。目标是在不丢失真实行程段和预订链接的前提下减少模型生成时间：

1. 开头只用一句话说明行程已规划、预览已打开，不重复复述用户需求或输出行程总览。
2. 工具返回的每个行程段只出现一次，每段一行，字段用 `｜` 分隔；只保留日期、类型或名称、起终点、起止时间、价格和必要状态。接驳、会议等没有预订链接的节点不得展开背景说明。
3. 每个 flight、train、hotel 节点的下一行必须原样输出 `预订链接: <booking_url>`；链接本身不计入精简范围，仍不得省略、缩略、合并或改写。
4. 除工具明确返回的超标、无票、缺失行程段等重要提示外，不输出“温馨提示”“两点提醒”、备选方案、通用预订指导或重复总结。
5. 不使用表格，不堆叠多级标题；非链接正文控制在 1800 个中文字符以内。短链接正常时，总回复目标不超过 3000 个字符；降级成长链接时允许超出总长度目标。

推荐形态：

```text
行程已规划，预览页已打开。

- 9/7 去程高铁｜G3 北京南 06:52 → 上海 11:33｜二等座 ¥667
  预订链接: <booking_url>
- 接驳｜上海站 12:03 → 上海中心大厦 12:25｜约22分钟 ¥27
- 会议｜上海中心大厦 14:00–16:00
- 酒店｜<酒店名>｜9/7入住、9/8离店｜¥<价格>
  预订链接: <booking_url>
- 9/8 返程高铁｜G4 上海 07:00 → 北京南 11:37｜二等座 ¥667
  预订链接: <booking_url>
```

## 本地脚本

普通工具调用不得搜索、创建或执行替代脚本。只在下列明确流程中使用随 Skill 提供的脚本；脚本只做本地数据加工和文件交付，不访问分贝通业务接口。

**脚本位于当前工作区之外**，各流程给出的命令已自带定位逻辑，整段原样复制执行即可，无需事先确认脚本是否存在。命令的动作清单是封闭的：清单内按序执行，清单外一律不做。脚本确实不存在时命令会报错，此时如实说明不可用并按该流程的降级方式处理，不要自行编写替代脚本或手工拼装 HTML。

### 申请单草稿预览

`fbt_apply_order` 需要呈现草稿时，其模型可见 `content` 末尾会给出一行「草稿编辑页（需要呈现给用户查看…）：<链接>」。**在 WorkBuddy 渠道，「呈现」一律指调用 `present_files` 在侧边栏打开，不是把链接贴在正文里让用户自己点。**

**本流程的完整动作清单（共 1 步）：**

1. `present_files` 打开该链接

链接由工具侧经短链服务处理后下发，直接原样传给 `present_files` 即可（该工具支持 URL，会走 `previewed` 通道打开）。**同时要在最终回复正文中原样给出这个链接**，方便用户自行点击；不得改写、缩略或替换成 Markdown 描述文字之外的形式。

只把链接写进正文、不调用 `present_files`，属于流程未完成。链接为空或 `present_files` 失败时，如实说明草稿预览打不开，并用 `content` 里的草稿摘要向用户转述明细。

> 中转渲染方案（`scripts/render_apply_draft.py` 把草稿渲染成本地 HTML 预览页）**已暂停使用**，脚本与工具侧代码均保留以便回退。停用原因：长 Base64 载荷由模型逐字转录频繁损坏，且模型常绕过脚本自行解码取链接，反而更慢。

### 行程规划预览

**标准成功路径共 2 步，不得插入任何其他工具调用：**

1. `Bash` 执行下方渲染命令
2. `present_files` 打开产物 —— 参数只能是上一步 stdout 返回的**本地文件路径**，禁止传入任何 URL

`present_files` 返回后立即组织最终回复。此流程禁止检查、创建或更新工作日志，禁止为日志调用 `execute_command`、`write_to_file` 或其他文件工具；除非用户在当前请求中明确要求记录工作日志。

下列动作在本流程中一律禁止，出现即属流程执行错误：

- 另行用 Glob / Read / Grep 查找脚本、阅读源码或确认参数（命令已含定位，参数以命令为准）；
- 用 `--help` 试探命令行接口；
- 用 echo / ls 检查 `CODEBUDDY_SESSION_ID`、会话记录目录等运行环境；
- 用 Grep / Read 检查生成出来的 HTML 内容。

脚本能否取到载荷由脚本自己判断，取不到会明确报错——**不需要你预先验证任何机制**。报错时直接按降级步骤处理，不要排查原因。

`fbt_trip_planner` 规划成功时，其模型可见 `content` 会要求「生成并呈现行程预览页面」。**在 WorkBuddy 渠道，「呈现」一律指按下面两步跑出本地 HTML 再用 `present_files` 在侧边栏打开，只在正文转述行程、不生成预览页属于流程未完成。** 其 `content` 末尾包含一组完整标记：

```text
[TRIP_PLAN_PAYLOAD_V1]
<URL-safe Base64>
[/TRIP_PLAN_PAYLOAD_V1]
```

1. **直接执行下面这条命令**，把 `<conversation_id>` 换成工具返回结果中的该字段值，其余原样：

   ```bash
   SCRIPT_PATH="$HOME/.workbuddy/connectors-marketplace/connectors/fenbeitong/skills/scripts/render_trip_plan.py"
   [ -f "$SCRIPT_PATH" ] || SCRIPT_PATH=$(find "$HOME/.workbuddy" -type f -name render_trip_plan.py 2>/dev/null | head -1)
   [ -f "$SCRIPT_PATH" ] || { echo "未找到 render_trip_plan.py，无法生成行程预览" >&2; exit 1; }
   python3 "$SCRIPT_PATH" --conversation-id "<conversation_id>" --output-dir outputs
   ```

   脚本会自行从当前 WorkBuddy 会话记录中取回完整载荷，因此**无需提取、也不要复制 Base64 载荷**——长 Base64 逐字转录极易损坏。排查时可加 `--diagnose`，会把查找过程打到 stderr。
   **仅当**上一步报「未能从会话记录中找到」时才降级为传载荷：提取两个标记之间的 Base64 字符串原样传入，不改写、不向用户展示该载荷，也不将其拼接成未转义的 shell 命令：

   ```bash
   python3 "$SCRIPT_PATH" --payload-base64 "<Base64>" --output-dir outputs   # 同一次 shell 会话中 SCRIPT_PATH 已设好
   ```

   读取成功脚本 stdout 中的 JSON，取 `trip_html_path`，立即调用 `present_files([trip_html_path])` 在侧边栏打开。

   同一行程修改后重复执行；脚本按 `conversation_id` 覆盖 `outputs/trip-plan-<conversation_id>.html`，不堆积历史文件。

   脚本失败时不重试规划或修改行程，也不影响已成功的业务结果；降级为用 `content` 中的行程参考信息逐项转述，并保留每个预订链接。

未列出的工具需要本地加工时，由该工具开发者把脚本随 Skill 一起提交，并写明唯一脚本路径、输入输出、失败处理和展示步骤。

## 结果与错误处理

- 优先使用工具返回的模型可见文本回答，不从不可见字段猜测结果。
- 工具要求补充信息时，只追问当前步骤缺失的信息，并在下一次调用中保留已经确认的参数。
- 登录态失效或鉴权失败时，提示用户在 WorkBuddy 中重新连接分贝通 Connector；不要要求用户在对话中发送 Token。
- 权限不足时说明当前账号或企业没有对应权限，不改用其他工具绕过。
- 超时或临时服务异常最多按工具提示重试；没有明确重试建议时，如实说明失败，不重复创建有副作用的业务对象。
- 若后续工具专属流程生成了完成文件，按 WorkBuddy 的结果展示规则将文件放入当前工作区 `outputs/`，再调用 `present_files`。没有生成文件时只返回文本结果。

## 安全边界

- 不单独展示 access token、user token、临时凭证、签名或会话标识。申请单草稿编辑链接由工具侧转为短链后下发，可以在正文中原样展示；若工具下发的是带 `token=` 参数的长链（短链服务不可用时的降级形态），则只调用 `present_files` 打开，不要在正文中展示该链接。
- 不把健康检查、工具列表或探针结果当成真实业务已经完成的证据。
- 不根据工具名称猜测未公开能力，不把查询成功描述成创建、提交或审批成功。

