$npx -y skills add WecomTeam/wecom-cli --skill wecomcli-contact通讯录成员查询技能,获取当前用户可见范围内的通讯录成员,支持按姓名/别名本地筛选匹配。返回 userid、姓名和别名。⚠️ 仅返回当前用户有权限查看的成员,非全量成员。
| 1 | # 通讯录成员查询技能 |
| 2 | |
| 3 | > `wecom-cli` 是企业微信提供的命令行程序,所有操作通过执行 `wecom-cli` 命令完成。 |
| 4 | |
| 5 | 获取当前用户可见范围内的通讯录成员,并在本地按姓名/别名进行筛选匹配。 |
| 6 | |
| 7 | ## 操作 |
| 8 | |
| 9 | ### 1. 获取全量通讯录成员 |
| 10 | |
| 11 | 获取当前用户可见范围内的所有企业成员信息: |
| 12 | |
| 13 | **调用示例:** |
| 14 | |
| 15 | ```bash |
| 16 | wecom-cli contact get_userlist '{}' |
| 17 | ``` |
| 18 | |
| 19 | **返回格式:** |
| 20 | |
| 21 | ```json |
| 22 | { |
| 23 | "errcode": 0, |
| 24 | "errmsg": "ok", |
| 25 | "userlist": [ |
| 26 | { |
| 27 | "userid": "zhangsan", |
| 28 | "name": "张三", |
| 29 | "alias": "Sam" |
| 30 | }, |
| 31 | { |
| 32 | "userid": "lisi", |
| 33 | "name": "李四", |
| 34 | "alias": "" |
| 35 | } |
| 36 | ] |
| 37 | } |
| 38 | ``` |
| 39 | |
| 40 | **返回字段说明:** |
| 41 | |
| 42 | | 字段 | 类型 | 说明 | |
| 43 | |------|------|------| |
| 44 | | `errcode` | integer | 返回码,`0` 表示成功 | |
| 45 | | `errmsg` | string | 错误信息 | |
| 46 | | `userlist` | array | 用户列表 | |
| 47 | | `userlist[].userid` | string | 用户唯一 ID | |
| 48 | | `userlist[].name` | string | 用户姓名 | |
| 49 | | `userlist[].alias` | string | 用户别名,可能为空 | |
| 50 | |
| 51 | --- |
| 52 | |
| 53 | ### 2. 按姓名/别名搜索人员 |
| 54 | |
| 55 | `get_userlist` 返回全量成员后,在本地对结果进行筛选匹配: |
| 56 | |
| 57 | - **精确匹配**:`name` 或 `alias` 与关键词完全一致,直接使用 |
| 58 | - **模糊匹配**:`name` 或 `alias` 包含关键词,返回所有匹配结果 |
| 59 | - **无结果**:告知用户未找到对应人员 |
| 60 | |
| 61 | **搜索示例:** |
| 62 | |
| 63 | 用户问:"帮我找一下张三是谁?" |
| 64 | |
| 65 | 1. 调用 `get_userlist` 获取全量成员 |
| 66 | 2. 在 `userlist` 中筛选 `name` 或 `alias` 包含"张三"的成员 |
| 67 | 3. 返回匹配结果 |
| 68 | |
| 69 | --- |
| 70 | |
| 71 | ## 注意事项 |
| 72 | |
| 73 | - `get_userlist` 返回的是当前用户**可见范围内**的成员,需经过可见性规则过滤,不一定是全公司所有人员;返回字段仅包含 `userid`、`name`(姓名)和 `alias`(别名) |
| 74 | - ⚠️ **超过 10 人时接口将报错**:若 `userlist` 返回成员数量超过 10 人,视为异常,应立即停止处理并向用户说明: |
| 75 | |
| 76 | > 当前通讯录可见成员数量超过了本技能支持的上限(10 人)。 |
| 77 | > 本技能仅适用于可见范围较小的场景,无法在大范围通讯录中使用。 |
| 78 | > 建议缩小可见范围后重试,或通过其他方式查询目标人员。 |
| 79 | |
| 80 | - `userid` 是用户的唯一标识,在需要传递用户 ID 给其他接口时使用此字段 |
| 81 | - `alias` 字段可能为空字符串,搜索时需做空值判断 |
| 82 | - 若搜索结果有多个同名人员,需将所有候选人展示给用户选择,不得自行决定 |
| 83 | - 若 `errcode` 不为 `0`,说明接口调用失败,需告知用户错误信息(`errmsg`) |
| 84 | |
| 85 | --- |
| 86 | |
| 87 | ## 典型工作流 |
| 88 | |
| 89 | ### 工作流 1:查询人员信息 |
| 90 | |
| 91 | 用户问:"帮我查一下 Sam 是谁?" |
| 92 | |
| 93 | 1. |
| 94 | ```bash |
| 95 | wecom-cli contact get_userlist '{}' |
| 96 | ``` |
| 97 | 获取全量成员列表 |
| 98 | |
| 99 | 2. 在结果中筛选 `alias` 为 `Sam` 或 `name` 包含 `Sam` 的成员 |
| 100 | 3. 若找到唯一匹配,直接展示结果: |
| 101 | |
| 102 | ``` |
| 103 | 📇 找到成员: |
| 104 | - 姓名:张三 |
| 105 | - 别名:Sam |
| 106 | - 用户ID:zhangsan |
| 107 | ``` |
| 108 | |
| 109 | 4. 若找到多个匹配,展示候选列表请用户确认: |
| 110 | |
| 111 | ``` |
| 112 | 🔍 找到多个匹配成员,请确认您要查询的是哪位: |
| 113 | |
| 114 | 1. 张三(别名:Sam,ID:zhangsan) |
| 115 | 2. 张三丰(别名:Sam2,ID:zhangsan2) |
| 116 | |
| 117 | 请问您要查询的是哪一位? |
| 118 | ``` |
| 119 | |
| 120 | --- |
| 121 | |
| 122 | ### 工作流 2:为其他功能提供 userid 转换 |
| 123 | |
| 124 | 用户问:"帮我发消息给张三" |
| 125 | |
| 126 | 1. |
| 127 | ```bash |
| 128 | wecom-cli contact get_userlist '{}' |
| 129 | ``` |
| 130 | 获取全量成员 |
| 131 | |
| 132 | 2. 筛选 `name` 为"张三"的成员,确认 `userid` |
| 133 | 3. 将 `userid` 传递给消息发送接口 |
| 134 | |
| 135 | --- |
| 136 | |
| 137 | ### 工作流 3:批量查询多个人员 |
| 138 | |
| 139 | 用户问:"帮我查一下张三和李四分别是谁?" |
| 140 | |
| 141 | 1. |
| 142 | ```bash |
| 143 | wecom-cli contact get_userlist '{}' |
| 144 | ``` |
| 145 | 获取全量成员列表 |
| 146 | |
| 147 | 2. 分别筛选"张三"和"李四"的匹配结果 |
| 148 | 3. 汇总后一并展示 |
| 149 | |
| 150 | > 注意:只需调用一次 `get_userlist`,在本地对结果进行多次筛选,避免重复调用接口。 |
| 151 | |
| 152 | --- |
| 153 | |
| 154 | ## 快速参考 |
| 155 | |
| 156 | ### 接口说明 |
| 157 | |
| 158 | | 接口 | 用途 | 输入 | 返回 | |
| 159 | |------|------|------|------| |
| 160 | | `get_userlist` | 获取可见范围内全量通讯录成员 | 无 | 用户列表(userid、name、alias) | |
| 161 | |
| 162 | ### 本地筛选策略 |
| 163 | |
| 164 | | 场景 | 策略 | |
| 165 | |------|------| |
| 166 | | 精确匹配(name 或 alias 完全一致) | 直接使用,无需用户确认 | |
| 167 | | 模糊匹配(name 或 alias 包含关键词),唯一结果 | 直接使用,向用户展示结果 | |
| 168 | | 模糊匹配,多个结果 | 展示候选列表,请用户选择 | |
| 169 | | 无匹配结果 | 告知用户未找到对应人员 | |