Files
aiaa-notification-server/docs/httpie/curls.md
T
ryan f7ea2e7cf9 feat(crypto策略): 支持巴菲特策略纯 rawMessage 信号推送
Motivation:
新增巴菲特激进/稳健策略(PUTEJJ/PUTEWJ)的跟单推送能力。该类信号仅有 rawMessage、无 action 字段,需按原文直接推送,并过滤启动文案、本地化时间字段。

Changes:

* 支持无 action 的纯 rawMessage 信号,映射为 trade.message 事件
* 新增 not_contains 条件操作符,用于过滤启动文案
* 新增 replace 模板函数,将 Time: 替换为推送时间:
* 补充巴菲特策略模板、规则与渠道配置文档
2026-08-17 16:38:09 +08:00

22 KiB
Raw Blame History

HTTPie 可导入 cURL 集合

推荐: 直接导入 Postman 集合(一次导入全部)

docs/httpie/postman_collection.json

HTTPie → Import → Postman → 选择该文件。

单条导入: Import → cURL → 粘贴下方某一条完整 curl

替换占位符:

占位符 说明
http://localhost:8080 服务地址
admin-sk-change-me config.yamlserver.admin_key
SOURCE_API_KEY 创建 Source 返回的 api_key
:id / 1 资源数字 ID

Health

健康检查

curl -X GET 'http://localhost:8080/health'

Notify

发送通知(JSON

curl -X POST 'http://localhost:8080/api/v1/notify' \
  -H 'Authorization: Bearer SOURCE_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "event": "trade.open",
    "data": {
      "symbol": "BTC",
      "price": 65000
    }
  }'

发送通知(Regex

curl -X POST 'http://localhost:8080/api/v1/notify' \
  -H 'Authorization: Bearer SOURCE_API_KEY' \
  -H 'Content-Type: text/plain' \
  --data-binary 'trade.open BTC 开仓 价格:65000'

发送通知(Textevent=default

curl -X POST 'http://localhost:8080/api/v1/notify' \
  -H 'Authorization: Bearer SOURCE_API_KEY' \
  -H 'Content-Type: text/plain' \
  --data-binary 'BTC 突破 68000,请注意风险'

Sources

创建 SourceJSON

curl -X POST 'http://localhost:8080/api/v1/sources' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "trading-system",
    "parse_mode": "json",
    "status": 1
  }'

创建 SourceRegex

curl -X POST 'http://localhost:8080/api/v1/sources' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "legacy-monitor",
    "parse_mode": "regex",
    "parse_pattern": "(?P<event>\\w+)\\s+(?P<message>.+)"
  }'

创建 SourceText

curl -X POST 'http://localhost:8080/api/v1/sources' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "alert-bot",
    "parse_mode": "text"
  }'

列出 Source

curl -X GET 'http://localhost:8080/api/v1/sources?page=1&page_size=20' \
  -H 'Authorization: Bearer admin-sk-change-me'

获取 Source

curl -X GET 'http://localhost:8080/api/v1/sources/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

更新 Source

curl -X PUT 'http://localhost:8080/api/v1/sources/1' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "trading-system",
    "parse_mode": "json",
    "status": 1
  }'

删除 Source

curl -X DELETE 'http://localhost:8080/api/v1/sources/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

Templates

创建 Template

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "trade_open",
    "content": "### {{.symbol}} 开仓\n价格: {{.price}}"
  }'

列出 Template

curl -X GET 'http://localhost:8080/api/v1/templates?page=1&page_size=20' \
  -H 'Authorization: Bearer admin-sk-change-me'

获取 Template

curl -X GET 'http://localhost:8080/api/v1/templates/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

更新 Template

curl -X PUT 'http://localhost:8080/api/v1/templates/1' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "trade_open",
    "content": "### {{.symbol}} 开仓\n价格: {{.price}}"
  }'

删除 Template

curl -X DELETE 'http://localhost:8080/api/v1/templates/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

Channels

创建 ChannelEmail

curl -X POST 'http://localhost:8080/api/v1/channels' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "email-ops",
    "type": "email",
    "config": {
      "to": ["148516886@qq.com"]
    },
    "status": 1
  }'

创建 Channel(钉钉)

curl -X POST 'http://localhost:8080/api/v1/channels' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "dingtalk-prod",
    "type": "dingtalk",
    "config": {
      "webhook_url": "https://oapi.dingtalk.com/robot/send?access_token=xxx",
      "secret": "SEC..."
    },
    "status": 1
  }'

