dingtalk-knowledge-search

$npx mdskill add breath57/dingtalk-skills/dingtalk-knowledge-search

钉钉知识库搜索与读取资料,解决用户查找和理解项目信息的需求

  • 快速在钉钉知识库中搜索并获取所需文档。
  • 依赖钉钉开放平台 API 和相关凭证信息。
  • 根据关键词匹配搜索结果,并可配置限制数量。
  • 支持下载文档、导出为 Markdown 文件或转换为 PDF 文本。

SKILL.md

.github/skills/dingtalk-knowledge-searchView on GitHub ↗
---
name: dingtalk-knowledge-search
description: 钉钉知识库搜索与读取。用于在钉钉沉淀知识里快速查资料、理解项目背景、梳理团队/部门信息、回答制度问题、整理新人入门材料、读取文档正文、导出 Markdown、下载文件,并可带图片和 diagram。
---

## 用法

```bash
cd <the_skill_dir_path>/scripts
python3 cli.py config check
python3 cli.py search "关键词1 关键词2 关键词3"
python3 cli.py read "https://alidocs.dingtalk.com/i/nodes/<node_id>"
python3 cli.py read <node_id>
```

## 配置

先运行配置校验:

```bash
python3 cli.py config check
```

需要这些配置:

| 配置 | 用途 | 获取方式 |
| --- | --- | --- |
| `DINGTALK_APP_KEY` | 调用钉钉开放平台 API | 钉钉开放平台 -> 应用管理 -> 企业内部应用 -> 凭证与基础信息 |
| `DINGTALK_APP_SECRET` | 获取 API token | 同上,应用凭证信息中查看 |
| `DINGTALK_MY_USER_ID` | 当前操作者身份 | 管理后台 -> 通讯录 -> 成员管理 -> 点击成员查看 userId |
| `DINGTALK_MY_OPERATOR_ID` | 文档 API 的 operatorId/unionId | 有 `DINGTALK_MY_USER_ID` 后可自动转换 |

缺少 `DINGTALK_MY_OPERATOR_ID` 时执行:

```bash
python3 cli.py config to-unionid
```

## 得到什么

- `search`:返回匹配文档列表;可用 `--limit <n>` 控制数量
- `read`:返回 Markdown;长内容会写到文件并返回路径;非 ALIDOC 文件会下载原文件
- PDF 转文本:`read <pdf_node_or_url> --mode pdf2text` 会先下载 PDF,再用系统 `pdftotext -layout` 输出 `.txt`;如果系统没有 `pdftotext`,会提示安装 `poppler-utils`,并退回返回 PDF 路径
- 默认输出:写到 skill workspace 下的 `.skills-workspace/dingtalk-knowledge-search/outputs/`
- 项目沉淀:用 `--output-dir "$PWD/dingtalk-docs" --output-path` 把结果写到当前项目
- 输出缓存:下载/转换结果会在用户级缓存目录保留一份,远端 `modifiedTime` 未变化时复用;默认用硬链接写入 `--output-dir`,用 `--output-strategy copy` 可复制隔离
- 图片本地化:用 `--with img-local`,图片会下载到 Markdown 同目录 `.assets/<文档名>/`
- 图片代理:用 `--with img`,节约本地空间,但依赖代理服务和原链接有效期
- diagram:用 `--with diagram` 一起导出

## 例子

```bash
python3 cli.py search "项目背景 年假 晋升" --limit 10
python3 cli.py read "https://alidocs.dingtalk.com/i/nodes/<node_id>" --output-dir "$PWD/dingtalk-docs" --output-path
python3 cli.py read "https://alidocs.dingtalk.com/i/nodes/<node_id>" --with img-local --with diagram --output-dir "$PWD/dingtalk-docs" --output-path
python3 cli.py read "https://alidocs.dingtalk.com/i/nodes/<file_node_id>" --output-dir "$PWD/dingtalk-docs"
python3 cli.py read "https://alidocs.dingtalk.com/i/nodes/<pdf_node_id>" --mode pdf2text --output-dir "$PWD/dingtalk-docs"
python3 cli.py read "https://alidocs.dingtalk.com/i/nodes/<pdf_node_id>" --mode pdf2text --output-dir "$PWD/dingtalk-docs" --output-strategy copy
```

