feishu-contact
飞书组织架构与 ID 转换。搜索成员、部门管理、ID 互转(OpenID/UserID/UnionID)。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o feishu-contact.zip https://jpskill.com/download/21599.zip && unzip -o feishu-contact.zip && rm feishu-contact.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/21599.zip -OutFile "$d\feishu-contact.zip"; Expand-Archive "$d\feishu-contact.zip" -DestinationPath $d -Force; ri "$d\feishu-contact.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
feishu-contact.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
feishu-contactフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
飛書組織構造と ID 変換
Contact v3 API を通じて、メンバー検索、部門管理、ID 変換を実現します。
API の基本
ベース URL: https://open.feishu.cn/open-apis/contact/v3
認証: Authorization: Bearer {tenant_access_token}
認証とトークンの取得
feishu_skills のルートディレクトリから共有スクリプトを実行します。
TOKEN="$(./scripts/get_feishu_token.sh)"
リクエストヘッダーはすべて Authorization: Bearer ${TOKEN} を使用します。
ビジネスインターフェースがトークン無効、期限切れ、または 401 を返した場合、強制的に更新した後、元のリクエストを一度だけ再試行します。
TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"
環境変数:
FEISHU_APP_IDFEISHU_APP_SECRET
ローカルキャッシュ: ./.feishu_token_cache.json(期限切れでなければ直接再利用し、デフォルトでは 5 分前に更新します)
メンバー検索
| API | エンドポイント | 説明 |
|---|---|---|
| メンバー検索 | GET /users/batch_get_id |
メールアドレス/携帯電話番号で OpenID を取得します |
| 役職の取得 | GET /job_titles/{id} |
管理者バックエンドで事前に維持する必要があります |
部門管理
| API | エンドポイント | メソッド | リクエストボディの例 | 説明 |
|---|---|---|---|---|
| 部門の取得 | /departments/{department_id} |
GET | - | 単一の部門の詳細を照会します |
| 部門リストの取得 | /departments |
GET | - | parent_department_id パラメータをサポートします |
| 親部門パスの取得 | /departments/{department_id}/parent |
GET | - | 部門の階層パスを取得します |
| 部門の作成 | /departments |
POST | {"name":"新部門","parent_department_id":"0"} |
管理者権限が必要です |
| 部門の更新 | /departments/{department_id} |
PUT | {"name":"更新後の名称"} |
部門情報を変更します |
| 部門の削除 | /departments/{department_id} |
DELETE | - | 空の部門を削除します |
| メンバーの入社 | /users |
POST | {"name":"張三","mobile":"138...","department_ids":["od_xxx"]} |
ユーザーを作成します |
| ユーザーの更新 | /users/{user_id} |
PUT | {"name":"新名字"} |
ユーザー情報を変更します |
| ユーザーの削除 | /users/{user_id} |
DELETE | - | ユーザーを削除します |
| ユーザーリストの取得 | /users |
GET | - | department_id フィルタリングをサポートします |
⚠️ 部門の作成とメンバーの入社には最高権限が必要です。プレリリース環境でのテストをお勧めします。
ユーザーグループ管理
| API | エンドポイント | メソッド | リクエストボディの例 | 説明 |
|---|---|---|---|---|
| ユーザーグループリストの取得 | /groups |
GET | - | すべてのユーザーグループを照会します |
| ユーザーグループの取得 | /groups/{group_id} |
GET | - | 単一のユーザーグループを照会します |
| ユーザーグループの作成 | /groups |
POST | {"name":"プロジェクトグループ","description":"説明"} |
新しいユーザーグループを作成します |
| ユーザーグループの更新 | /groups/{group_id} |
PUT | {"name":"新名称"} |
ユーザーグループを変更します |
| ユーザーグループの削除 | /groups/{group_id} |
DELETE | - | ユーザーグループを削除します |
| グループメンバーの取得 | /groups/{group_id}/members |
GET | - | グループメンバーリストを照会します |
| グループメンバーの追加 | /groups/{group_id}/members |
POST | {"member_id":"ou_xxx","member_type":"user"} |
ユーザーをグループに追加します |
| グループメンバーの削除 | /groups/{group_id}/members/{member_id} |
DELETE | - | グループからユーザーを削除します |
職位管理
| API | エンドポイント | メソッド | リクエストボディの例 | 説明 |
|---|---|---|---|---|
| 職位リストの取得 | /job_families |
GET | - | すべての職位を照会します |
| 職位の取得 | /job_families/{job_family_id} |
GET | - | 単一の職位を照会します |
| 職位の作成 | /job_families |
POST | {"name":"高級エンジニア"} |
新しい職位を作成します |
| 職位の更新 | /job_families/{job_family_id} |
PUT | {"name":"シニアエンジニア"} |
職位を変更します |
| 職位の削除 | /job_families/{job_family_id} |
DELETE | - | 職位を削除します |
ロール管理
| API | エンドポイント | メソッド | リクエストボディの例 | 説明 |
|---|---|---|---|---|
| ロールリストの取得 | /roles |
GET | - | すべてのロールを照会します |
| ロールの作成 | /roles |
POST | {"role_name":"管理者"} |
新しいロールを作成します |
| ロールの更新 | /roles/{role_id} |
PUT | {"role_name":"スーパー管理者"} |
ロール名を変更します |
| ロールの削除 | /roles/{role_id} |
DELETE | - | ロールを削除します |
| ロールメンバーの取得 | /roles/{role_id}/members |
GET | - | ロール下のすべてのメンバーを照会します |
| ロールメンバーの一括追加 | /roles/{role_id}/members/batch_create |
POST | {"members":[{"member_id":"ou_xxx","member_type":"user"}]} |
メンバーを一括追加します |
| ロールメンバーの一括削除 | /roles/{role_id}/members/batch_delete |
POST | {"members":[{"member_id":"ou_xxx"}]} |
メンバーを一括削除します |
ID 変換(コア)
飛書には 3 種類の ID システムがあります。
| ID タイプ | 説明 | 使用シナリオ |
|---|---|---|
open_id |
アプリケーション内で一意 | 同じアプリケーション内でユーザーを識別 |
user_id |
企業内で一意 | 企業内部システム連携 |
union_id |
アプリケーション間で一意 | 同じ開発者の複数のアプリケーション間 |
Contact v3 ID 変換
| API | エンドポイント | メソッド | リクエストボディの例 | 説明 |
|---|---|---|---|---|
| ユーザー ID の一括取得 | /users/batch_get_id |
POST | {"emails":["a@b.com"],"mobiles":["138xxx"]} |
メールアドレス/携帯電話で OpenID を取得します |
| 部門 ID の一括取得 | /departments/batch_get_id |
POST | {"department_ids":["od_xxx"]} |
部門 ID 変換 |
| ユーザーの取得 | /users/{user_id} |
GET | - | ID でユーザー情報を取得します |
| ユーザー情報の取得(一括) | /users/batch_get |
GET | - | パラメータ:user_ids=ou_1,ou_2 |
ID 変換のベストプラクティス:
GET /users/{user_id} インターフェースを使用すると、ユーザーのすべての ID タイプ(open_id/user_id/union_id)を一度に取得でき、個別に変換する必要はありません。
例:
GET /contact/v3/users/ou_xxx?user_id_type=open_id
応答に含まれるもの:
{
"data": {
"user": {
"open_id": "ou_xxx",
"user_id": "7c43cd5f",
"union_id": "on_xxx"
}
}
}
その他
| API | エンドポイント | メソッド | 説明 |
|---|---|---|---|
| 役職リストの取得 | /job_titles |
GET | すべての事前設定された役職を照会します |
| 役職の取得 | /job_titles/{job_title_id} |
GET | 単一の役職の詳細を照会します |
| 勤務地の取得 | /places |
GET | 人員の地理的分布分析に使用されます |
| 従業員タイプの取得 | /employee_types |
GET | 従業員タイプリストを照会します |
| カスタム属性の取得 | /custom_attr_events |
GET | カスタム属性変更イベントを照会します |
| 承認範囲の取得 | /scopes |
GET | アプリケーションがアクセスできる部門/ユーザー範囲を照会します |
| 外部メンバーアクセス | /application/v1/applications/{app_id}/user_usable |
GET | ベンダー/アウトソーシングのアクセス権を制御します |
イベント購読
連絡先は 17 の変更イベントをサポートしています。
| イベントタイプ | 説明 |
|---|---|
contact.user.created_v3 |
ユーザー作成 |
contact.user.updated_v3 |
ユーザー情報更新 |
contact.user.deleted_v3 |
ユーザー削除 |
contact.dept.created_v3 |
部門作成 |
contact.dept.updated_v3 |
部門更新 |
contact.dept.deleted_v3 |
部門削除 |
contact.employee_type.created_v3 |
従業員タイプ作成 |
contact.employee_type.updated_v3 |
従業員タイプ更新 |
contact.employee_type.deleted_v3 |
従業員タイプ削除 |
contact.job_family.created_v3 |
職位作成 |
contact.job_family.updated_v3 |
職位更新 |
contact.job_family.deleted_v3 |
職位削除 |
ベストプラクティス
- ID 変換は Spark API を優先します(より簡潔です)
- よく使う ID をキャッシュします(API 呼び出しを減らします)
- 組織構造の変更は必ずプレリリース環境でテストします
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
飞书组织架构与 ID 转换
通过 Contact v3 API 实现成员搜索、部门管理和 ID 转换。
API 基础
Base URL: https://open.feishu.cn/open-apis/contact/v3
认证: Authorization: Bearer {tenant_access_token}
认证与 Token 获取
从 feishu_skills 根目录执行共享脚本:
TOKEN="$(./scripts/get_feishu_token.sh)"
请求头统一使用 Authorization: Bearer ${TOKEN}。
如果业务接口返回 token 无效、过期或 401,强制刷新后仅重试一次原请求:
TOKEN="$(./scripts/get_feishu_token.sh --force-refresh)"
环境变量:
FEISHU_APP_IDFEISHU_APP_SECRET
本地缓存: ./.feishu_token_cache.json(未过期直接复用,默认提前 5 分钟刷新)
成员查询
| API | 端点 | 说明 |
|---|---|---|
| 搜索成员 | GET /users/batch_get_id |
通过邮箱/手机号获取 OpenID |
| 获取职务 | GET /job_titles/{id} |
需在管理后台预先维护 |
部门管理
| API | 端点 | 方法 | 请求体示例 | 说明 |
|---|---|---|---|---|
| 获取部门 | /departments/{department_id} |
GET | - | 查询单个部门详情 |
| 获取部门列表 | /departments |
GET | - | 支持 parent_department_id 参数 |
| 获取父部门路径 | /departments/{department_id}/parent |
GET | - | 获取部门层级路径 |
| 创建部门 | /departments |
POST | {"name":"新部门","parent_department_id":"0"} |
需管理员权限 |
| 更新部门 | /departments/{department_id} |
PUT | {"name":"更新后的名称"} |
修改部门信息 |
| 删除部门 | /departments/{department_id} |
DELETE | - | 删除空部门 |
| 入职成员 | /users |
POST | {"name":"张三","mobile":"138...","department_ids":["od_xxx"]} |
创建用户 |
| 更新用户 | /users/{user_id} |
PUT | {"name":"新名字"} |
修改用户信息 |
| 删除用户 | /users/{user_id} |
DELETE | - | 移除用户 |
| 获取用户列表 | /users |
GET | - | 支持 department_id 过滤 |
⚠️ 创建部门和入职成员需最高权限,建议预发环境测试。
用户组管理
| API | 端点 | 方法 | 请求体示例 | 说明 |
|---|---|---|---|---|
| 获取用户组列表 | /groups |
GET | - | 查询所有用户组 |
| 获取用户组 | /groups/{group_id} |
GET | - | 查询单个用户组 |
| 创建用户组 | /groups |
POST | {"name":"项目组","description":"描述"} |
创建新用户组 |
| 更新用户组 | /groups/{group_id} |
PUT | {"name":"新名称"} |
修改用户组 |
| 删除用户组 | /groups/{group_id} |
DELETE | - | 删除用户组 |
| 获取组成员 | /groups/{group_id}/members |
GET | - | 查询组成员列表 |
| 添加组成员 | /groups/{group_id}/members |
POST | {"member_id":"ou_xxx","member_type":"user"} |
添加用户到组 |
| 移除组成员 | /groups/{group_id}/members/{member_id} |
DELETE | - | 从组移除用户 |
职级管理
| API | 端点 | 方法 | 请求体示例 | 说明 |
|---|---|---|---|---|
| 获取职级列表 | /job_families |
GET | - | 查询所有职级 |
| 获取职级 | /job_families/{job_family_id} |
GET | - | 查询单个职级 |
| 创建职级 | /job_families |
POST | {"name":"高级工程师"} |
创建新职级 |
| 更新职级 | /job_families/{job_family_id} |
PUT | {"name":"资深工程师"} |
修改职级 |
| 删除职级 | /job_families/{job_family_id} |
DELETE | - | 删除职级 |
角色管理
| API | 端点 | 方法 | 请求体示例 | 说明 |
|---|---|---|---|---|
| 获取角色列表 | /roles |
GET | - | 查询所有角色 |
| 创建角色 | /roles |
POST | {"role_name":"管理员"} |
创建新角色 |
| 更新角色 | /roles/{role_id} |
PUT | {"role_name":"超级管理员"} |
修改角色名称 |
| 删除角色 | /roles/{role_id} |
DELETE | - | 删除角色 |
| 获取角色成员 | /roles/{role_id}/members |
GET | - | 查询角色下所有成员 |
| 批量添加角色成员 | /roles/{role_id}/members/batch_create |
POST | {"members":[{"member_id":"ou_xxx","member_type":"user"}]} |
批量添加成员 |
| 批量删除角色成员 | /roles/{role_id}/members/batch_delete |
POST | {"members":[{"member_id":"ou_xxx"}]} |
批量移除成员 |
ID 转换(核心)
飞书三种 ID 体系:
| ID 类型 | 说明 | 使用场景 |
|---|---|---|
open_id |
应用内唯一 | 同一应用内识别用户 |
user_id |
企业内唯一 | 企业内部系统对接 |
union_id |
跨应用唯一 | 同一开发者的多个应用间 |
Contact v3 ID 转换
| API | 端点 | 方法 | 请求体示例 | 说明 |
|---|---|---|---|---|
| 批量获取用户 ID | /users/batch_get_id |
POST | {"emails":["a@b.com"],"mobiles":["138xxx"]} |
通过邮箱/手机获取 OpenID |
| 批量获取部门 ID | /departments/batch_get_id |
POST | {"department_ids":["od_xxx"]} |
部门 ID 转换 |
| 获取用户 | /users/{user_id} |
GET | - | 通过 ID 获取用户信息 |
| 获取用户信息(批量) | /users/batch_get |
GET | - | 参数:user_ids=ou_1,ou_2 |
ID 转换最佳实践:
通过 GET /users/{user_id} 接口可一次性获取用户的所有 ID 类型(open_id/user_id/union_id),无需单独转换。
示例:
GET /contact/v3/users/ou_xxx?user_id_type=open_id
响应包含:
{
"data": {
"user": {
"open_id": "ou_xxx",
"user_id": "7c43cd5f",
"union_id": "on_xxx"
}
}
}
其他
| API | 端点 | 方法 | 说明 |
|---|---|---|---|
| 获取职务列表 | /job_titles |
GET | 查询所有预设职务 |
| 获取职务 | /job_titles/{job_title_id} |
GET | 查询单个职务详情 |
| 获取办公地点 | /places |
GET | 用于人员地理分布分析 |
| 获取人员类型 | /employee_types |
GET | 查询人员类型列表 |
| 获取自定义属性 | /custom_attr_events |
GET | 查询自定义属性变更事件 |
| 获取授权范围 | /scopes |
GET | 查询应用可访问的部门/用户范围 |
| 外部成员访问 | /application/v1/applications/{app_id}/user_usable |
GET | 控制供应商/外包访问权限 |
事件订阅
通讯录支持 17 个变更事件:
| 事件类型 | 说明 |
|---|---|
contact.user.created_v3 |
用户创建 |
contact.user.updated_v3 |
用户信息更新 |
contact.user.deleted_v3 |
用户删除 |
contact.dept.created_v3 |
部门创建 |
contact.dept.updated_v3 |
部门更新 |
contact.dept.deleted_v3 |
部门删除 |
contact.employee_type.created_v3 |
人员类型创建 |
contact.employee_type.updated_v3 |
人员类型更新 |
contact.employee_type.deleted_v3 |
人员类型删除 |
contact.job_family.created_v3 |
职级创建 |
contact.job_family.updated_v3 |
职级更新 |
contact.job_family.deleted_v3 |
职级删除 |
最佳实践
- ID 转换优先用 Spark API(更简洁)
- 缓存常用 ID(减少 API 调用)
- 组织架构变更必须预发测试