基于 wecom-bot-svr 框架开发的企业微信机器人回调服务,支持按钮(交互式卡片)功能。
JK_bot/
├── app.py # Flask 入口
├── config.py # 配置文件
├── services/
│ ├── __init__.py
│ ├── access_token.py # 获取 access_token(可选)
│ ├── message_sender.py # 发送消息(文本/markdown/按钮)
│ └── wecom_service.py # 业务逻辑
├── utils/
│ └── xml_parser.py # XML 解析工具
├── requirements.txt # 依赖列表
└── README.md # 说明文档
- ✅ 支持文本消息
- ✅ 支持 Markdown 消息
- ✅ 支持按钮(交互式卡片)消息
- ✅ 支持按钮点击回调处理
- ✅ 支持文件发送
- ✅ 支持事件处理(如加入群聊)
pip install -r requirements.txtexport WX_BOT_TOKEN="your_token"
export WX_BOT_AES_KEY="your_aes_key"
export WX_BOT_CORP_ID="your_corp_id"
export WX_BOT_KEY="your_bot_key" # Webhook key
export BOT_NAME="JK_bot"
export HOST="0.0.0.0"
export PORT="5001"编辑 config.py 文件,填入你的配置信息。
python app.py服务启动后,默认监听 http://0.0.0.0:5001,回调路径为 /wecom_bot。
在企业微信中配置机器人回调地址:
- 回调 URL:
http://your-domain:5001/wecom_bot - Token: 与配置中的
WX_BOT_TOKEN一致 - AESKey: 与配置中的
WX_BOT_AES_KEY一致
在群聊中发送以下命令:
help- 显示帮助信息button或按钮- 发送按钮示例card或卡片- 发送交互式卡片示例
发送 button 命令后,机器人会发送一个包含三个按钮的交互式卡片:
- 确认
- 取消
- 查看详情
点击按钮后,机器人会根据按钮的 key 值进行相应的处理。
在 services/wecom_service.py 的 msg_handler 函数中添加新的处理逻辑:
# 发送按钮消息
buttons = [
{"text": "按钮1", "key": "btn1", "type": "button"},
{"text": "按钮2", "key": "btn2", "type": "button"}
]
sender.send_button_card(
chat_id=req_msg.chat_id,
title="标题",
description="描述",
buttons=buttons
)在 msg_handler 函数中处理 attachment 类型的消息(按钮点击回调):
if req_msg.msg_type == 'attachment':
actions = req_msg.actions
if actions:
action_key = actions[0].value
# 根据 action_key 处理不同的操作
if action_key == "btn1":
# 处理按钮1的点击
pass使用 MessageSender 类的方法:
from services.message_sender import get_message_sender
sender = get_message_sender()
# 发送文本消息
sender.send_text(chat_id, "消息内容")
# 发送 Markdown 消息
sender.send_markdown(chat_id, "**Markdown** 内容")
# 发送文件
media_id = sender.upload_file("path/to/file.txt")
sender.send_file(chat_id, media_id)发送按钮卡片消息。
参数:
chat_id: 会话 IDtitle: 卡片标题description: 卡片描述buttons: 按钮列表,格式:[ {"text": "按钮文本", "key": "按钮唯一标识", "type": "button"} ]
返回:
{
"success": True/False,
"message": "结果描述",
"data": {...}
}-
按钮消息类型:
- 优先尝试使用
template_card类型发送按钮消息 - 如果不支持,会自动回退到使用 Markdown 链接模拟按钮
- 按钮点击后会以
attachment类型的消息回调到服务器
- 优先尝试使用
-
按钮数量限制:企业微信交互式卡片最多支持 6 个按钮
-
按钮 key 唯一性:每个按钮的 key 值应该唯一,用于区分不同的按钮点击事件
-
回调处理:按钮点击后会以
attachment类型的消息回调,需要在msg_handler中处理 -
Webhook Key:主动发送消息需要配置
WX_BOT_KEY(Webhook Key),可以在机器人配置页面获取 -
消息发送方式:
- 回调回复:通过返回
RspTextMsg或RspMarkdownMsg对象 - 主动发送:使用
MessageSender的方法主动发送消息(需要 Webhook Key)
- 回调回复:通过返回
MIT