Files
PolyHermes/docs/telegram-notification-implementation.md
T
WrBug 777710c2ed feat: 完善 Telegram 推送通知功能
- 推送模板优化:
  - 优先使用账户名称而不是钱包地址
  - 使用市场标题而不是16进制ID
  - 添加可点击的市场链接(支持 slug 和 conditionId)
  - 添加市场方向(outcome)显示
  - 数量和价格从订单详情API获取实际值
  - 失败通知只显示后端返回的msg,不显示完整堆栈

- 多语言支持:
  - 后端推送消息支持多语言(使用前端最后请求的语言)
  - 添加所有 ErrorCode 的多语言资源文件(中文简体、繁体、英文)
  - 通知消息文本全部使用多语言资源

- 功能改进:
  - 从订单详情获取实际的 side、price、size、outcome
  - 支持买入/卖出方向的多语言显示
  - 错误信息优化,只显示后端返回的错误消息
2025-12-05 02:20:46 +08:00

4.2 KiB
Raw Blame History

Telegram 订单通知实现方案

1. 架构设计

1.1 整体架构

订单处理流程
    ↓
订单成功/失败事件
    ↓
TelegramNotificationService (异步发送)
    ↓
Telegram Bot API
    ↓
用户 Telegram 客户端

1.2 核心组件

  1. TelegramNotificationService: 负责发送 Telegram 消息
  2. TelegramConfig: 配置类,读取 Bot Token 和 Chat ID
  3. 订单处理服务集成: 在订单成功/失败时调用通知服务

2. 实现方案

2.1 方案选择

  • 方案 A(推荐): 使用 OkHttp 直接调用 Telegram Bot API

    • 优点:轻量级,无需额外依赖,项目已有 OkHttp
    • 缺点:需要手动处理 API 调用
  • 方案 B: 使用 Telegram Bot Java 库(如 telegrambots

    • 优点:功能完整,支持更多特性
    • 缺点:增加依赖,可能功能过于复杂

推荐使用方案 A,因为:

  1. 项目已有 OkHttp 依赖
  2. 只需要发送消息功能,不需要接收消息
  3. 减少依赖,保持项目轻量

2.2 消息格式设计

订单成功消息

✅ 订单创建成功

📊 订单信息:
• 订单ID: order_123456
• 市场: Market Title
• 方向: BUY
• 价格: 0.50
• 数量: 100 USDC
• 账户: Account 1 (0x1234...5678)

⏰ 时间: 2024-01-01 12:00:00

订单失败消息

❌ 订单创建失败

📊 订单信息:
• 市场: Market Title
• 方向: BUY
• 价格: 0.50
• 数量: 100 USDC
• 账户: Account 1 (0x1234...5678)

⚠️ 错误信息: 余额不足

⏰ 时间: 2024-01-01 12:00:00

2.3 集成点设计

需要在以下位置集成通知功能:

  1. CopyOrderTrackingService.createOrder()

    • 订单创建成功时发送成功通知
    • 订单创建失败时发送失败通知
  2. AccountService.createPositionSellOrder()

    • 卖出订单成功/失败时发送通知
  3. PolymarketClobService.createSignedOrder()

    • 手动订单创建成功/失败时发送通知(可选)

2.4 异步处理

  • 使用 Kotlin Coroutines 异步发送消息
  • 不阻塞订单处理流程
  • 发送失败不影响订单处理结果

3. 配置设计

3.1 配置文件

application.properties 中添加:

# Telegram Bot 配置
telegram.bot.enabled=true
telegram.bot.token=${TELEGRAM_BOT_TOKEN:}
telegram.bot.chat-id=${TELEGRAM_CHAT_ID:}  # 单个用户(兼容旧配置)
telegram.bot.chat-ids=${TELEGRAM_CHAT_IDS:}  # 多个用户,逗号分隔(推荐)
telegram.bot.timeout=5000

配置说明

  • telegram.bot.chat-id: 单个用户 Chat ID(兼容旧配置)
  • telegram.bot.chat-ids: 多个用户 Chat ID,用逗号分隔(如:123456789,987654321
  • 如果同时配置了 chat-idchat-ids,会同时发送给所有用户

3.2 功能开关

  • 支持通过配置开启/关闭通知功能
  • 如果未配置 Token 或 Chat ID,自动禁用通知

4. 错误处理

4.1 发送失败处理

  • 记录错误日志,但不抛出异常
  • 不影响订单处理流程
  • 支持重试机制(可选)

4.2 网络超时

  • 设置合理的超时时间(5秒)
  • 超时后记录日志,不重试

5. 扩展功能(可选)

5.1 消息类型扩展

  • 订单状态变更通知(filled, cancelled
  • 每日统计报告
  • 风险告警通知

5.2 多用户支持

  • 支持多个 Chat ID:配置多个用户接收通知
    • 配置格式:telegram.bot.chat-ids=123456789,987654321,111222333
    • 所有用户都会收到相同的通知
  • 按账户配置不同的通知接收者(高级功能)
    • 在账户表中添加 telegram_chat_id 字段
    • 不同账户的订单通知发送给不同的用户

5.3 消息模板

  • 支持自定义消息模板
  • 支持多语言消息

6. 实现步骤

  1. 创建 TelegramNotificationService

    • 实现发送消息方法
    • 实现消息格式化方法
  2. 创建 TelegramConfig

    • 读取配置
    • 验证配置有效性
  3. 集成到订单处理服务

    • 在订单成功/失败时调用通知服务
    • 异步发送,不阻塞主流程
  4. 添加配置项

    • 在 application.properties 中添加配置
    • 支持环境变量
  5. 测试

    • 单元测试
    • 集成测试
    • 端到端测试