创建 Channel(企业微信)

curl -X POST 'http://localhost:8080/api/v1/channels' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "wecom-ops",
    "type": "wecom",
    "config": {
      "webhook_url": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx"
    },
    "status": 1
  }'

创建 ChannelBark

curl -X POST 'http://localhost:8080/api/v1/channels' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "bark-phone",
    "type": "bark",
    "config": {
      "url": "https://api.day.app/<device_key>"
    },
    "status": 1
  }'

创建 ChannelSafeW

curl -X POST 'http://localhost:8080/api/v1/channels' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "safew-ops",
    "type": "safew",
    "config": {
      "token": "<bot token>",
      "chat_id": "123456789"
    },
    "status": 1
  }'

列出 SafeW 群(创建渠道时)

curl -X POST 'http://localhost:8080/api/v1/channels/safew/chats' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{"token":"<bot token>","q":"测试AI"}'

列出 SafeW 群(已有渠道)

curl -X GET 'http://localhost:8080/api/v1/channels/1/chats?q=' \
  -H 'Authorization: Bearer admin-sk-change-me'

列出 Channel

curl -X GET 'http://localhost:8080/api/v1/channels?page=1&page_size=20' \
  -H 'Authorization: Bearer admin-sk-change-me'

获取 Channel

curl -X GET 'http://localhost:8080/api/v1/channels/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

更新 Channel

curl -X PUT 'http://localhost:8080/api/v1/channels/1' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "email-ops",
    "type": "email",
    "config": {
      "to": ["148516886@qq.com"]
    },
    "status": 1
  }'

删除 Channel

curl -X DELETE 'http://localhost:8080/api/v1/channels/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

Rules

创建 Rule

curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "trade-open-alert",
    "source_name": "trading-system",
    "event": "trade.open",
    "template_name": "trade_open",
    "channels": ["email-ops"],
    "conditions": [
      {"field": "symbol", "op": "exists"},
      {"field": "price", "op": "gt", "value": "0"}
    ],
    "enabled": 1
  }'

列出 Rule

curl -X GET 'http://localhost:8080/api/v1/rules?page=1&page_size=20' \
  -H 'Authorization: Bearer admin-sk-change-me'

获取 Rule

curl -X GET 'http://localhost:8080/api/v1/rules/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

更新 Rule

curl -X PUT 'http://localhost:8080/api/v1/rules/1' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "trade-open-alert",
    "source_name": "trading-system",
    "event": "trade.open",
    "template_name": "trade_open",
    "channels": ["email-ops"],
    "enabled": 1
  }'

删除 Rule

curl -X DELETE 'http://localhost:8080/api/v1/rules/1' \
  -H 'Authorization: Bearer admin-sk-change-me'

启用 Rule

curl -X PATCH 'http://localhost:8080/api/v1/rules/1/enable' \
  -H 'Authorization: Bearer admin-sk-change-me'

禁用 Rule

curl -X PATCH 'http://localhost:8080/api/v1/rules/1/disable' \
  -H 'Authorization: Bearer admin-sk-change-me'

启用规则下某渠道

curl -X PATCH 'http://localhost:8080/api/v1/rules/1/channels/1/enable' \
  -H 'Authorization: Bearer admin-sk-change-me'

禁用规则下某渠道

curl -X PATCH 'http://localhost:8080/api/v1/rules/1/channels/1/disable' \
  -H 'Authorization: Bearer admin-sk-change-me'

Message Logs

查询消息记录

curl -X GET 'http://localhost:8080/api/v1/message-logs?source=trading-system&event=trade.open&status=success&page=1&page_size=20' \
  -H 'Authorization: Bearer admin-sk-change-me'

AI crypto signalscrypto-strategy

Sourcecrypto-strategy。渠道:safew_ai_crypto_signals。条件:strategyCode = ai-crypto-signals

事件:开仓(多/空)→ trade.open;止盈 → trade.gain;止损 → trade.close。空单开仓不再发 trade.sell

开仓渲染示例:

预警时间:2026-08-16 03:20:13
预警币种:APE
交易方向:做多
建议杠杆:31x
入场区域:0.1235
风险控制(止损):0.1223
止盈目标:
TP10.1241
TP20.1247
TP30.1253
TP40.1259
TP50.1265
推送时间:2026-08-16 03:20:13

