飞书企业自建应用消息
企业自建应用适合面向指定用户或群聊发送消息,需要管理员控制应用权限与可用范围。本文依据飞书开放平台资料整理,核验日期为 2026-09-08;未执行真实租户发送验证。
- 具备创建企业自建应用和发布版本的权限。
- 明确接收标识类型,例如
open_id、user_id或chat_id。 - 应用已申请发送消息所需权限,并覆盖目标用户。
- 在飞书开发者后台创建企业自建应用,记录 App ID。
- 申请消息发送权限,配置应用可用范围。
- 创建并发布应用版本,使权限变更生效。
- 将 App Secret 存入服务器端密钥管理。
- 使用 App ID 与 App Secret 获取
tenant_access_token,再调用消息发送接口。
| 字段 | 必需 | 说明 |
|---|---|---|
APP_ID | 是 | 企业自建应用标识 |
APP_SECRET | 是 | 获取租户访问令牌的敏感凭据 |
TENANT_ACCESS_TOKEN | 是 | 有有效期,发送端应缓存并提前刷新 |
RECEIVE_ID | 是 | 接收用户或群聊标识,必须与查询参数类型一致 |
JavaScript 示例需要 Node.js 20 或更新版本;Python 示例需要安装 requests。
先获取访问令牌,再发送文本消息:
curl -X POST 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal' \ -H 'Content-Type: application/json' \ -d '{"app_id":"APP_ID","app_secret":"APP_SECRET"}'
curl -X POST 'https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id' \ -H 'Authorization: Bearer TENANT_ACCESS_TOKEN' \ -H 'Content-Type: application/json' \ -d '{"receive_id":"OPEN_ID","msg_type":"text","content":"{\"text\":\"通知渠道连通性测试\"}"}'const tokenResponse = await fetch( 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ app_id: process.env.APP_ID, app_secret: process.env.APP_SECRET, }), },);const tokenResult = await tokenResponse.json();if (!tokenResponse.ok || tokenResult.code !== 0) throw new Error(JSON.stringify(tokenResult));
const response = await fetch( 'https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id', { method: 'POST', headers: { Authorization: `Bearer ${tokenResult.tenant_access_token}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ receive_id: process.env.OPEN_ID, msg_type: 'text', content: JSON.stringify({ text: '通知渠道连通性测试' }), }), },);console.log(await response.json());import osimport requests
token_response = requests.post( "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal", json={"app_id": os.environ["APP_ID"], "app_secret": os.environ["APP_SECRET"]}, timeout=15,)token_response.raise_for_status()token_result = token_response.json()if token_result.get("code") != 0: raise RuntimeError(token_result)
response = requests.post( "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id", headers={"Authorization": f"Bearer {token_result['tenant_access_token']}"}, json={ "receive_id": os.environ["OPEN_ID"], "msg_type": "text", "content": '{"text":"通知渠道连通性测试"}', }, timeout=15,)response.raise_for_status()print(response.json())检查 HTTP 状态、飞书业务码和返回的消息标识,并由目标用户确认收到消息。若使用 chat_id,还需确认应用机器人已经具备向该群发送消息的条件。
- App Secret 不能发送到前端;访问令牌只在服务器端缓存。
- 只申请发送消息需要的权限,并限制应用可用范围。
- 不在日志中记录完整 Token、Secret 或消息中的敏感业务数据。
权限不足:检查权限是否已申请、版本是否已发布、管理员是否已授权。
接收人无效:确认 receive_id_type 与 RECEIVE_ID 的实际类型一致。
访问令牌失效:按返回的有效期缓存和刷新,不要永久保存单次令牌。