Lark Bot — Lark 机器人
v3飞书/Lark 机器人 完整对接方案 - 所有敏感配置从环境变量读取,支持消息收发、知识库操作、Bitable 任务管理
运行时依赖
安装命令
点击复制技能文档
Lark 机器人 完整对接方案
本 技能 提供飞书 机器人 完整对接方案,包含消息收发、知识库操作、Bitable 任务管理。所有配置均从环境变量读取,确保安全。
环境变量配置
在使用本 技能 前,需配置以下环境变量:
变量名 说明 示例 LARK_应用_ID 飞书应用 ID 命令行工具_xxxxxxxx LARK_应用_SECRET 飞书应用密钥 xxxxxxxxxxxxxx LARK_应用_令牌 Bitable 应用 令牌(可选) ${LARK_应用_令牌} LARK_TABLE_ID Bitable Table ID(可选) ${LARK_TABLE_ID} LARK_SPACE_ID Wiki 知识库 ID(可选) 76036636xxxxx LARK_CHAT_ID 群聊 ID(可选) ${LARK_CHAT_ID} 核心功能
- 获取 访问 令牌
应用_ID = os.environ.获取("LARK_应用_ID", "") 应用_SECRET = os.environ.获取("LARK_应用_SECRET", "")
def 获取_tenant_访问_令牌(): url = "https://open.larksuite.com/open-APIs/auth/v3/tenant_访问_令牌/internal" data = json.dumps({ "应用_id": 应用_ID, "应用_secret": 应用_SECRET }).encode() req = urllib.请求.请求( url, data=data, headers={'Content-Type': '应用/json'} ) with urllib.请求.urlopen(req, timeout=10) as resp: 结果 = json.loads(resp.read()) return 结果.获取("tenant_访问_令牌")
令牌 = 获取_tenant_访问_令牌() print(f"令牌: {令牌}")
- 发送消息到群聊
应用_ID = os.environ.获取("LARK_应用_ID", "") 应用_SECRET = os.environ.获取("LARK_应用_SECRET", "") CHAT_ID = os.environ.获取("LARK_CHAT_ID", "")
def 获取_令牌(): url = "https://open.larksuite.com/open-APIs/auth/v3/tenant_访问_令牌/internal" data = json.dumps({"应用_id": 应用_ID, "应用_secret": 应用_SECRET}).encode() req = urllib.请求.请求(url, data=data, headers={'Content-Type': '应用/json'}) return json.loads(urllib.请求.urlopen(req).read())['tenant_访问_令牌']
def 发送_message(text): 令牌 = 获取_令牌() url = "https://open.larksuite.com/open-APIs/im/v1/messages" params = f"?接收_id_type=chat_id" data = { "接收_id": CHAT_ID, "msg_type": "text", "content": json.dumps({"text": text}) } req = urllib.请求.请求( url + params, data=json.dumps(data).encode(), method="POST", headers={ 'Authorization': f'Bearer {令牌}', 'Content-Type': '应用/json' } ) return json.loads(urllib.请求.urlopen(req).read())
# 发送消息 结果 = 发送_message("Hello from Lark 机器人!") print(结果)
- 发送富文本卡片消息
应用_ID = os.environ.获取("LARK_应用_ID", "") 应用_SECRET = os.environ.获取("LARK_应用_SECRET", "") CHAT_ID = os.environ.获取("LARK_CHAT_ID", "")
def 获取_令牌(): url = "https://open.larksuite.com/open-APIs/auth/v3/tenant_访问_令牌/internal" data = json.dumps({"应用_id": 应用_ID, "应用_secret": 应用_SECRET}).encode() req = urllib.请求.请求(url, data=data, headers={'Content-Type': '应用/json'}) return json.loads(urllib.请求.urlopen(req).read())['tenant_访问_令牌']
def 发送_interactive_card(text, button_text, button_url): 令牌 = 获取_令牌() url = "https://open.larksuite.com/open-APIs/im/v1/messages" params = "?接收_id_type=chat_id" card = { "config": {"wide_screen_mode": True}, "header": { "title": {"tag": "plAIn_text", "content": "📢 通知"}, "template": "blue" }, "elements": [ { "tag": "div", "text": {"tag": "plAIn_text", "content": text} }, { "tag": "action", "actions": [ { "tag": "button", "text": {"tag": "plAIn_text", "content": button_text}, "type": "primary", "url": button_url } ] } ] } data = { "接收_id": CHAT_ID, "msg_type": "interactive", "content": json.dumps(card) } req = urllib.请求.请求( url + params, data=json.dumps(data).encode(), method="POST", headers={ 'Authorization': f'Bearer {令牌}', 'Content-Type': '应用/json' } ) return json.loads(urllib.请求.urlopen(req).read())
结果 = 发送_interactive_card("报告已生成", "查看详情", "https://example.com") print(结果)
- 操作 Bitable(任务管理)
应用_ID = os.environ.获取("LARK_应用_ID", "") 应用_SECRET = os.environ.获取("LARK_应用_SECRET", "") 应用_令牌 = os.environ.获取("LARK_应用_令牌", "") TABLE_ID = os.environ.获取("LARK_TABLE_ID", "")
_缓存 = {'令牌': None, 'exp': 0}
def 获取_令牌(): if _缓存['令牌'] and time.time() < _缓存['exp']: return _缓存['令牌'] url = "https://open.larksuite.com/open-APIs/auth/v3/tenant_访问_令牌/internal" data = json.dumps({"应用_id": 应用_ID, "应用_secret": 应用_SECRET}).encode() req = urllib.请求.请求(url, data=data, headers={'Content-Type': '应用/json'}) with urllib.请求.u