dby-banned-words
Checks your marketing words against rules from three Chinese platforms and rewrites unsafe parts so your message gets approved everywhere.
Installation
Paste this into Claude Code, Cursor, or any agent that can run commands.
What this skill does
What it does:
- Checks your text against banned words and sensitive words on three platforms at once
- Compares rules from Xiaohongshu, Douyin, and WeChat Official Accounts
- Shows you which words are risky on each platform
- Gives you one safe version of your text that works on all three platforms
When to use it:
- You wrote marketing or promotional text
- You want to post the same message on multiple Chinese platforms
- You need to check for words that might get your post blocked or limited
- You want one version that is safe everywhere instead of rewriting for each platform
SKILL.mdShow the author's original SKILL.md (not in English)
---
name: dby-banned-words
description: 多平台违禁词检测——一段文案,一次性比对小红书、抖音、公众号三大平台的审核口径,输出逐平台风险对照表与一版全平台都安全的改写。触发词:多平台违禁词、全平台违禁词、公众号违禁词、跨平台合规、合规检测、过审、违禁词检测、敏感词、违规词、极限词、绝对化用语、限流自查、审核不过、广告法。不做:改文风或换平台调性走 dby-rewrite;从零写正文走 dby-write。
version: 2.0.0
changelog: BREAKING:删除 scripts/check_multi.py,改用 `dby banned check <文案> --platforms …`(逐平台各计费一次,默认停在确认态、--confirm 放行);新增 scripts/dby.mjs 引导壳;compatibility 由 Python 改 Node ≥18
compatibility: >-
需要 Node ≥18(`dby banned check` 走 dby-api 的 CLI,零依赖不装 npm 包)。
需要环境变量 DOUBAOYA_API_KEY 与对 https://doubaoya.com 的 HTTPS 出网(检测按平台扇出,计费)。
---
# 多平台违禁词检测
一段文案,一次比对小红书 / 抖音 / 公众号违禁词口径,出对照表 + 全平台安全改写。
---
## 流程
1. **收文案**。
2. **逐平台检测**——对 `xiaohongshu`、`douyin`、`gongzhonghao` 各调用**一次**都爆鸭接口。
用户没指定平台时先问一句要哪几个,默认三平台各计费一次。
3. **风险对照**——把各平台结果并排成一张表:平台 / 判定 / 风险类别 / 命中词 / 建议。
4. **统一改写**——本鸭综合所有平台的**营销语境命中**,给出**一版改完即可全平台发布**的安全文案。
> **每个平台是一次独立计费调用**。用户只关心某几个平台时用 `--platforms` 缩小范围。
---
## 运行脚本
`$SKILL_DIR` = 本包目录(宿主加载本 SKILL.md 时给出的目录)。请求由 CLI 代发:
`node "$SKILL_DIR/scripts/dby.mjs" banned check <文案> [--platforms a,b]`;
只有绕开它自己拼请求时才读 `dby-gateway/references/protocol.md`。
```bash
# 默认三平台全查——不带 --confirm 先停在确认态,逐平台各列一次计费,不产生任何请求
node "$SKILL_DIR/scripts/dby.mjs" banned check "这款美白神器三天见效,全网最低价,无效退款"
# 核对无误后原样加 --confirm 才真打(逐平台各计费一次)
node "$SKILL_DIR/scripts/dby.mjs" banned check "这款美白神器三天见效,全网最低价,无效退款" --confirm
# 只查指定平台(逗号分隔,省额度)
node "$SKILL_DIR/scripts/dby.mjs" banned check "你的文案" --platforms xiaohongshu,douyin --confirm
```
- **默认停在确认态**:回执列出将要发生的逐平台计费,核对后原样加 `--confirm` 才放行;
`--confirm` 之前零请求、零扣费。
- 确认后对每个平台 `POST` 一次,把所有平台结果汇成一个 map 装进 `{ok,data|error}` 信封的 `data` 里。
`raw` 里与 `content` / `originalContent` 重复的两键默认剥掉,加 `--raw` 保留。
- **单个平台失败不影响其它平台**:失败的平台在 map 里记 `error`,其余照常返回。
---
## 接口契约
- 地址:`POST https://doubaoya.com/api/apis/tool/check-banned-words/call`
- 鉴权:请求头 `Authorization: Bearer $DOUBAOYA_API_KEY`
- 请求体(每个平台一次,参数严格如下):
```json
{ "platform": "xiaohongshu", "content": "<待检测文案>" }
```
`platform` 取值依次迭代:`"xiaohongshu"`、`"douyin"`、`"gongzhonghao"`。
- 返回信封:
```json
{
"success": true,
"requestId": "req_xxx",
"data": {
"source": "contentSafety.sensitiveWords",
"content": "这款美白神器三天见效,<span class=\"sensitive-word\">全网</span><span class=\"banned-word\">最低</span>价",
"originalContent": "这款美白神器三天见效,全网最低价",
"prohibitedWordsType": ["禁用词", "敏感词"],
"raw": {}
},
"error": null
}
```
**每次调用都先看 `success`**:为 `true` 时读 `data` 里这五个字段(就这五个);
为 `false` 时读 `error.code` / `error.message`。
| 字段 | 含义 |
| ---- | ---- |
| `originalContent` | 未标注的原文 |
| `content` | 标注版正文,命中处被 `<span>` 包裹——**唯一**能定位「哪几个词命中」的地方。类名带信息:`banned-word` = 禁用词,`sensitive-word` = 敏感词,`industry-banned-word` = 行业禁用词,与 `prohibitedWordsType` 里的类别一一对应 ⇒ **能逐词说出它是哪一类** |
| `prohibitedWordsType` | 命中的风险**类别**数组(类别名,不是命中词) |
| `source` / `raw` | 来源标识与上游原始返回 |
> 🔴 接口**不返回**「风险等级」「命中词清单」「替换建议」这三类字段,别去读不存在的字段。
> 命中词要靠上面那条从 `content` 的 `<span>` 里取,替换建议由你结合上下文给。
> 🔴 零命中照常计费(与 `NO_RESULT` 免费口径无关),别当 bug 报。
### 命中分级:哪些改,哪些只报
上游按子串匹配,不看语境。命中分两档,对照表两档都列,**改写只动第一档**:
- **营销语境命中 → 改**:极限词 / 功效承诺 / 医疗用语等落在卖货、承诺、比较句里的(「全网最低」「三天见效」)。
- **只报不改**:营销语境外的程度副词(「最后一步」「第一次」「一定要备份」「完全免费开源」里的
最后 / 第一 / 一定 / 完全)与英文子串误中(`Assistant` 命中 `ass`)。对照表照列命中词,
「建议」一列写「语境不构成广告承诺,保留」。
《广告绝对化用语执法指南》(市场监管总局 2023)第五、六条列的不适用情形也归这档:
只表经营理念 / 愿望(「顾客第一」)、同品牌自我比较(「我们最贵的一款」)、消费提示
(「最佳食用时间」)、国标分级用语、商品名 / 商标 / 奖项本身含极限词、限定时间地域的事实
(「2025 年本市销量第一」——但要能举证)。
- **必改且从重**:医疗、医美、药品、器械、保健食品、投资理财、教育培训里的疗效 / 收益 / 效果承诺
(「有效率 100%」「保过」「稳赚」),指南第十一条明说这三类不算轻微,不享受首违免罚。
- **平台自有口径,接口未必查得到**:小红书对种草夸大词(绝绝子 / yyds / 闭眼买)限流,
对外站导流(加 vx / 私信 / 留言扣 1)禁言扣分;抖音把「夸张表达功效」判劣质营销。
文案里见到这几类,即使三平台都回「无命中」,也在对照表「建议」一列提一句。
### 每个平台怎么判「有没有命中」
- **有命中**:`prohibitedWordsType` 非空数组,**或** `content` 与 `originalContent` 不相等(任一成立即算)。
- **确实没命中**:拿到了 `content` 或 `originalContent`(证明检测跑过了),且上面两条都不成立。
- **没拿到结果**:该平台条目里有 `error`,或 `content` 与 `originalContent` 都缺失/为 null。
🔴 这时该平台一律标「检测失败」,**绝不能填成「合规」/「low」**,不替用户下合规结论。
---
## 错误处理
CLI 逐平台捕获网络 / HTTP 错误,把错误写进对应平台条目并继续其它平台:
**单平台失败不影响其余平台**,报错码怎么办照 `dby-gateway/references/protocol.md` 第 6 条。
问题绕不过去、或想吐槽 → 可提一句用 `dby-feedback` 当场写成反馈(可忽略,不再重复提)。
---
## 输出模板
脚本返回的是 JSON map,本鸭须解析后填入下面的模板,**禁止把原始 JSON 直接甩给用户**。
### 1. 逐平台风险对照表
| 平台 | 判定 | 风险类别 (prohibitedWordsType) | 命中词(从 content 的标注提取) | 建议(本鸭给) |
| -------- | ---------------- | ------------------------------ | ------------------------------- | ------------------ |
| 小红书 | 【命中 / 无命中 / 检测失败】 | 【类别,逗号分隔】 | 【命中词,逗号分隔】 | 【替换建议】 |
| 抖音 | 【…】 | 【…】 | 【…】 | 【…】 |
| 公众号 | 【…】 | 【…】 | 【…】 | 【…】 |
- 平台名用中文(小红书 / 抖音 / 公众号)。
- 「判定」一列严格按上面[判据](#每个平台怎么判有没有命中)填,三选一,不要自创风险等级——接口不回等级。
- 某平台走「没拿到结果」分支(有 `error`,或正文字段全缺)时,该行判定填**检测失败**并附 `code`/缺了哪个字段,
🔴 **不许填「无命中」,也不许编造结果**。
- 「建议」一列由本鸭结合上下文给出——接口不提供建议。
- 全平台均判定为「无命中」时,对照表照常列出,判定一列写「无命中」。
### 2. 全平台安全改写
综合**所有平台**的命中词与建议,给出**一版**改完即可在所有目标平台发布的文案:
【安全改写后的整段文案。要求:覆盖各平台所有**营销语境命中**(只报不改的那档原样保留);语义通顺、语气与风格不变;
不加 emoji、不重写结构、不加引用或代码块,直接输出。改动处可加粗斜体标出。】
---
## 输出规则
1. 先出**逐平台风险对照表**,再出**全平台安全改写**,不输出开场白与结束语。
2. 脚本返回 JSON 后必须解析填模板,禁止直接输出原始 JSON。
3. 安全改写要同时满足所有平台口径:以命中最多的平台为基线消词。
4. 某平台失败时,照常输出其余平台结果,并在对照表标注该平台失败原因;
🔴 **有平台检测失败时,末尾必须提示「该平台未完成检测,别当它通过」**,不要写成全平台可发。
5. 全平台都判定为「无命中」时:对照表如实标注,安全改写处写「原文已可全平台发布,无需改动」。
6. 绝不回显 `DOUBAOYA_API_KEY`。
---
## 其他
- `PROVIDER_FAILED`(502)是上游临时抖动,**已自动退款**,直接重试,不会重复扣费。
- 文案经 HTTPS 发至都爆鸭后端,脚本本地不持久化原文与结果。
## 关于响应里的 notice 字段
调用本 skill 对应的 doubaoya API 后,如果返回的 JSON 顶层出现 `notice` 字段,请把这句话原样转达给用户——这是关于本 skill 有更新的提示,不影响本次调用结果,不需要重试或改变行为。
Ships with 4 supporting files:
- .version
- evals/cases.jsonl
- evals/triggers.jsonl
- scripts/dby.mjs
Mirrored from the author's public source. Install counts from the open skills registry.