Skip to content

pocari834/JK-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JK_bot - 企业微信机器人回调服务(支持按钮)

基于 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.txt

配置

方式一:环境变量(推荐)

export 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

编辑 config.py 文件,填入你的配置信息。

运行

python app.py

服务启动后,默认监听 http://0.0.0.0:5001,回调路径为 /wecom_bot

使用示例

1. 配置企业微信机器人

在企业微信中配置机器人回调地址:

  • 回调 URL: http://your-domain:5001/wecom_bot
  • Token: 与配置中的 WX_BOT_TOKEN 一致
  • AESKey: 与配置中的 WX_BOT_AES_KEY 一致

2. 测试命令

在群聊中发送以下命令:

  • help - 显示帮助信息
  • button按钮 - 发送按钮示例
  • card卡片 - 发送交互式卡片示例

3. 按钮消息示例

发送 button 命令后,机器人会发送一个包含三个按钮的交互式卡片:

  • 确认
  • 取消
  • 查看详情

点击按钮后,机器人会根据按钮的 key 值进行相应的处理。

开发指南

添加新的按钮消息

services/wecom_service.pymsg_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)

API 参考

MessageSender 类

send_button_card(chat_id, title, description, buttons)

发送按钮卡片消息。

参数:

  • chat_id: 会话 ID
  • title: 卡片标题
  • description: 卡片描述
  • buttons: 按钮列表,格式:
    [
        {"text": "按钮文本", "key": "按钮唯一标识", "type": "button"}
    ]

返回:

{
    "success": True/False,
    "message": "结果描述",
    "data": {...}
}

注意事项

  1. 按钮消息类型

    • 优先尝试使用 template_card 类型发送按钮消息
    • 如果不支持,会自动回退到使用 Markdown 链接模拟按钮
    • 按钮点击后会以 attachment 类型的消息回调到服务器
  2. 按钮数量限制:企业微信交互式卡片最多支持 6 个按钮

  3. 按钮 key 唯一性:每个按钮的 key 值应该唯一,用于区分不同的按钮点击事件

  4. 回调处理:按钮点击后会以 attachment 类型的消息回调,需要在 msg_handler 中处理

  5. Webhook Key:主动发送消息需要配置 WX_BOT_KEY(Webhook Key),可以在机器人配置页面获取

  6. 消息发送方式

    • 回调回复:通过返回 RspTextMsgRspMarkdownMsg 对象
    • 主动发送:使用 MessageSender 的方法主动发送消息(需要 Webhook Key)

参考文档

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages