Loading...
Loading...
Send images and screenshots via Feishu (Lark) messaging platform. Use when the user asks to send screenshots, images, or any visual content through Feishu. This skill handles the complete workflow of uploading images to Feishu servers and delivering them to the specified recipient. Works both within OpenClaw (reads config automatically) and as a standalone tool (requires manual credential setup).
npx skill4agent add zrong/skills feishu-imageexport FEISHU_APP_ID="cli_xxxxxxxxxxxxxxxx"
export FEISHU_APP_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".envFEISHU_APP_ID=cli_xxxxxxxxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxim:resourceim:message// Example: User asks to "send me a screenshot"
// The skill will automatically:
// 1. Read OpenClaw config for Feishu credentials
// 2. Upload the screenshot to Feishu
// 3. Send it to the usernode feishu-image.js --image /path/to/screenshot.png --to ou_xxxxxxxxnode feishu-image.js --image chart.png --to ou_xxxxxxxx --text "Q4 Sales Report"node feishu-image.js --image announcement.png --to oc_xxxxxxxx --chatconst { FeishuImage } = require('./scripts/feishu-image.js');
const sender = new FeishuImage({
appId: 'cli_xxxxxxxxxxxxxxxx',
appSecret: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
});
// Send image to a user
await sender.sendImage({
imagePath: '/path/to/screenshot.png',
receiveId: 'ou_xxxxxxxx',
receiveType: 'user'
});
// Send image with text
await sender.sendImage({
imagePath: '/path/to/chart.png',
receiveId: 'ou_xxxxxxxx',
receiveType: 'user',
text: 'Here is the sales report'
});| Option | Short | Description | Required |
|---|---|---|---|
| | Path to the image file | Yes |
| | Recipient's Feishu open_id or chat_id | Yes |
| Optional text message to include | No | |
| | Send to a chat group (default: user) | No |
| | Show help message | No |
# Basic usage
node feishu-image.js -i screenshot.png -t ou_123456
# With message
node feishu-image.js --image chart.png --to ou_123456 --text "Q4 Report"
# To group chat
node feishu-image.js -i announcement.png -t oc_789012 --chatnew FeishuImage(config)config.appIdconfig.appSecretconfig.baseUrlconst sender = new FeishuImage({
appId: process.env.FEISHU_APP_ID,
appSecret: process.env.FEISHU_APP_SECRET
});async sendImage(options)options.imagePathoptions.receiveIdoptions.receiveTypeoptions.textFeishuImageErrortry {
const messageId = await sender.sendImage({
imagePath: '/path/to/screenshot.png',
receiveId: 'ou_xxxxxxxx',
receiveType: 'user',
text: 'Here is the screenshot you requested'
});
console.log('Image sent successfully, message ID:', messageId);
} catch (error) {
console.error('Failed to send image:', error.message);
}FeishuImageError| Error Code | Description | Solution |
|---|---|---|
| FEISHU_APP_ID or FEISHU_APP_SECRET not set | Set environment variables or pass to constructor |
| Authentication with Feishu API failed | Check app_id and app_secret are correct |
| Image file does not exist | Check the image path is correct |
| Image upload to Feishu failed | Check network connection and file size limits |
| Message sending failed | Check recipient ID and permissions |
const { FeishuImage, FeishuImageError } = require('./scripts/feishu-image.js');
try {
await sender.sendImage({ ... });
} catch (error) {
if (error instanceof FeishuImageError) {
switch (error.code) {
case 'MISSING_CREDENTIALS':
console.error('Please set FEISHU_APP_ID and FEISHU_APP_SECRET');
break;
case 'AUTH_FAILED':
console.error('Invalid credentials. Check your app ID and secret.');
break;
case 'FILE_NOT_FOUND':
console.error(`Image file not found: ${error.details.path}`);
break;
default:
console.error(`Error: ${error.message}`);
}
} else {
console.error('Unexpected error:', error);
}
}