止盈渲染示例:

止盈时间:2026-08-16 16:29:23
预警币种:LTC
执行操作:到达第一止盈 (TP1)
平仓点位:44.63
预警收益:+14.2793%
预警周期:53分钟

止损渲染示例:

止损时间:2026-08-16 16:17:15
预警币种:ETH
执行操作:触发止损
平仓点位:1887
最终损益:-30.1557%

创建开仓模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "ai_crypto_signals_open",
    "content": "预警时间:{{.pushedAt}}\n预警币种:{{.symbol}}\n交易方向:{{case .side \"LONG\" \"做多\" \"SHORT\" \"做空\"}}\n{{line \"建议杠杆\" .leverageText}}入场区域:{{.entryRange}}\n{{line \"风险控制(止损)\" .stopLossPrice}}止盈目标:\n{{with .tp1}}TP1{{.}}\n{{end}}{{with .tp2}}TP2{{.}}\n{{end}}{{with .tp3}}TP3{{.}}\n{{end}}{{with .tp4}}TP4{{.}}\n{{end}}{{with .tp5}}TP5{{.}}\n{{end}}推送时间:{{.pushedAt}}"
  }'

创建止盈模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "ai_crypto_signals_gain",
    "content": "止盈时间:{{.pushedAt}}\n预警币种:{{.symbol}}\n执行操作:{{.closeAction}}\n平仓点位:{{.price}}\n预警收益:{{.revenueDisplay}}\n{{line \"预警周期\" .holdPeriod}}"
  }'

创建止损模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "ai_crypto_signals_close",
    "content": "止损时间:{{.pushedAt}}\n预警币种:{{.symbol}}\n执行操作:触发止损\n平仓点位:{{.price}}\n最终损益:{{.revenueDisplay}}\n{{line \"预警周期\" .holdPeriod}}"
  }'

创建开仓 / 止盈 / 止损规则

curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "AI crypto signals 开仓",
    "source_name": "crypto-strategy",
    "event": "trade.open",
    "template_name": "ai_crypto_signals_open",
    "channels": ["safew_ai_crypto_signals"],
    "conditions": [
      {"field": "strategyCode", "op": "eq", "value": "ai-crypto-signals"}
    ],
    "enabled": 1
  }'
curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "AI crypto signals 止盈",
    "source_name": "crypto-strategy",
    "event": "trade.gain",
    "template_name": "ai_crypto_signals_gain",
    "channels": ["safew_ai_crypto_signals"],
    "conditions": [
      {"field": "strategyCode", "op": "eq", "value": "ai-crypto-signals"}
    ],
    "enabled": 1
  }'
curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "AI crypto signals 止损",
    "source_name": "crypto-strategy",
    "event": "trade.close",
    "template_name": "ai_crypto_signals_close",
    "channels": ["safew_ai_crypto_signals"],
    "conditions": [
      {"field": "strategyCode", "op": "eq", "value": "ai-crypto-signals"}
    ],
    "enabled": 1
  }'

AG 趋势 / 异动 / 波段跟踪(crypto-strategy

Sourcecrypto-strategy。Convert 后事件为 AGTS.* / AMA.* / BTS.*(与 trade.* 分开,避免和 AI crypto signals 抢精确匹配)。

策略 strategyCode 样例 payload Convert event
AG趋势 AGTS isSale 开仓,带 gainPrices / openPrice2 / lossPrice AGTS.open
异动 AMA 开仓,仅 price AMA.open
波段跟踪 BTS isClose=true,仅 price BTS.close

有效期按样例写死:AG 6 天、异动 2-4 天、波段 17h。波段周期含 2h2小时

创建 AG 趋势模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "ag_trend",
    "content": "监控告警提醒\n\n操作策略:AG趋势{{case .symbol \"BTCUSDT\" \"BTC\" \"ETHUSDT\" \"ETH\" \"SOLUSDT\" \"SOL\" \"BNBUSDT\" \"BNB\" .symbol}}-{{case .period \"1h\" \"1小时\" \"2h\" \"2小时\" \"4h\" \"4小时\" \"6h\" \"6小时\" \"15m\" \"15分钟\" \"5m\" \"5分钟\" \"30m\" \"30分钟\" \"1d\" \"1日\" .period}}周期{{case .side \"LONG\" \"做多\" \"SHORT\" \"做空\"}}\n\n提醒时间:{{.pushedAt}}\n\n{{with .takeProfitRange}}止盈目标:{{.}}\n\n{{else}}{{with .takeProfitPrice}}止盈目标:{{.}}\n\n{{end}}{{end}}{{with .entryRange}}介入区间:{{.}}\n\n{{else}}{{with .price}}介入区间:{{.}}\n\n{{end}}{{end}}{{with .stopLossPrice}}止损价位:{{.}}\n\n{{end}}有效期:6天"
  }'

