feishu-channel
17
总安装量
2
周安装量
#20241
全站排名
安装命令
npx skills add https://github.com/aaaaqwq/claude-code-skills --skill feishu-channel
Agent 安装分布
replit
2
amp
1
openclaw
1
opencode
1
kimi-cli
1
codex
1
Skill 文档
é£ä¹¦ Channel éæ
å°é£ä¹¦æ¥å ¥ OpenClawï¼å®ç°ååæ¶æ¯ééã
ä¸ feishu-automation çåºå«
| ç¹æ§ | feishu-channel | feishu-automation |
|---|---|---|
| 主è¦ç¨é | æ¶æ¯éééæ | å¹³å°èªå¨åæä½ |
| æ¶æ¯æ¥æ¶ | â Webhook äºä»¶è®¢é | â 䏿¯æ |
| æ¶æ¯åé | â 宿¶å¯¹è¯ | â éç¥æ¨é |
| å¤ç»´è¡¨æ ¼ | â 䏿¶å | â 宿´æ¯æ |
| ææ¡£ç®¡ç | â 䏿¶å | â 宿´æ¯æ |
| éç¨åºæ¯ | AI å¯¹è¯æºå¨äºº | æ°æ®åæ¥ãèªå¨å工使µ |
æ¶ææ¦è¿°
âââââââââââââââ ââââââââââââââââââââ âââââââââââââââ
â é£ä¹¦ç¨æ· â ââ â é£ä¹¦å¼æ¾å¹³å° â ââ â OpenClaw â
â (ç§è/群è) â â (Webhook) â â Gateway â
âââââââââââââââ ââââââââââââââââââââ âââââââââââââââ
â
ââââââââââââââââââââ
â Webhook æå¡ â
â - äºä»¶éªè¯ â
â - æ¶æ¯è§£æ â
â - æ ¼å¼è½¬æ¢ â
ââââââââââââââââââââ
æ ¸å¿ç»ä»¶
1. é£ä¹¦æºå¨äººåºç¨
å¨é£ä¹¦å¼æ¾å¹³å°å建çä¼ä¸èªå»ºåºç¨ï¼è´è´£ï¼
- æ¥æ¶ç¨æ·æ¶æ¯ï¼éè¿äºä»¶è®¢é ï¼
- åéæ¶æ¯ï¼éè¿æ¶æ¯ APIï¼
- 管çæéåå®å ¨
2. Webhook æå¡
æ¥æ¶é£ä¹¦äºä»¶æ¨éï¼è½¬åç» OpenClaw Gatewayã
3. æ¶æ¯åé API
éè¿ lark-mcp å·¥å ·æç´æ¥è°ç¨é£ä¹¦ API åéæ¶æ¯ã
å¿«éå¼å§
åç½®æ¡ä»¶
- é£ä¹¦å¼æ¾å¹³å°è´¦å·
- ä¼ä¸èªå»ºåºç¨ï¼æºå¨äººè½åï¼
- OpenClaw Gateway è¿è¡ä¸
- å ¬ç½å¯è®¿é®ç Webhook URLï¼æä½¿ç¨å ç½ç©¿éï¼
1. å建é£ä¹¦åºç¨
- è®¿é® é£ä¹¦å¼æ¾å¹³å°
- å建ä¼ä¸èªå»ºåºç¨
- æ·»å ãæºå¨äººãè½å
- é ç½®æéï¼è§ä¸æ¹æéå表ï¼
- è·å App ID å App Secret
2. é ç½®äºä»¶è®¢é
- å¨åºç¨ç®¡ç页é¢ï¼è¿å ¥ãäºä»¶è®¢é ã
- é
置请æ±å°åï¼
https://your-domain.com/webhook/feishu - 订é
äºä»¶ï¼
im.message.receive_v1– æ¥æ¶æ¶æ¯im.message.message_read_v1– æ¶æ¯å·²è¯»ï¼å¯éï¼
3. é¨ç½² Webhook æå¡
cd /home/aa/clawd/skills/feishu-channel
npm install
cp .env.example .env
# ç¼è¾ .env å¡«å
¥é
ç½®
npm start
4. åå¸åºç¨
- å¨é£ä¹¦å¼æ¾å¹³å°æäº¤å®¡æ ¸
- å®¡æ ¸éè¿ååå¸
- å¨é£ä¹¦ä¸æç´¢å¹¶æ·»å æºå¨äºº
é 置说æ
ç¯å¢åé (.env)
# é£ä¹¦åºç¨é
ç½® (å¿
é)
FEISHU_APP_ID=cli_xxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxx
# äºä»¶è®¢é
éªè¯ Token
FEISHU_VERIFICATION_TOKEN=xxxxxxxxxxxxxxxx
# äºä»¶å å¯ Key (å¯éï¼æ¨èå¯ç¨)
FEISHU_ENCRYPT_KEY=xxxxxxxxxxxxxxxx
# OpenClaw Gateway é
ç½®
OPENCLAW_GATEWAY_URL=http://127.0.0.1:18789
OPENCLAW_WEBHOOK_SECRET=your_webhook_secret
# å®å
¨é
ç½®
# å
许çç¨æ· open_id (éå·åéï¼ç空å
许ææ)
ALLOWED_USERS=ou_xxx,ou_yyy
# å
许ç群è chat_id (éå·åéï¼ç空å
许ææ)
ALLOWED_GROUPS=oc_xxx,oc_yyy
# 群èè¡ä¸º
REQUIRE_MENTION_IN_GROUP=true
# æå¡ç«¯å£
PORT=3002
# æ¥å¿çº§å«
LOG_LEVEL=info
é£ä¹¦åºç¨æé
| æé | 说æ | å¿ é |
|---|---|---|
im:message |
è·åä¸åéåèãç¾¤ç»æ¶æ¯ | â |
im:message.group_at_msg |
æ¥æ¶ç¾¤èä¸@æºå¨äººæ¶æ¯ | â |
im:message.p2p_msg |
æ¥æ¶ç¨æ·åç»æºå¨äººçåèæ¶æ¯ | â |
im:chat |
è·å群ç»ä¿¡æ¯ | æ¨è |
contact:user.base |
è·åç¨æ·åºæ¬ä¿¡æ¯ | æ¨è |
im:resource |
è·åä¸ä¸ä¼ å¾çææä»¶èµæº | å¯é |
OpenClaw é ç½® (openclaw.json)
{
"channels": {
"feishu": {
"enabled": true,
"appId": "cli_xxxxxxxxxx",
"appSecret": "env:FEISHU_APP_SECRET",
"webhookUrl": "https://your-domain.com/webhook/feishu",
"dmPolicy": "allowlist",
"allowFrom": ["ou_xxx", "ou_yyy"],
"groups": {
"oc_xxx": {
"name": "å·¥ä½ç¾¤",
"requireMention": true
}
}
}
}
}
æ¶æ¯æ ¼å¼
æ¥æ¶æ¶æ¯ (Webhook Event)
é£ä¹¦åå§äºä»¶æ ¼å¼ï¼
{
"schema": "2.0",
"header": {
"event_id": "xxx",
"event_type": "im.message.receive_v1",
"create_time": "1706745600000",
"token": "verification_token",
"app_id": "cli_xxx"
},
"event": {
"sender": {
"sender_id": {
"open_id": "ou_xxx",
"user_id": "xxx",
"union_id": "on_xxx"
},
"sender_type": "user"
},
"message": {
"message_id": "om_xxx",
"root_id": "",
"parent_id": "",
"create_time": "1706745600000",
"chat_id": "oc_xxx",
"chat_type": "group",
"message_type": "text",
"content": "{\"text\":\"@_user_1 ä½ å¥½\"}",
"mentions": [
{
"key": "@_user_1",
"id": {
"open_id": "ou_bot"
},
"name": "OpenClaw婿"
}
]
}
}
}
转æ¢åç OpenClaw æ ¼å¼ï¼
{
"type": "message",
"channel": "feishu",
"messageId": "om_xxx",
"from": {
"id": "ou_xxx",
"name": "å¼ ä¸"
},
"chat": {
"id": "oc_xxx",
"type": "group",
"name": "å·¥ä½ç¾¤"
},
"text": "ä½ å¥½",
"mentions": ["ou_bot"],
"isMentioned": true,
"timestamp": 1706745600000
}
åéæ¶æ¯
ä½¿ç¨ lark-mcp å·¥å ·
// åéææ¬æ¶æ¯
await mcp__lark-mcp_sendMessage({
receive_id: "ou_xxx", // æ oc_xxx (群è)
receive_id_type: "open_id", // æ chat_id
msg_type: "text",
content: JSON.stringify({
text: "æ¶å°ï¼æ£å¨å¤ç..."
})
});
// åéå¯ææ¬æ¶æ¯
await mcp__lark-mcp_sendMessage({
receive_id: "oc_xxx",
receive_id_type: "chat_id",
msg_type: "post",
content: JSON.stringify({
zh_cn: {
title: "ä»»å¡å®æ",
content: [
[
{ tag: "text", text: "已宿 " },
{ tag: "a", text: "æ¥ç详æ
", href: "https://example.com" }
]
]
}
})
});
// åéå¡çæ¶æ¯
await mcp__lark-mcp_sendMessage({
receive_id: "oc_xxx",
receive_id_type: "chat_id",
msg_type: "interactive",
content: JSON.stringify({
config: { wide_screen_mode: true },
header: {
template: "turquoise",
title: { content: "éç¥", tag: "plain_text" }
},
elements: [
{
tag: "div",
text: { content: "**éè¦éç¥**", tag: "lark_md" }
},
{
tag: "action",
actions: [
{
tag: "button",
text: { content: "确认", tag: "plain_text" },
type: "primary"
}
]
}
]
})
});
ä½¿ç¨ HTTP API
# åéææ¬æ¶æ¯
curl -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"receive_id": "ou_xxx",
"msg_type": "text",
"content": "{\"text\":\"Hello!\"}"
}'
å®å ¨çç¥
äºä»¶éªè¯
é£ä¹¦äºä»¶è®¢é æ¯æä¸¤ç§éªè¯æ¹å¼ï¼
- Verification Token: ç®åç Token éªè¯
- Encrypt Key: AES å å¯ï¼æ¨èï¼
// éªè¯ç¤ºä¾
function verifyEvent(body, token) {
if (body.token !== token) {
throw new Error('Invalid verification token');
}
}
// è§£å¯ç¤ºä¾
function decryptEvent(encrypt, key) {
const crypto = require('crypto');
const decipher = crypto.createDecipheriv(
'aes-256-cbc',
crypto.createHash('sha256').update(key).digest(),
Buffer.alloc(16, 0)
);
return JSON.parse(
decipher.update(encrypt, 'base64', 'utf8') + decipher.final('utf8')
);
}
ç§èçç¥
| çç¥ | 说æ |
|---|---|
open |
å 许ææäººç§èï¼å±é©ï¼ |
allowlist |
ä» å 许 allowFrom å表ä¸çç¨æ· |
群èçç¥
| é ç½® | 说æ |
|---|---|
requireMention: true |
å¿ é¡»@æºå¨äººæååº |
allowFrom |
群å å 许触åçç¨æ·å表 |
使ç¨åºæ¯
1. æºè½é®çæºå¨äºº
ç¨æ·: @OpenClaw婿 å¸®ææ¥ä¸ä¸ä»å¤©çä¼è®®å®æ
Bot: ä»å¤©çä¼è®®å®æï¼
- 10:00 产åè¯å®¡ä¼ (ä¼è®®å®¤A)
- 14:00 ææ¯åäº«ä¼ (线ä¸)
- 16:00 å¨ä¾ä¼ (ä¼è®®å®¤B)
2. 工使µéç¥
// å½ä»»å¡å®ææ¶åééç¥
await mcp__lark-mcp_sendMessage({
receive_id: "oc_work_group",
receive_id_type: "chat_id",
msg_type: "interactive",
content: JSON.stringify({
header: {
template: "green",
title: { content: "â
ä»»å¡å®æ", tag: "plain_text" }
},
elements: [
{
tag: "div",
text: { content: "æ°æ®åæ¥ä»»å¡å·²å®æ\nå¤çè®°å½: 1,234 æ¡", tag: "lark_md" }
}
]
})
});
3. å®¡æ¹æµç¨
ç¨æ·: @OpenClaw婿 æäº¤è¯·åç³è¯·ï¼æå¤©ä¼æ¯ä¸å¤©
Bot: å·²æ¶å°è¯·åç³è¯·ï¼æ£å¨æäº¤å®¡æ¹...
[å¡çæ¶æ¯: 请åç³è¯·è¯¦æ
+ å®¡æ¹æé®]
æ éææ¥
Webhook æ æ³æ¥æ¶æ¶æ¯
- æ£æ¥ Webhook URL æ¯å¦å ¬ç½å¯è®¿é®
- æ£æ¥ Verification Token æ¯å¦æ£ç¡®
- æ¥çé£ä¹¦å¼æ¾å¹³å°çäºä»¶æ¨éæ¥å¿
- 确认åºç¨å·²åå¸ä¸ç¨æ·å·²æ·»å æºå¨äºº
æ¶æ¯åé失败
- æ£æ¥ App ID å App Secret
- 确认åºç¨æéå·²å¼å¯
- æ£æ¥ access_token æ¯å¦è¿æ
- æ¥ç API è¿åçé误ç
æéä¸è¶³
- å¨é£ä¹¦å¼æ¾å¹³å°æ£æ¥åºç¨æé
- 确认æéå·²å®¡æ ¸éè¿
- éæ°è·å access_token
éå¶è¯´æ
é£ä¹¦å¹³å°éå¶
- API è°ç¨é¢çéå¶ï¼åè宿¹ææ¡£ï¼
- æ¶æ¯é¿åº¦éå¶
- æä»¶å¤§å°éå¶
åè½éå¶
- 䏿¯æè¯é³æ¶æ¯
- å¡çæ¶æ¯äº¤äºéè¦é¢å¤é ç½®åè°
- é¨åé«çº§åè½éè¦ä¼ä¸è®¤è¯
ç¸å ³æä»¶
scripts/feishu-webhook.js– Webhook æå¡ä»£ç .env.example– ç¯å¢å鿍¡æ¿references/feishu-api.md– é£ä¹¦ API åèreferences/message-types.md– æ¶æ¯ç±»å说æ
TODO
- å建é£ä¹¦åºç¨å¹¶è·ååè¯
- é ç½®äºä»¶è®¢é
- é¨ç½² Webhook æå¡
- æµè¯ç§èæ¶æ¯æ¶å
- æµè¯ç¾¤è @æå
- é ç½®å®å ¨çç¥
- å®ç°å¡çæ¶æ¯äº¤äº