## 缓存

- `search` 不缓存,每次直接查远端
- `node`、`resolve-url`、`blocks` 仍使用 SQLite API 缓存,受 `--cache-ttl` 影响
- 输出文件缓存不受 TTL 影响,使用远端 `modifiedTime` 判断是否复用
- 输出缓存默认位置:`~/.dingtalk-skills/dingtalk-knowledge-search/output-cache/`
- 默认 `--output-strategy link`:把全局缓存硬链接到当前 `--output-dir`,节省空间;编辑任一硬链接文件会影响同一份内容
- `--output-strategy copy`:复制到当前 `--output-dir`,和全局缓存隔离
- `python3 cli.py cache clear --namespace output --yes` 会删除输出缓存记录和关联本地文件

## 登录

- 需要扫码时,命令会返回 `loginRequired: true` 和 `screenshotPath`
- 扫码后重新执行同一个命令

More from breath57/dingtalk-skills

SkillDescription
dingtalk-ai-table钉钉 AI 表格(多维表格)操作。当用户提到"钉钉AI表格"、"AI表格"、"多维表格"、"工作表"、"字段"、"记录"、"新增记录"、"查询记录"、"更新记录"、"删除记录"、"新建字段"、"删除字段"、"dingtalk AI table"、"dingtalk notable"、"able文件"时使用此技能。支持工作表管理、字段管理、记录的增删改查等全部操作。
dingtalk-ai-web-search网页搜索与实时信息检索。需要查找最新资讯、实时数据、技术文档、热点事件,或用户说"搜一下"、"帮我查"、"查资料"、"web search"等时使用。基于小宿AI智能搜索,支持关键词搜索、时间范围过滤(一天/一周/一月/一年)、自定义结果数量、JSON 输出。
dingtalk-document钉钉知识库和文档管理操作。当用户提到"钉钉文档"、"知识库"、"新建文档"、"查看文档目录"、"读取文档内容"、"写入文档"、"更新文档"、"文档成员"、"dingtalk doc"、"knowledge base"时使用此技能。支持:创建知识库、查询知识库列表、新建文档/文件夹、读取/写入文档正文内容、管理成员权限等全部文档类操作。
dingtalk-message钉钉消息发送。当用户提到"钉钉消息"、"发消息"、"发通知"、"群通知"、"群消息"、"Webhook"、"机器人消息"、"机器人发消息"、"工作通知"、"单聊消息"、"群聊消息"、"撤回消息"、"消息已读"、"发送Markdown"、"发卡片消息"、"ActionCard"、"@某人"、"@员工"、"at某人"、"提醒某人"、"dingtalk message"、"send message"、"robot message"、"work notification"时使用此技能。支持:群自定义 Webhook 机器人(文本/Markdown/ActionCard/Link/FeedCard + 加签 + @某人)、企业内部应用机器人单聊和群聊发送、消息撤回、已读查询、工作通知等全部消息类操作。
dingtalk-skill-creator创建新的钉钉技能(dingtalk skill)。当用户提到"创建新技能"、"新建技能"、"开发钉钉技能"、"新增钉钉功能"、"添加钉钉接口支持"、"我需要一个钉钉 xxx 技能"、"钉钉待办"、"钉钉签到"、"钉钉考勤"、"钉钉审批"、"钉钉日程"等希望将某个钉钉 API 领域封装成可复用 skill 时,必须使用此技能。此技能包含完整的技能创建流程:SDK 探索 → SDK Python 测试 → 纯 HTTP Python 测试(两步全通过)→ SKILL.md 编写。测试未全部通过不得创建 skill。