创建异动预警模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "anomaly_alert",
    "content": "监控告警提醒\n\n监控名称:异动预警\n\n监控时间:{{.pushedAt}}\n\n监控目标:{{case .symbol \"BTCUSDT\" \"BTC\" \"ETHUSDT\" \"ETH\" \"SOLUSDT\" \"SOL\" \"BNBUSDT\" \"BNB\" .symbol}}异动预警(暴涨/跌)生效\n\n监控提醒:异动发生概率v1(v1<v2<v3)\n\n有效期:2-4天"
  }'

创建波段跟踪模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "swing_track",
    "content": "监控告警提醒\n\n监控名称:波段跟踪触发{{case .symbol \"BTCUSDT\" \"BTC\" \"ETHUSDT\" \"ETH\" \"SOLUSDT\" \"SOL\" \"BNBUSDT\" \"BNB\" .symbol}}-{{case .period \"1h\" \"1小时\" \"2h\" \"2小时\" \"4h\" \"4小时\" \"6h\" \"6小时\" \"15m\" \"15分钟\" \"5m\" \"5分钟\" \"30m\" \"30分钟\" \"1d\" \"1日\" .period}}周期{{case .side \"LONG\" \"做多\" \"SHORT\" \"做空\"}}\n\n监控时间:{{.pushedAt}}\n\n监控提醒:当前提醒价格{{with .takeProfitRange}}{{.}}{{else}}{{with .entryRange}}{{.}}{{else}}{{.price}}{{end}}{{end}}\n\n监控状态:等待量化信号平仓\n\n有效期: 17h"
  }'

创建规则

curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "AG趋势",
    "source_name": "crypto-strategy",
    "event": "AGTS.*",
    "template_name": "ag_trend",
    "channels": ["safew_AG趋势", "safew_AG趋势02", "safew_AG趋势03"],
    "conditions": [{"field": "strategyCode", "op": "eq", "value": "AGTS"}],
    "enabled": 1
  }'
curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "异动预警",
    "source_name": "crypto-strategy",
    "event": "AMA.*",
    "template_name": "anomaly_alert",
    "channels": ["safew_异动策略", "safew_异动策略02", "safew_异动策略03"],
    "conditions": [{"field": "strategyCode", "op": "eq", "value": "AMA"}],
    "enabled": 1
  }'
curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "波段跟踪",
    "source_name": "crypto-strategy",
    "event": "BTS.*",
    "template_name": "swing_track",
    "channels": ["safew_波段跟踪02", "safew_波段跟踪03"],
    "conditions": [{"field": "strategyCode", "op": "eq", "value": "BTS"}],
    "enabled": 1
  }'

