Files
aiaa-notification-server/docs/httpie/curls.md
T
ryan f5f64f7653 feat(crypto策略): 支持 AI 信号止盈止损事件与多字段渲染
Motivation:
区分止盈与止损事件,并为 AI crypto signals 策略提供更丰富的推送内容渲染能力(杠杆、止盈档位、收益、持仓周期等)。

Changes:

* 开仓(多/空,含原 isSale 空单)统一映射为 trade.open,不再发 trade.sell
* 新增 trade.gain 事件用于止盈,止损仍映射为 trade.close;HLSS 策略保持原有事件映射
* 新增 leverageText、tp1~tp5、closeAction、revenueDisplay、holdPeriod 等渲染字段
* 新增收益符号、止盈档位、持仓周期等格式化逻辑
* 补充 AI crypto signals 的模板与规则文档及单元测试
2026-08-17 00:54:01 +08:00

13 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
  }'