消息投递服务是wxauto_Mgt项目的一个核心组件,负责从消息监听服务获取未处理的消息,并将其投递到指定的服务平台(如Dify或OpenAI API),然后将服务平台的回复发送回微信联系人。
- 消息获取:从数据库获取未处理的消息
- 消息合并:支持将同一聊天对象的多条消息合并为一条投递
- 规则匹配:根据投递规则确定消息应该投递到哪个服务平台
- 消息投递:将消息投递到相应的服务平台并获取回复
- 回复发送:将回复通过WxAuto HTTP API发送回微信联系人
- 状态管理:管理消息的投递状态和回复状态
- Dify:支持Dify平台的消息处理
- OpenAI API:支持OpenAI API的消息处理
wxauto_mgt/core/message_delivery_service.py- 消息投递服务的主类wxauto_mgt/core/service_platform.py- 服务平台接口和实现wxauto_mgt/core/service_platform_manager.py- 服务平台管理器和投递规则管理器wxauto_mgt/ui/components/platform_panel.py- 服务平台管理面板wxauto_mgt/ui/components/rule_panel.py- 投递规则管理面板
pip install aiohttp执行 docs/message_delivery_service_schema.sql 中的SQL语句,创建必要的数据库表和字段。
按照 docs/message_delivery_service_integration_guide.md 中的说明,将消息投递服务集成到项目中。
使用UI界面或API添加服务平台:
# 添加Dify平台
platform_id = await platform_manager.register_platform(
"dify",
"Dify平台",
{
"api_base": "https://api.dify.ai/v1",
"api_key": "your_dify_api_key"
}
)
# 添加OpenAI平台
platform_id = await platform_manager.register_platform(
"openai",
"OpenAI平台",
{
"api_key": "your_openai_api_key",
"model": "gpt-3.5-turbo"
}
)使用UI界面或API添加投递规则:
# 添加投递规则
rule_id = await rule_manager.add_rule(
name="默认规则",
instance_id="*", # 所有实例
chat_pattern="*", # 所有聊天对象
platform_id=platform_id,
priority=0
)# 初始化消息投递服务
await message_delivery_service.initialize()
# 启动消息投递服务
await message_delivery_service.start()poll_interval- 轮询间隔(秒)batch_size- 每次处理的消息数量merge_messages- 是否合并消息merge_window- 消息合并时间窗口(秒)
api_base- API基础URLapi_key- API密钥conversation_id- 会话ID(可选)user_id- 用户ID(可选)
api_base- API基础URLapi_key- API密钥model- 模型名称temperature- 温度参数system_prompt- 系统提示词max_tokens- 最大生成令牌数
name- 规则名称instance_id- 实例ID,可以是具体的实例ID或者*表示所有实例chat_pattern- 聊天对象匹配模式- 精确匹配:直接填写聊天对象名称
- 通配符匹配:使用
*表示匹配所有聊天对象 - 正则表达式匹配:使用
regex:前缀,例如regex:^群聊.*
platform_id- 服务平台IDpriority- 规则优先级,数字越大优先级越高
# 初始化和启动服务
await message_delivery_service.initialize()
await message_delivery_service.start()
# 手动处理消息
message = {
"message_id": "test_message_id",
"instance_id": "test_instance",
"chat_name": "测试聊天",
"content": "你好,这是一条测试消息",
"sender": "测试用户",
"create_time": int(time.time())
}
await message_delivery_service.process_message(message)
# 停止服务
await message_delivery_service.stop()# 注册平台
platform_id = await platform_manager.register_platform(
"openai",
"OpenAI平台",
{
"api_key": "your_openai_api_key",
"model": "gpt-3.5-turbo"
}
)
# 获取平台
platform = await platform_manager.get_platform(platform_id)
# 更新平台
await platform_manager.update_platform(
platform_id,
"OpenAI平台(更新)",
{
"api_key": "your_new_openai_api_key",
"model": "gpt-4"
}
)
# 删除平台
await platform_manager.delete_platform(platform_id)# 添加规则
rule_id = await rule_manager.add_rule(
name="测试规则",
instance_id="test_instance",
chat_pattern="测试聊天",
platform_id=platform_id,
priority=10
)
# 获取规则
rule = await rule_manager.get_rule(rule_id)
# 更新规则
await rule_manager.update_rule(
rule_id,
"测试规则(更新)",
"test_instance",
"测试聊天",
platform_id,
20
)
# 删除规则
await rule_manager.delete_rule(rule_id)使用 docs/test_message_delivery.py 脚本测试消息投递服务的功能:
python docs/test_message_delivery.py- 在
wxauto_mgt/core/service_platform.py中创建新的服务平台类,继承自ServicePlatform基类 - 实现必要的方法:
initialize、process_message、test_connection和get_type - 在
create_platform函数中添加对新平台类型的支持
可以通过以下方式增强消息处理功能:
- 添加消息过滤功能
- 添加消息转换功能
- 添加消息历史记录功能
- 添加多轮对话功能
如果消息投递失败,可能有以下原因:
- 服务平台配置错误,例如API密钥不正确
- 网络连接问题
- 服务平台API限制或错误
如果消息回复失败,可能有以下原因:
- 微信API客户端连接问题
- 微信实例不在线
- 聊天对象不存在或无法发送消息
如果规则匹配不正确,可以检查以下方面:
- 规则优先级设置是否合理
- 聊天对象匹配模式是否正确
- 实例ID是否匹配
详细的集成指南和API文档,请参考:
docs/message_delivery_service_integration_guide.md- 集成指南docs/message_delivery_service_plan.md- 设计文档docs/message_delivery_service_schema.sql- 数据库表结构