跟单策略(trade-signal

Sourcetrade-signal。渠道:safew_B龙策略。条件:strategyCode = BLONG

这是后续跟单策略的共用文案模板(开/加/平/减仓一套)。新跟单策略复用模板 跟单策略,再加一条 trade.* 规则(换 strategyCode、渠道,并在模板 case .strategyCode 里补中文名)。兜底规则 rule-11(测试AI)需 strategyCode ne 已拆出去的跟单 code,避免双发。

事件:OPENtrade.openADDtrade.addCLOSEtrade.closeREDUCEtrade.reduce;规则用 trade.* 全覆盖。

开仓渲染示例:

空单开仓
交易品种: ETH
开仓价格: 1898.76
开仓数量: 2.00
平均单价: 1898.76
杠杆: 100x
策略: B龙策略
推送时间: 2026.08.13 13:15:42

平仓 / 减仓不输出杠杆;加仓与开仓一样带杠杆。

创建跟单模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "跟单策略",
    "content": "{{case .side \"LONG\" \"多单\" \"SHORT\" \"空单\"}}{{case .action \"OPEN\" \"开仓\" \"ADD\" \"加仓\" \"CLOSE\" \"平仓\" \"REDUCE\" \"减仓\"}}\n交易品种: {{case .symbol \"ETHUSDT\" \"ETH\" \"BTCUSDT\" \"BTC\" \"SOLUSDT\" \"SOL\" \"BNBUSDT\" \"BNB\" .symbol}}\n{{case .action \"OPEN\" \"开仓价格\" \"ADD\" \"加仓价格\" \"CLOSE\" \"平仓价格\" \"REDUCE\" \"减仓价格\"}}: {{printf \"%.2f\" .price}}\n{{case .action \"OPEN\" \"开仓数量\" \"ADD\" \"加仓数量\" \"CLOSE\" \"平仓数量\" \"REDUCE\" \"减仓数量\"}}: {{printf \"%.2f\" .quantity}}\n平均单价: {{printf \"%.2f\" .avgPrice}}\n{{if or (eq .action \"OPEN\") (eq .action \"ADD\")}}{{if .leverage}}杠杆: {{.leverage}}x\n{{end}}{{end}}策略: {{case .strategyCode \"BLONG\" \"B龙策略\" .strategyCode}}\n推送时间: {{.pushedAt}}"
  }'

创建 B龙规则

curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "B龙策略",
    "source_name": "trade-signal",
    "event": "trade.*",
    "template_name": "跟单策略",
    "channels": ["safew_B龙策略"],
    "conditions": [
      {"field": "strategyCode", "op": "eq", "value": "BLONG"}
    ],
    "enabled": 1
  }'

巴菲特激进 / 稳健(trade-signal

Sourcetrade-signal。渠道:safew_巴菲特策略safew_巴菲特策略2safew_巴菲特策略3(三个不同群;巴菲特02/03 与策略2/3 是同一 chat,不要重复绑)。

策略 code:激进 PUTEJJ、稳健 PUTEWJ,共用上游 rawMessage(激进版 / 稳健版文案已在原文里)。加仓也是「市价开多/开空」,走开仓规则。

兜底 rule-11strategyCode ne PUTEJJne PUTEWJ,避免再发到测试AI。

启动文案(普达特量化机器人…启动)不含「市价开 / 平仓 / 本周期」,三条规则都匹配不上,等于过滤。

开仓 rawMessage 示例:

激进版AI 1.0
市价开空
交易品种: BTC
开空数量: 1.00
开空价格: 63578.00
持仓数量: 1.00
平均价格: 63578.00
浮动盈亏: 0.00
账户净值: 101286.40
账户余额:101286.40
Time: 2026.08.17 14:46:04

创建模板

curl -X POST 'http://localhost:8080/api/v1/templates' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "巴菲特策略",
    "content": "{{if .rawMessage}}{{replace .rawMessage \"Time:\" \"推送时间:\"}}{{else}}{{.formatted}}{{end}}"
  }'

线上若尚未部署 replace,先用 {{if .rawMessage}}{{.rawMessage}}{{else}}{{.formatted}}{{end}}

创建开仓 / 平仓 / 提现规则

curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "巴菲特开仓",
    "source_name": "trade-signal",
    "event": "trade.*",
    "template_name": "巴菲特策略",
    "channels": ["safew_巴菲特策略", "safew_巴菲特策略2", "safew_巴菲特策略3"],
    "conditions": [{"field": "rawMessage", "op": "contains", "value": "市价开"}],
    "enabled": 1
  }'
curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "巴菲特平仓",
    "source_name": "trade-signal",
    "event": "trade.*",
    "template_name": "巴菲特策略",
    "channels": ["safew_巴菲特策略", "safew_巴菲特策略2", "safew_巴菲特策略3"],
    "conditions": [{"field": "rawMessage", "op": "contains", "value": "平仓"}],
    "enabled": 1
  }'
curl -X POST 'http://localhost:8080/api/v1/rules' \
  -H 'Authorization: Bearer admin-sk-change-me' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "巴菲特提现",
    "source_name": "trade-signal",
    "event": "trade.*",
    "template_name": "巴菲特策略",
    "channels": ["safew_巴菲特策略", "safew_巴菲特策略2", "safew_巴菲特策略3"],
    "conditions": [{"field": "rawMessage", "op": "contains", "value": "本周期"}],
    "enabled": 1
  }'