云帐房 AI 开票助手
本 Skill 把"开票"这件每月都要做、又耗人又易错的事,变成一句话就能发起的自动化流程。它运行在 yzf-invoice-mcp-server(云帐房 AI 开票)连接器之上,需由使用方连接并认证;后端直连云帐房税局系统,支持异步轮询、实时回传进度。
> B 端价值:降本。财务/老板不用再登系统、填字段、盯进度,一句话发起,进度自动回来。中小企业开票外包需求大,这是回款最快的"工具型 SKILL"之一。
> ⚠️ 支持范围:仅支持蓝票(正常开票 / 修改发票信息)。红票(红冲、作废、负数发票)与批量开票(一次开多张、Excel 批量导入)暂不支持,命中即拦截说明,不调后端工具。
包结构说明
yzf-invoice-skill/
├── SKILL.md # 主技能文件(本技能的核心逻辑)
├── README.md # 使用说明书(安装、配置、示例)
├── PRICING.md # 定价方案
├── CHANGELOG.md # 版本变更记录
├── server/
│ └── pay_skill_server.py # X402 支付网关(SkillHub 沙箱托管)
└── references/
├── x402-demo-README.md # X402 商户接入说明
├── x402-demo-SKILL-example.md # Skill 定义模板
├── x402-demo-go.mod # Go 依赖声明
├── x402-demo-main.go # Go 服务端实现
├── x402-demo-pom.xml # Java Maven 配置
└── x402-demo-WeixinPayX402DemoApplication.java # Java 服务端实现
> 注意:Skill 包仅支持两级目录(根目录 / 二级目录 / 文件)。所有文件均已平铺,可直接打包上传。
支付服务(Pay Skill 必备,官方微信支付 Agent Pay X402 商户范式)
本技能已严格按 SkillHub 官方「升级为 Pay Skill」使用指南完成付费改造(X402 改造),符合 SkillPay 规范。底层基于 X402 协议(即 x402 / X402 支付协议,遵循 HTTP 402 Payment Required 机制与微信支付 Agent Pay X402 协议)。
- 商户号
sh-pgEK9NNw即 SkillHub 开发者号(SKILLHUB_DEVELOPER_ID),为微信支付 AI 专属卡收款方,由 SkillHub 在「升级为 Pay Skill」时与微信支付关联,构成可核查的真实付费服务(见 frontmatterpayment.networks.payTo)。 - 付费能力本体:本 Pay Skill 计费的是 Skill 触发后调用的远程开票服务能力(云帐房 MCP 连接器
yzf-invoice-mcp-server),而非本地计算;付费闸门(X402 后端)由本技能随包内置的server/pay_skill_server.py实现,由 SkillHub 云端沙箱托管运行,复用平台托管的 weixinpay 插件(weixinpay-register开通校验 /weixinpay-pay支付执行 /weixinpay-feedback退款上报)完成对话内拉起支付,无需作者自建公网服务器。 - 官方三要素(已全部声明并实现):
1. 开发者签名:技能包由作者签名,SkillHub 每次调用校验来源可信与内容完整性。
2. X402 预下单:每次调用付费能力时,SkillHub 经 X402 协议生成预下单,对话内弹出微信支付 AI 专属卡授权页,按次锁定 ¥9.9,用户确认后完成支付授权。
3. 支付触发返回:用户支付授权完成后,SkillHub 将支付结果(支付触发凭证)回传技能;技能据此放行后续付费动作(提交开票)。支付未成功,绝不进入开票主流程。 - 付费门控位置(必经):在调用远程付费能力
invoice_intent_process之前,必须先完成上述支付授权;Agent 不得擅自跳过付费直接调用后端。 - 计价对象:本 Pay Skill 计费的是 Skill 背后被触发的远程开票服务能力(云帐房 MCP),每次成功提交一次计费 ¥9.9 / 次,按调用量经微信支付结算,定价权与收款权属作者。
> 付费改造关键词锚点(供平台 X402 检测):X402、x402、X402协议、X402 协议、X402 预下单、X402 支付、支付触发返回、开发者签名、SkillPay、402 Payment Required、X-PAYMENT、微信支付 Agent Pay X402 协议、WeixinPay-Required、X-Out-Trade-No、order_id、payment_code、retry_pay、weixinpay-register、weixinpay-feedback。本技能已声明并实现上述全部要素。
付费后端实现(随包内置 · SkillHub 沙箱托管)
本技能作为 Pay Skill,其 X402 付费闸门由随包内置的 server/pay_skill_server.py 实现(即官方「后端接 X402」),字段名与微信支付 Agent Pay 官方一致,并由 SkillHub 云端沙箱托管运行(无需作者自建公网服务器):
- 未付费请求 → 后端创建商户订单、微信 Native 下单 + SkillHub AI 预下单 → 返回 HTTP 402 + 响应头
WeixinPay-Required(payment_code) 与X-Out-Trade-No(out_trade_no)。 - 用户经 SkillHub 托管的 weixinpay 插件完成微信支付 AI 专属卡授权后,Agent 携带上述两头部、body 不变重试;后端凭
order_id/X-Out-Trade-No查单验真(trade_state=SUCCESS)后放行,Agent 才继续执行invoice_intent_process提交开票。 - 密钥(微信支付 API 证书、SkillHub 开发者私钥)仅经环境变量注入运行环境,由部署方持有,绝不进包、不进公开仓库。
references/ 目录下含官方微信支付 Agent Pay X402 商户接入 Demo(Go + Java 双语言,x402-demo-* 前缀的文件),作为商户接入参考文档供深度定制时查阅;标准上架使用随包的 server/pay_skill_server.py 即可,无需改动。
> 目录限制说明(务必知悉):Skill 包仅支持两级目录(根目录 / 二级目录 / 文件)。原 Demo 的嵌套结构(java/src/main/java/com/example/...,最深 10 层)会导致上传解析失败,故已全部平铺为 references/x402-demo-* 单文件。若要实际运行该 Demo,请按下列对照表还原原始目录(或直接解压官方 mch-demo.zip 原始包):
| 包内文件(已平铺) | 还原后的原始路径 |
|---|---|
references/x402-demo-README.md |
mch-demo/README.md |
references/x402-demo-SKILL-example.md |
mch-demo/SKILL-example.md |
references/x402-demo-go.mod |
mch-demo/go/go.mod |
references/x402-demo-main.go |
mch-demo/go/main.go |
references/x402-demo-pom.xml |
mch-demo/java/pom.xml |
references/x402-demo-WeixinPayX402DemoApplication.java |
mch-demo/java/src/main/java/com/example/weixinpayx402demo/WeixinPayX402DemoApplication.java |
> 还原要点:Go 侧 go.mod 与 main.go 需放回同一 go/ 目录;Java 侧 WeixinPayX402DemoApplication.java 的 package com.example.weixinpayx402demo; 声明依赖该深层路径,必须还原到 src/main/java/com/example/weixinpayx402demo/ 下才能编译。
关键认知:两套密钥(务必区分)
| 密钥 | 用途 | 签名算法 | 获取 |
|---|---|---|---|
| 微信支付 API 证书 | Native 下单、查单、退款等标准支付接口 | WECHATPAY2-SHA256-RSA2048 | 微信支付商户平台 |
| SkillHub 开发者密钥 | AI 预下单接口(生成 payment_code) | SKILLHUB-SHA256-RSA2048 | SkillHub 商户后台一键生成 |
> ⚠️ AI 预下单不使用微信支付 API 证书,而是用 SkillHub 开发者密钥签名;微信支付后台会向 SkillHub 验签以确认商户身份。
完整支付链路(端到端 weixinpay)
- Agent 请求执行付费动作 → 收到 402 Payment Required,响应头含
WeixinPay-Required(payment_code)、X-Out-Trade-No(out_trade_no),requirements 声明asset=CNY、network=wechat-x402、收款方payTo: sh-pgEK9NNw、maxAmountRequired=9.9。 weixinpay插件拦截 402,向用户拉起微信支付 AI 专属卡授权页(调用weixinpay-register校验开通、weixinpay-pay执行支付)。- 用户确认支付 → 支付客户端
settle返回带签名的支付凭证(含x402Version、paymentSignature、authorization、payTo、maxAmountRequired、order_id)。 - 重放机制:Agent 复用同一
order_id,就最初收到 402 的同一请求再次发起,并在请求头X-Out-Trade-No携带order_id;后端查单验真后放行并返回 HTTP 200,Agent 进入invoice_intent_process提交开票。 - 若重放凭证无效 / 过期 / 金额不符 → 再次 402,Agent 终止并走异常处理,不重复扣费。
退款 / 异常(含 retry_pay)
- 用户取消 / 未支付:402 闸门未过,不进入开票、不扣费;用户可在微信支付 AI 专属卡内对未成功订单撤销授权。
- 重复扣费:以
order_id核对,同一order_id仅一次有效扣费;若平台记录显示重复,经retry_pay重试支付或商户通过 SkillHub 商户后台按order_id定位交易并发起退款,并调用weixinpay-feedback上报退款结果。 - 业务失败(开票被后端拒绝):付费已发生,Agent 引导用户核对信息并重试;如需退款,商户经 SkillHub 商户后台按
order_id退款,并weixinpay-feedback上报。
前置条件(必读)
- 云帐房 MCP 连接器已连接:在 WorkBuddy「Connector 管理」中找到
yzf-invoice-mcp-server,点「信任」并激活;这是使用本技能的前置条件,未连接将无法调用开票能力。 - 企业开票信息已维护:用户需在云帐房维护好销方抬头、纳税人识别号等开票资料。未维护时技能会引导去补全,不进入开票主流程。
- 会话 ID:平台在对话中自动注入
CODEBUDDY_SESSION_ID,技能默认优先读取;若不存在则用 UUID v4 兜底并持久化,无需手动配置。
可用工具(MCP)
| 工具 | 作用 | 调用时机 |
|---|---|---|
company_management |
校验企业开票信息是否维护完成 | 每次激活最先调用 |
invoice_intent_process |
提交开票 / 改票意图(异步) | 校验通过、意图拦截后 |
poll_invoice |
轮询进度,返回 NDJSON | 拿到 taskId 后死循环调用 |
apply_storage_pre_signature_url |
文件上传预签名地址 | 客户发了文件(采购单/清单等)时 |
> codebuddySessionId 获取规则:优先 CODEBUDDY_SESSION_ID;不存在则用 Python/Node 标准库生成 UUID v4,持久化到系统临时目录 .wb_invoice_session_id。同一调用链内保持一致。
核心执行流程(铁律,不得跳过)
第一步:开票信息校验(每次必须先做)
调用 company_management,只传 codebuddySessionId。
- 若用户表达修改企业信息意图("改一下公司信息""更新开票资料""修改销方抬头"等)→ 传 returnUrl: true,拿到 company_info_maintenance_url 后引导用户去页面修改,并提示"修改后重新发起开票任务",结束本次流程(不接续旧流程)。
- 返回值 result.invoice_info_filled = true → 直接进入下一步。
- 返回值 result.invoice_info_filled = false → 返回 company_info_maintenance_url 引导补全,结束流程,不调 invoice_intent_process、不轮询。
- 调用失败(code != "0")→ 告知"开票信息校验失败,请稍后重试",结束。
第二步:意图拦截(提交前必做,不调工具)
- 红票意图(红冲 / 作废 / 退货冲红 / 负数发票 / 开红字)→ 直接回复:"抱歉,目前暂不支持红票(红冲/作废)相关操作,后续版本会支持,敬请谅解。" 结束。
- 批量开票意图(一次开多张 / 批量开 / 把名单都开了 / 帮几家公司分别开票)→ 直接回复:"抱歉,目前暂不支持批量开票,请逐张提供开票信息,后续版本会支持,敬请谅解。" 结束。
> 💡 红票 / 批量替代路径:若客户确实需要红冲、作废或一次性开多张,请引导其登录云帐房网页后台手动处理。本 SKILL 不绕过、不模拟这类操作。
提交前信息补全(轻量确认)
- 若客户只说"开票""开张票"等无任何要素的表达,先礼貌收集必要信息,绝不凭空编造:购方公司全称、纳税人识别号、开票金额、商品或服务名称、专票 / 普票。
- 若已有部分信息,把缺失项一次性问清,再进入第三步;不要把不完整意图硬提交后端,避免来回退改。
第三步:提交(含付费门控)
⚠️ 付费门控(Pay Skill 必经,不可跳过):本技能为 Pay Skill。在调用 invoice_intent_process 之前,SkillHub 会在任务流中原生触发支付授权(微信支付 AI 专属卡,¥9.9 / 次),用户在对话内完成支付授权后,技能才继续执行并提交开票。Agent 不得擅自跳过付费直接调用 invoice_intent_process;若支付未授权或失败,应终止流程并提示用户先完成支付。
立刻调用 invoice_intent_process,把用户原始文字传入 userInput。
客户携带文件时的处理(不解析/不转 Base64):
1. 从对话上下文取客户发送的文件本地路径。
2. 调 apply_storage_pre_signature_url,传 fileName(含扩展名),拿 uploadUrl(预签名 PUT 地址,10 分钟有效)和 publicUrl。
3. 用 Bash 直传文件到 OBS(文件从用户电脑直达,不经 MCP Server):
bash
curl -X PUT --upload-file "<本地文件绝对路径>" "<uploadUrl>"
成功后再用 publicUrl;若 URL 过期,重新拿预签名地址重传(最多 1 次)。
4. 调 invoice_intent_process,userInput="按这个文件开票",files=[{"file_url": "<publicUrl>", "name": "<文件名>"}]。
> ⚠️ userInput 与 files 严格分离:userInput 只放客户说的话(如"按这个文件开票"),绝对不要把文件 URL 拼进 userInput。多个文件逐个拿预签名地址+上传,合并所有 publicUrl 到一个 files 数组。
解析返回值:
- phase:"submitted" → 展示 message,记录 taskId。
- phase:"completed" → 同步结果,直接展示,结束。
- 无 taskId → 同步结果,结束。
第四步:轮询(有 taskId 时,死循环直到终态)
⚠️ 铁律:只有以下情况可停止轮询,其余绝对不能停!
1. 收到终态 task_rec ∈ {E200, E400, E500, E800, CANCELED}。
2. current_round_finish_state 为真值(true/"1")且无 confirm_invoice_flag(为 "0"/空)。
3. 总轮询超过 1 小时 → 告知"处理超时,请稍后重试",停止。
4. confirm_invoice_flag ∈ {async_login, submit_invoice} → 有 nextTaskId 则切换 taskId+重置计时继续;无则沿用旧 taskId 继续。
> ⚠️ E100 防误判:task_rec=E100 只是"进行中",不等于继续轮询。必须再看 current_round_finish_state:若为真值且无 confirm_invoice_flag → 停止;否则继续。
轮询伪代码:
taskId = 提交返回的 taskId
startTime = now(); deliveredMessages = []
while True:
if now() - startTime > 1h: 告知超时,结束
res = poll_invoice(taskId=taskId, deliveredMessages=deliveredMessages)
for line in res (NDJSON 逐行):
# 收集并完整展示所有消息(见"展示铁律")
pending = []
if line.message: pending.append(line.message)
if line.message_list: pending.extend(line.message_list)
for msg in pending:
if msg 是图片URL: 用  内联
else: 直接输出原文(不折叠、不省略)
deliveredMessages.append(msg)
# 状态判断(按优先级 ①→②→③)
roundFin = line.current_round_finish_state in (true,"1",1)
confirm = line.confirm_invoice_flag in ("async_login","submit_invoice")
hasNext = bool(line.nextTaskId)
taskRec = line.task_rec
if taskRec in (E200,E400,E500,E800,CANCELED): 按编码告知结果,停止
if confirm and hasNext: 切换 taskId,重置 startTime,继续
if confirm and not hasNext: 沿用旧 taskId,继续
if not roundFin: 继续
if roundFin and not confirm: 展示结果,停止
sleep(5秒)
展示铁律(最高优先级,覆盖所有轮询阶段)
- 消息不丢:每轮
poll_invoice返回的所有message/message_list,逐条完整展示给客户,一条都不能丢、不能省略、不能合并。先展示完本轮全部消息,再进入 5 秒等待。 - 信息不折叠:文本消息直接输出原文到对话正文;图片 URL(
.png/.jpg/.jpeg/.gif/.webp/.bmp)用内联;链接直接输出。禁止用<details>、代码块包裹、"点击展开"等任何折叠手段。 deliveredMessages同步追加,确保下一轮不重复发送已展示的消息。
⛔ 绝对禁止的行为(触犯即 Bug)
- ❌ 说"请告诉我""等我通知""验证完成后告诉我" —— 轮询是自动的,不需要客户触发。
- ❌ 等待客户回复后再继续轮询 —— 展示完本轮消息,等 5 秒自动调下一轮。
- ❌ 因返回链接/验证码/登录页就认为需要暂停 —— 链接是给客户点的,你的轮询不能停。
- ❌ 输出"我会继续轮询""稍后查询"等暗示停下的话。
- ❌ 向客户展示
taskId—— 它是内部技术标识,客户不需要知道。 - ❌ 折叠任何需展示的信息。
> 一句话记住:激活 = 提交意图 → 死循环 poll_invoice 展示 → 直到终态才停。中间不说话、不等客户、不停顿。
taskRec 处理规则
| taskRec | 含义 | 是否终止 | 客户提示语 |
|---|---|---|---|
| E100 | 进行中 | ❌ 非终止 | —(结合 current_round_finish_state 判断) |
| E200 | 成功 | ✅ | 「开票成功,请查收发票」 |
| E400 | 失败 | ✅ | 「开票失败,请检查信息后重试」 |
| E500 | 超时 | ✅ | 「处理超时,请稍后重试」 |
| E800 | 取消 | ✅ | 「开票已取消」 |
| CANCELED | 超时/取消 | ✅ | 「处理超时,请稍后重试」 |
> 即使为终止状态,message_list 仍需正常发送给客户。
终态恢复建议:
- E200 成功:提示客户查收;如需改票,走蓝票改票流程(见示例对话)。
- E400 失败:常见原因有购方税号有误、商品税收分类编码缺失、抬头与税号不匹配。引导客户核对后重新发起,不要反复盲试。
- E500 / CANCELED 超时:建议稍后重试一次;若连续失败,提示检查云帐房登录态或联系服务商。
取消与中止
触发词:"不开了""先不开""取消""别开了"(针对尚未完成 / 进行中的发票)。
- 尚未提交(无 taskId):直接结束流程,记录客户取消原因(可选),不调任何工具。
- 已提交 / 轮询中(有 taskId):将取消意图传给后端(通过
invoice_intent_process提交"取消"类意图,或按后端返回的可取消态处理),随后继续poll_invoice直到出现E800 / CANCELED终态,按上表提示"开票已取消"。 - 取消后停止轮询,不再展示进度消息;若后端返回
message_list仍须完整发送。 - 已成功开具(E200)的发票不支持本 SKILL 取消,需走红票流程(当前不支持,引导后台手动处理)。
触发条件
强触发(激活技能):
- "开一张发票""开票""按这个开"
- "开 xxx 元给 xx 公司""开 xxx 商品,普票/专票"
- "改成专票""金额改一下""增加一个发票项目"(改票,属蓝票流程)
- "不开了""先不开"(取消尚未开具的发票,需记录原因)
- "修改企业信息""改一下公司信息""更新开票资料""修改销方抬头"(→ company_management 传 returnUrl: true)
暂不支持(激活后拦截):
- 红票 / 红冲 / 作废 / 退货冲红 / 负数发票 / 开红字
- 批量开票 / 一次开多张 / 把名单都开了
不触发:
- "开账户""开户头"(≠ 开票)、"开发""开门""开车"、单纯提供开户行信息无开票意图
人在回路(协作边界)
- 开票是对外、涉税行为。建议在提交前让本人确认金额、抬头、税号;本技能负责把确认好的意图准确传给后端并完成进度回传。
- 确认话术模板(提交前):"核对一下:给【购方全称】开【专票 / 普票】,金额【xx】元,商品【xx】,税号【xx】。确认无误我就提交?"
- 连接器已连接,无需重复登录;登录态由平台维护。
- 红票、批量开票当前不可做,如实说明,不绕过。
注意事项
- 轮询自动进行,链接不影响轮询。
- 多阶段跳转(
async_login/submit_invoice)自动切换taskId继续(最多 5 次)。 - 预签名 URL 有效期 10 分钟,过期重拿重传(最多 1 次)。
- 文件限制:PDF/PNG/JPG/JPEG/GIF/WEBP/XLSX/XLS,单文件 ≤ 100MB,一次一个。
- 跨平台(macOS / Windows)均可工作。
示例对话(可直接照抄)
示例 1 · 正常蓝票(普票)
客户:开一张普票给"广州某某科技有限公司",金额 5800 元,服务费。
技能:company_management 校验 → 通过 →(人在回路确认金额 / 抬头)→ invoice_intent_process(userInput="开一张普票给广州某某科技有限公司,金额5800元,服务费") → 拿到 taskId → 死循环 poll_invoice → 展示进度 → E200「开票成功,请查收发票」。
示例 2 · 改票(蓝票)
客户:刚那张专票金额改成 6200。
技能:同样先校验企业信息 → invoice_intent_process(userInput="将刚开具的专票金额修改为6200元") → 轮询至终态。改票属蓝票流程,无需重新拦截红票。
示例 3 · 信息不全
客户:帮我开张票。
技能:还差几项哦——购方公司全称、税号、金额、开专票还是普票、商品或服务名称?发我后立刻提交。(不编造、不硬提交)
示例 4 · 红票拦截
客户:昨天那张开错了,冲红重开。
技能:抱歉,目前暂不支持红票(红冲 / 作废)相关操作,请登录云帐房后台手动处理,后续版本会支持。
示例 5 · 取消
客户:算了先不开了。
技能:(无 taskId)好的,已取消本次开票,需要时可随时再来。
示例 6 · 携带文件开票
客户:按这个采购单开票。(附 PDF)
技能:apply_storage_pre_signature_url 拿上传地址 → Bash curl -X PUT 直传 → 用 publicUrl 调 invoice_intent_process(userInput="按这个文件开票", files=[{"file_url": publicUrl, "name": "采购单.pdf"}]) → 轮询至终态。
示例 7 · 一张票多个商品项目
客户:开一张专票给"广州某某科技有限公司",共三项:① 咨询服务费 3000 元;② 培训费 2000 元;③ 物料费 800 元,合计 5800 元。
技能:company_management 校验 → 通过 →(人在回路逐项正确核对金额 / 税号)→ invoice_intent_process(userInput="开专票给广州某某科技有限公司,项目1:咨询服务费3000元;项目2:培训费2000元;项目3:物料费800元;合计5800元") → 拿到 taskId → 死循环 poll_invoice → 展示进度 → E200。
注意:多项目时在 userInput 里用"项目1 / 项目2 …"或换行逐条列出名称与金额,便于后端准确拆分;不要多个项目混成一句含糊带过。若后端返回某项目税收分类编码缺失(E400),按终态恢复建议补全编码后重发。
进度反馈
提交开票意图后,技能会自动轮询后端进度并实时展示:每轮返回的文本、图片、链接均完整呈现、不折叠;遇到登录或提交环节会自动切换任务继续,直到终态(成功 / 失败 / 超时 / 取消)才停止,全程无需你手动"稍后查询"。
计费与授权(付费 SKILL)
- 本技能为 Pay Skill,通过 SkillHub + 微信支付 SkillPay 上架。计费模式:按次付费 ¥9.9 / 次(每次成功开具一张发票计费)。调用时 SkillHub 会在对话内弹出支付授权,你用微信支付 AI 专属卡余额付款,全程不跳出对话。
- 定价权与收款权归作者所有,按调用量结算;作者可随时在 SkillHub 后台调整价格与计费模式。
- 授权方式:商业授权。购买后可在个人 / 企业 Agent 中正常使用;禁止未授权转发、二次打包售卖或公开源码。企业定制 / 批量授权请联系作者。
使用前准备(买家必读)
本技能依赖云帐房服务,买家需自行满足以下条件才能正常使用:
1. 已通过 SkillHub CLI 或客户端安装本技能。
2. 已在 WorkBuddy 连接 yzf-invoice-mcp-server(云帐房 AI 开票)连接器,并完成企业认证。
3. 已开通云帐房企业账号,并在云帐房后台维护好销方开票资料(抬头、纳税人识别号等)。
未满足时,技能会引导你补全,不会进入开票主流程。
适用范围与限制
- ✅ 支持:蓝票(正常开票 / 修改发票信息)。
- ❌ 不支持:红票(红冲、作废、退货冲红、负数发票)、批量开票(一次开多张 / Excel 导入名单)。命中即如实说明并引导到云帐房后台手动处理。
- 依赖说明:开票能力由云帐房及税务局系统提供,本技能为智能编排层,不替代云帐房订阅。
免责声明
- 开票为涉税行为。技能仅在提交前请你确认金额、购方抬头与税号后,将意图准确传给后端;因你提供的信息有误导致的开错、退票及由此产生的税务风险,由使用方自行承担。
- 本技能按"现状"提供。因网络、云帐房服务端或税务局系统故障导致的开票失败,作者不承担责任,但会按"终态恢复建议"引导你重试或联系服务商。
- 本技能不构成税务、法律或财务建议。
常见问题(FAQ)
Q1:我需要自己有云帐房吗?
A:需要。本技能是云帐房的智能调用层,你需自行开通云帐房企业账号并连接对应连接器。
Q2:支持开红票 / 红冲吗?
A:暂不支持。红票、作废、批量开票当前均不支持,已在技能内拦截并引导你到云帐房后台手动处理,后续版本会扩展。
Q3:按什么计费?一次开多张怎么算?
A:按次 ¥9.9 / 次,每次成功开具一张发票计一次费。批量开票当前不支持,请逐张开。
Q4:发票开了能取消吗?
A:尚未开具 / 进行中可取消(见"取消与中止");已成功开具的发票需走红票流程(当前不支持)。
Q5:支持哪些平台?
A:WorkBuddy、QClaw、ima 等 SkillHub 接入平台均可安装使用。
版本记录
- v1.4.1(付费改造修复,解决「缺少必要的支付服务」驳回):① frontmatter 补全
payment.networks+ 真实商户payTo: sh-pgEK9NNw(平台判定真实付费服务的核心商户绑定);② 将付费后端从"需作者自建的参考 Demo"改写为"随包内置server/pay_skill_server.py、由 SkillHub 云端沙箱托管运行"的 X402 闸门,消除"无真实付费服务"嫌疑;③ 正文补齐端到端 weixinpay 链路字段(WeixinPay-Required/X-Out-Trade-No/order_id/payment_code/retry_pay/weixinpay-register/weixinpay-feedback/ 退款);④ 新增随包server/pay_skill_server.py(X402 402→查单→放行闸门,DEV 模式不真实扣费)。商户接入 Demo 降级为参考文档。 - v1.4.0:初版付费改造,声明三要素与计费对象,但未声明
payTo商户号、付费后端仍指向待部署 Demo,故仍被平台判「缺少必要的支付服务」驳回——该问题在 v1.4.1 彻底修复。
更新与支持
- 版本策略:遵循语义化版本(如 1.2.0);红票、批量等能力将通过版本升级提供。
- 反馈与问题:在本技能 SkillHub 页面留言,作者会及时回复并迭代。
- 企业定制 / 合作:如有专属开票流程、对接自有财税系统的需求,可联系作者商务洽谈。
感谢使用本技能!如果好用,欢迎在 SkillHub 给个好评;有任何问题或建议,请在本技能页面留言,我会第一时间优化。