forked from AxTps/Starlight_Lancher
feat:移除了弹窗,服务器添加sls
This commit is contained in:
55
.claude/skills/lark-contact/SKILL.md
Normal file
55
.claude/skills/lark-contact/SKILL.md
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
name: lark-contact
|
||||
version: 1.0.0
|
||||
description: "飞书 / Lark 通讯录:按姓名 / 邮箱解析成 open_id,或按 open_id 反查姓名 / 部门 / 邮箱 / 联系方式 / 个人状态 / 签名。当用户提到某人姓名要下一步发消息 / 排日程,或拿到 open_id 想查具体信息时使用。不负责部门树遍历、按部门列员工、组织架构图,这类需求走原生 OpenAPI。"
|
||||
metadata:
|
||||
requires:
|
||||
bins: ["lark-cli"]
|
||||
cliHelp: "lark-cli contact --help"
|
||||
---
|
||||
|
||||
## 选哪个命令
|
||||
|
||||
**user 身份和 bot 身份是两条完全独立的路径**。先确定当前身份,再按下表选命令:
|
||||
|
||||
| 想做什么 | user 身份 | bot 身份 |
|
||||
|---|---|---|
|
||||
| 按姓名 / 邮箱搜员工拿 open_id | [`+search-user`](references/lark-contact-search-user.md) | 不支持 |
|
||||
| 已知 open_id 取他人资料 | `+search-user --user-ids <id>` | [`+get-user --user-id <id>`](references/lark-contact-get-user.md) |
|
||||
| 查看自己 | `+get-user` 或 `+search-user --user-ids me` | 不支持 |
|
||||
| 查同事的个人状态 / 签名 | `user_profiles batch_query` | 不支持 |
|
||||
|
||||
已知 open_id 只是想发消息 / 排日程,不必经过 contact —— 直接 [`lark-im`](../lark-im/SKILL.md) / [`lark-calendar`](../lark-calendar/SKILL.md)。
|
||||
|
||||
## 典型场景
|
||||
|
||||
找张三给他发消息:先搜,确认 open_id,再发:
|
||||
|
||||
```bash
|
||||
lark-cli contact +search-user --query "张三" --has-chatted --as user
|
||||
lark-cli im +messages-send --user-id ou_xxx --text "Hi!"
|
||||
```
|
||||
|
||||
批量查同事的个人状态 / 个性签名(先用 schema 看参数)。
|
||||
|
||||
```bash
|
||||
lark-cli schema contact.user_profiles.batch_query
|
||||
lark-cli contact user_profiles batch_query \
|
||||
--params '{"user_id_type":"open_id"}' \
|
||||
--data '{"user_ids":["ou_xxx","ou_yyy"],"query_option":{"include_personal_status":true,"include_description":true}}' \
|
||||
--as user
|
||||
```
|
||||
|
||||
搜索命中多条且后续操作有副作用(发消息、邀请会议等),把候选列给用户挑;不要擅自选第一条。
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **41050 / Permission denied** 受当前身份的可见范围限制(两条命令都可能遇到)。换 bot 身份或让管理员调整可见范围,细节见 [`lark-shared`](../lark-shared/SKILL.md)。
|
||||
- **跨租户用户**(`is_cross_tenant=true`)多数业务字段为空字符串,这是飞书可见性规则,下游做空值兜底。
|
||||
- **ID 类型**:默认 `open_id`。`+get-user` 可改 `--user-id-type union_id|user_id`;`+search-user` 只接受 `open_id`。
|
||||
|
||||
## 不在本 skill 范围
|
||||
|
||||
- 发消息 / 查聊天记录 → [`lark-im`](../lark-im/SKILL.md)
|
||||
- 排日程 / 邀请会议 → [`lark-calendar`](../lark-calendar/SKILL.md)
|
||||
- 部门树 / 按部门列员工 / 组织架构 → [`lark-openapi-explorer`](../lark-openapi-explorer/SKILL.md) 查找原生接口
|
||||
@ -0,0 +1,19 @@
|
||||
# +get-user
|
||||
|
||||
按 ID 取用户基本信息(姓名等)。
|
||||
|
||||
```bash
|
||||
# 取自己
|
||||
lark-cli contact +get-user --as user
|
||||
|
||||
# bot 按 ID 取他人
|
||||
lark-cli contact +get-user --user-id ou_xxx --as bot
|
||||
|
||||
# 按 union_id / user_id 取(默认 open_id)
|
||||
lark-cli contact +get-user --user-id <id> --user-id-type union_id --as bot
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **user 身份按 ID 取他人请用 `+search-user --user-ids <id>`**,字段比本命令多(部门 / 邮箱 / 是否激活等)。本命令的 user 模式只回很少字段。
|
||||
- **`--as bot` 必须传 `--user-id`**:不传会直接报错(只有 user 身份能省略 `--user-id` 取自己)。
|
||||
@ -0,0 +1,123 @@
|
||||
# +search-user
|
||||
|
||||
仅支持 user 身份。
|
||||
|
||||
## 适用范围
|
||||
|
||||
- ✅ 已知姓名 / 邮箱 / 「聊过的人」想找出 open_id
|
||||
- ✅ 已知一组 open_id 想批量校验或回填字段(`--user-ids`,最多 100,支持 `me`)
|
||||
- ✅ 按聊天关系 / 在职状态 / 租户边界 / 企业邮箱等维度筛选员工
|
||||
- ❌ 已知 open_id 想发消息 → 直接走 `lark-im`,不经过本命令
|
||||
|
||||
## 关键 flag
|
||||
|
||||
`--query` / `--queries` / `--user-ids` / bool filter 至少传一个。bool filter 显式传 `=false` 会报错——不传等于不过滤。
|
||||
|
||||
| Flag | 作用 |
|
||||
|---|---|
|
||||
| `--query <text>` | 关键词(姓名 / 邮箱 / 手机号),≤ 50 rune |
|
||||
| `--queries <csv>` | 多个关键词并行搜,**最多 20 条**;与 `--query` / `--user-ids` 互斥;输出新 shape(见下) |
|
||||
| `--user-ids <csv>` | open_id 列表,≤ 100;支持 `me` 表示自己;与 `--query` 同传时把搜索范围限定在该集合 |
|
||||
| `--has-chatted` | 仅搜聊过天的 |
|
||||
| `--has-enterprise-email` | 仅搜有企业邮箱的 |
|
||||
| `--exclude-external-users` | 仅搜同租户(排除外部联系人) |
|
||||
| `--left-organization` | 仅搜已离职的 |
|
||||
| `--lang <locale>` | 覆盖 `localized_name` 的语种(如 `zh_cn` / `en_us` / `ja_jp`) |
|
||||
| `--page-size <n>` | 单页大小 1-30,默认 20 |
|
||||
|
||||
## 常用例子
|
||||
|
||||
```bash
|
||||
# 按姓名搜,看候选确认是哪个张三
|
||||
lark-cli contact +search-user --query "张三" --has-chatted
|
||||
|
||||
# 按完整邮箱搜(命中通常唯一,适合作后续命令的输入)
|
||||
lark-cli contact +search-user --query "alice@example.com"
|
||||
|
||||
# 查看自己
|
||||
lark-cli contact +search-user --user-ids me
|
||||
|
||||
# 批量回填:已知一组 open_id,取姓名 / 邮箱 / 部门
|
||||
lark-cli contact +search-user --user-ids "ou_a,ou_b,ou_c" --format json
|
||||
|
||||
# 多 filter 组合:同租户的、有企业邮箱的「王」姓员工
|
||||
lark-cli contact +search-user --query "王" --exclude-external-users --has-enterprise-email
|
||||
|
||||
# filter-only 枚举:列出所有"聊过天的离职同事"(无关键词)
|
||||
lark-cli contact +search-user --has-chatted --left-organization
|
||||
```
|
||||
|
||||
## 批量并行查询 (fanout)
|
||||
|
||||
一次查多个名字:
|
||||
|
||||
```bash
|
||||
lark-cli contact +search-user --queries "Alice,Bob,张三"
|
||||
```
|
||||
|
||||
- 每行 user 带 `matched_query`,标识来自哪个 query
|
||||
- `queries[]` 每个输入一条 `{query, error?, has_more}`,失败的有 `error`
|
||||
- 部分失败不影响其它 query;全部失败才 exit 非 0
|
||||
|
||||
```bash
|
||||
# bool filter 对每个 query 都生效
|
||||
lark-cli contact +search-user --queries "Alice,Bob" --has-chatted
|
||||
|
||||
# 与 --query / --user-ids 互斥
|
||||
lark-cli contact +search-user --queries "a" --query "b" # ❌ exit 2
|
||||
```
|
||||
|
||||
约束:
|
||||
- 最多 20 条; 每条 ≤ 50 字符
|
||||
- 重复条目静默去重;全空 csv (`,,,`) 报错
|
||||
|
||||
## 同名 disambiguation
|
||||
|
||||
搜常见姓名常返回多条同名结果。后续操作若有副作用(发消息、邀请会议等),把候选列给用户挑;**不要擅自选**。
|
||||
|
||||
筛选信号(可信度从高到低):`chat_recency_hint`(近期联系过) > `enterprise_email` 前缀 > `department` 关键词。`localized_name` 同名时无区分作用。
|
||||
|
||||
```bash
|
||||
# 用 jq 按部门精筛
|
||||
lark-cli contact +search-user --query "张三" \
|
||||
--jq '.data.users[] | select(.department | contains("<部门关键词>"))'
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **不会自动翻页**。`has_more=true` 表示需要 refine query。
|
||||
- **`--lang` 只影响输出展示名**,不影响匹配字段。
|
||||
- **`--query` 与 `--user-ids` 同时设**:`--user-ids` 限定搜索范围,`--query` 在该集合内匹配。
|
||||
|
||||
## 输出字段 contract
|
||||
|
||||
跨租户用户(`is_cross_tenant=true`)的业务字段可能为空字符串,需做空值兜底。
|
||||
|
||||
| 字段 | 类型 | 说明 | 跨租户 |
|
||||
|---|---|---|---|
|
||||
| `open_id` | string | 稳定标识,后续命令的输入 | 始终非空 |
|
||||
| `localized_name` | string | 按 `--lang` / brand 选出的展示名 | 始终非空(兜底为 open_id) |
|
||||
| `email` | string | 个人邮箱 | 可能为空 |
|
||||
| `enterprise_email` | string | 企业邮箱 | 可能为空 |
|
||||
| `is_activated` | bool | 是否已激活飞书账号(未激活也可投递消息,但用户可能看不到) | 可能 false |
|
||||
| `is_cross_tenant` | bool | 是否跨租户用户(同公司=false,外部联系人=true) | — |
|
||||
| `p2p_chat_id` | string | 与当前用户的 P2P 会话 ID(`oc_...`);空表示从未私聊过。可作为接受 `--chat-id` 的 IM 命令的输入 | 可能为空 |
|
||||
| `has_chatted` | bool | `p2p_chat_id != ""` 的派生字段 | — |
|
||||
| `department` | string | 部门路径,服务端可能用 `-` 拼层级,层级数不固定。**按可子串匹配的字符串处理** | 可能为空 |
|
||||
| `signature` | string (optional) | 用户个性签名;空时字段不出现 | 可能不出现 |
|
||||
| `chat_recency_hint` | string | 最近联系的提示文案,仅供展示 | 可能为空 |
|
||||
| `match_segments` | string[] | 关键词命中的字符串片段,用于高亮展示;无命中则为空数组 | — |
|
||||
|
||||
### `--queries` 模式额外字段
|
||||
|
||||
`data.users[]` 每条多 `matched_query` (string),指明本行来自哪个 query。
|
||||
|
||||
`data.queries[]` 按输入顺序、dedup 后每个 query 一条:
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|---|---|---|
|
||||
| `query` | string | 该输入 |
|
||||
| `error` | string (optional) | 失败原因;成功时不出现 |
|
||||
| `has_more` | bool | 该 query 还有更多结果 |
|
||||
|
||||
fanout 模式无顶层 `data.has_more`。
|
||||
Reference in New Issue
Block a user