💡 Summary
Webhook Push provides a unified interface for sending notifications to WeCom, DingTalk, and Feishu platforms.
🎯 Target Audience
🤖 AI Roast: “This skill is like a Swiss Army knife for notifications, but without the corkscrew.”
The skill requires network access to send messages, which poses risks of unauthorized access if webhook URLs are exposed. Implementing secure storage for sensitive tokens and using signature verification can mitigate these risks.
name: webhook-push description: "Unified webhook messaging for WeCom, DingTalk, and Feishu platforms. Send notifications to enterprise communication platforms with a single interface." license: MIT compatibility: "Requires Python 3.9+ and network access to target platforms" metadata: skill-author: Webhook Push Team
Webhook Push Skill
Overview
This skill provides a unified interface for sending webhook notifications to three major Chinese enterprise communication platforms:
- WeCom (企业微信) - Enterprise WeChat by Tencent
- DingTalk (钉钉) - Enterprise communication platform by Alibaba
- Feishu (飞书) - Collaboration platform by ByteDance
When to Use This Skill
Use this skill when you need to:
- Send notifications to enterprise chat groups
- Integrate monitoring alerts into enterprise platforms
- Automate notifications for CI/CD pipelines
- Build incident management workflows
- Send reports and updates to team channels
- Create multi-platform notification systems
Core Capabilities
1. Unified Message Model
Send messages using a single, platform-agnostic interface:
from webhook_push import UnifiedMessage, MessageSender message = UnifiedMessage( content={ "type": "text", "body": {"text": "Deployment completed successfully!"} } ) sender = MessageSender() result = await sender.send(message, "dingtalk", webhook_url="https://oapi.dingtalk.com/robot/send?access_token=xxx")
2. Rich Message Types
Support for various message types:
- Text - Simple text messages with @mentions
- Markdown - Rich formatted messages
- Image - Send images (WeCom, Feishu)
- Link - Link cards (DingTalk)
- Card - Interactive cards with buttons
- File - File attachments (WeCom, Feishu)
- Feed - Multiple link cards (DingTalk)
3. Automatic Platform Conversion
Messages are automatically converted to platform-specific formats:
# Same message works across platforms message = UnifiedMessage( content={ "type": "markdown", "title": "Daily Report", "body": { "content": "# Daily Stats\n- Users: 128\n- Revenue: $5,000" } } ) # Send to all platforms automatically result = await sender.send_auto(message)
4. Graceful Degradation
Unsupported features are automatically downgraded:
- Cards → Markdown with links
- Markdown → Plain text
- Rich features → Simple alternatives
5. Retry Mechanism
Built-in exponential backoff retry logic handles transient failures.
Message Types
Text Message
message = UnifiedMessage( content={ "type": "text", "body": {"text": "Hello, team!"}, "mentions": [ {"type": "mobile", "value": "13800000000", "display_name": "Zhang San"} ] } )
Markdown Message
message = UnifiedMessage( content={ "type": "markdown", "title": "Deployment Report", "body": { "content": """# Deployment Complete ## Status: ✅ Success - Version: v1.2.3 - Environment: Production - Deployed by: @zhangsan [View Logs](https://example.com/logs)""" } } )
Card Message
Card messages provide interactive elements with buttons and rich content. Each platform has its own card format:
WeCom Template Card (text_notice)
from webhook_push import UnifiedMessage, MessageContent message = UnifiedMessage( content=MessageContent( type="card", body={ "card_type": "text_notice", "title": "系统告警", "description": "CPU使用率超过阈值", "emphasis": { "title": "95%", "desc": "当前CPU使用率" }, "horizontal_content_list": [ {"keyname": "服务器", "value": "web-01"}, {"keyname": "阈值", "value": "80%"} ], "jump_list": [ {"type": 1, "url": "https://example.com/alerts", "title": "查看详情"} ], "action": {"type": 1, "url": "https://example.com/alerts"} } ) ) result = await sender.send(message, "wecom")
WeCom News (Article Card)
message = UnifiedMessage( content={ "type": "news", "body": { "links": [ { "title": "技术分享: Webhook 最佳实践", "description": "了解如何设计可靠的 webhook 系统", "url": "https://example.com/article", "image_url": "https://example.com/cover.jpg" } ] } } ) result = await sender.send(message, "wecom")
DingTalk Action Card (single button)
from webhook_push import UnifiedMessage, MessageContent message = UnifiedMessage( content=MessageContent( type="card", body={ "card_type": "single", "config": {"hide_avatar": "0"}, "title": "审批请求", "elements": [{"type": "div", "text": "您有一个新的审批请求待处理"}], "actions": [ {"text": "立即审批", "url": "https://example.com/approve", "style": "positive"} ] } ) ) result = await sender.send(message, "dingtalk")
DingTalk Action Card (multiple buttons)
message = UnifiedMessage( content=MessageContent( type="card", body={ "card_type": "multi", "config": {"hide_avatar": "0", "btn_orientation": "1"}, "title": "满意度调查", "elements": [{"type": "div", "text": "请对本次服务进行评价"}], "actions": [ {"text": "非常满意", "url": "https://example.com/survey/1", "style": "positive"}, {"text": "满意", "url": "https://example.com/survey/2", "style": "default"}, {"text": "不满意", "url": "https://example.com/survey/3", "style": "default"} ] } ) ) result = await sender.send(message, "dingtalk")
Feishu Interactive Card
message = UnifiedMessage( content={ "type": "card", "body": { "config": { "wide_screen_mode": True, "enable_forward": True }, "elements": [ { "tag": "div", "text": {"tag": "lark_md", "content": "**审批提醒**\n您有一个新的待审批事项"} } ], "actions": [ { "tag": "button", "text": {"tag": "plain_text", "content": "立即审批"}, "url": "https://example.com/approve", "type": "primary" } ] } } ) result = await sender.send(message, "feishu")
Image Message
message = UnifiedMessage( content={ "type": "image", "body": { "url": "https://example.com/screenshot.png", "alt": "System dashboard screenshot" } } )
Usage Patterns
Basic Pattern
from webhook_push import MessageSender, UnifiedMessage # Create message message = UnifiedMessage( content={ "type": "text", "body": {"text": "Your notification message"} } ) # Send to specific platform sender = MessageSender() result = await sender.send( message, "dingtalk", webhook_url="https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN" ) if result.success: print("Sent!") else: print(f"Failed: {result.error}")
Multi-Platform
# Send to multiple platforms result = await sender.send_multi( message, platforms=["wecom", "dingtalk", "feishu"], webhook_urls={ "wecom": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX", "dingtalk": "https://oapi.dingtalk.com/robot/send?access_token=YYY", "feishu": "https://open.feishu.cn/open-apis/bot/v2/hook/ZZZ" } ) print(f"Success: {result.success_count}, Failed: {result.failed_count}")
Automatic Selection
# Send to all configured platforms result = await sender.send_auto(message) print(f"Sent to: {result.sent_platforms}") print(f"Skipped: {result.skipped_platforms}")
Platform Configuration
Enterprise WeChat
# Via webhook URL webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY" message = UnifiedMessage(content={"type": "text", "body": {"text": "Hello WeCom!"}}) await sender.send(message, "wecom", webhook_url)
Message Types: text, markdown, markdown_v2, image, news, file, voice, template_card
DingTalk
# Via webhook URL webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN" message = UnifiedMessage(content={"type": "markdown", "body": {"content": "Hello DingTalk!"}}) await sender.send(message, "dingtalk", webhook_url)
Message Types: text, markdown, link, actionCard, feedCard
Note: Supports signature verification for security
Feishu
# Via webhook URL webhook_url = "https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_ID" # With signature verification (recommended) from webhook_push import FeishuAdapter adapter = FeishuAdapter( webhook_id="YOUR_ID", secret="YOUR_SECRET" # Enable signature verification ) message = UnifiedMessage(content={"type": "text", "body": {"text": "Hello Feishu!"}}) await sender.send(message, "feishu", webhook_url)
Message Types: text, post, image, file, card, audio
Note: Supports HMAC-SHA256 signature verification for enhanced security (recommended)
Environment Variables
# Optional: Configure default platforms WECOM_WEBHOOK_KEY=your-key DINGTALK_ACCESS_TOKEN=your-token DINGTALK_SECRET=your-secret FEISHU_WEBHOOK_ID=your-id FEISHU_SECRET=your-secret # Optional, for signature verification
CLI Usage
# Send a text message webhook-push send dingtalk "https://oapi.dingtalk.com/robot/send?access_token=xxx" \ --content "Hello from CLI
Pros
- Unified interface for multiple platforms
- Supports various message types
- Automatic platform-specific message conversion
- Built-in retry mechanism for reliability
Cons
- Limited to specific Chinese platforms
- Requires network access for functionality
- Dependency on external webhook URLs
- Complexity may increase with more platforms
Related Skills
omni-dev-fusion
A“Powerful, but the setup might scare off the impatient.”
source-of-truth-monorepo
A“Powerful, but the setup might scare off the impatient.”
claude-code-workflow
A“It's like a Swiss Army knife, but for coding—just don't expect it to fix your coffee machine.”
Disclaimer: This content is sourced from GitHub open source projects for display and rating purposes only.
Copyright belongs to the original author fanchou.
