2026-07-07 02:49:53 +08:00
|
|
|
|
{
|
|
|
|
|
|
"id": "com.yuxi.channels.wechat_woc",
|
|
|
|
|
|
"name": "微信 WechatOnCloud",
|
|
|
|
|
|
"version": "1.0.0",
|
|
|
|
|
|
"channel_type": "wechat_woc",
|
|
|
|
|
|
"icon": "smartphone",
|
|
|
|
|
|
"entry_module": "yuxi.channels.plugins.wechat_woc.entry",
|
|
|
|
|
|
"provides": ["wechat_woc"],
|
|
|
|
|
|
"lifecycle": ["init", "start", "stop", "pause", "resume", "unload", "reconfigure", "fail"],
|
|
|
|
|
|
"compatibility": {
|
|
|
|
|
|
"min_host_version": "1.0.0",
|
2026-07-08 00:17:39 +08:00
|
|
|
|
"woc_bridge_version": "1.5.0"
|
2026-07-07 02:49:53 +08:00
|
|
|
|
},
|
|
|
|
|
|
"failure_policy": "degrade",
|
|
|
|
|
|
"depends": [],
|
|
|
|
|
|
"critical": false,
|
|
|
|
|
|
"requires_dm_pairing": true,
|
|
|
|
|
|
"requires_outbound_delivery": true,
|
|
|
|
|
|
"credential_strategy": {
|
|
|
|
|
|
"type": "static",
|
|
|
|
|
|
"acquire_method": "manual",
|
|
|
|
|
|
"required_fields": ["bridge_url", "bridge_token"],
|
|
|
|
|
|
"optional_fields": [],
|
|
|
|
|
|
"supports_rotation": false,
|
|
|
|
|
|
"supports_revocation": false
|
|
|
|
|
|
},
|
|
|
|
|
|
"max_message_length": 2000,
|
|
|
|
|
|
"supports_credential_cloning": false,
|
2026-07-08 00:17:39 +08:00
|
|
|
|
"transport_mode": "both",
|
2026-07-09 20:26:49 +08:00
|
|
|
|
"max_restart_attempts": 10,
|
2026-07-07 02:49:53 +08:00
|
|
|
|
"capabilities": {
|
|
|
|
|
|
"rich_message": false,
|
|
|
|
|
|
"streaming": false,
|
|
|
|
|
|
"typing_indicator": false,
|
|
|
|
|
|
"message_edit": false,
|
|
|
|
|
|
"message_recall": false,
|
|
|
|
|
|
"supports_reaction": false,
|
|
|
|
|
|
"supports_pin": false,
|
|
|
|
|
|
"supports_card_update": false,
|
|
|
|
|
|
"supports_card_update_streaming": false,
|
|
|
|
|
|
"supports_image_inbound": true,
|
|
|
|
|
|
"supports_video_inbound": true,
|
|
|
|
|
|
"supports_image_outbound": false,
|
|
|
|
|
|
"supports_video_outbound": false,
|
|
|
|
|
|
"mention": false,
|
|
|
|
|
|
"command": false,
|
|
|
|
|
|
"directory": true,
|
|
|
|
|
|
"doctor": true,
|
|
|
|
|
|
"whitelist": true,
|
|
|
|
|
|
"wizard": true,
|
|
|
|
|
|
"tools": false,
|
|
|
|
|
|
"status": true,
|
|
|
|
|
|
"probeable": true,
|
|
|
|
|
|
"identity_resolver": false,
|
|
|
|
|
|
"lifecycle": true,
|
|
|
|
|
|
"supports_qr_login": true,
|
2026-07-09 20:26:49 +08:00
|
|
|
|
"agent_collaboration": false,
|
|
|
|
|
|
"network_access": true
|
2026-07-07 02:49:53 +08:00
|
|
|
|
},
|
|
|
|
|
|
"capability_requirements": [
|
|
|
|
|
|
["supports_image_inbound", ["bridge_url", "bridge_token"]],
|
|
|
|
|
|
["supports_video_inbound", ["bridge_url", "bridge_token"]],
|
|
|
|
|
|
["directory", ["bridge_url", "bridge_token"]],
|
|
|
|
|
|
["doctor", ["bridge_url", "bridge_token"]],
|
|
|
|
|
|
["whitelist", ["bridge_url", "bridge_token"]],
|
|
|
|
|
|
["wizard", ["bridge_url", "bridge_token"]],
|
|
|
|
|
|
["status", []],
|
|
|
|
|
|
["probeable", []],
|
|
|
|
|
|
["lifecycle", []],
|
|
|
|
|
|
["supports_qr_login", ["bridge_url", "bridge_token"]]
|
|
|
|
|
|
],
|
|
|
|
|
|
"resource_quota": {
|
|
|
|
|
|
"max_cpu": "15.0",
|
|
|
|
|
|
"max_memory": "128MB",
|
|
|
|
|
|
"max_connections": 10,
|
|
|
|
|
|
"max_calls_per_sec": 10
|
|
|
|
|
|
},
|
|
|
|
|
|
"accessible_ports": [
|
|
|
|
|
|
"ConfigPort",
|
|
|
|
|
|
"LoggerPort",
|
|
|
|
|
|
"PersistencePort",
|
|
|
|
|
|
"CachePort"
|
|
|
|
|
|
],
|
|
|
|
|
|
"injectable_pipelines": ["inbound", "outbound"],
|
|
|
|
|
|
"config_schema": [
|
2026-07-09 20:26:49 +08:00
|
|
|
|
{"key": "bridge_url", "type": "string", "required": true, "default": null, "hot_reloadable": true, "sensitive": true, "scope": "account", "constraints": {"pattern": "^https://"}},
|
2026-07-07 02:49:53 +08:00
|
|
|
|
{"key": "bridge_token", "type": "string", "required": true, "default": null, "hot_reloadable": true, "sensitive": true, "scope": "account", "constraints": {}},
|
|
|
|
|
|
{"key": "poll_interval_ms", "type": "integer", "required": false, "default": 2000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 1000, "max": 10000}},
|
|
|
|
|
|
{"key": "max_batch_size", "type": "integer", "required": false, "default": 50, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 10, "max": 200}},
|
2026-07-08 00:17:39 +08:00
|
|
|
|
{"key": "max_message_length", "type": "integer", "required": false, "default": 2000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 500, "max": 5000}},
|
|
|
|
|
|
{"key": "sse_heartbeat_interval_ms", "type": "integer", "required": false, "default": 30000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 10000, "max": 60000}, "description": "SSE 心跳间隔(毫秒),bridge 默认 30s 发 heartbeat 事件保活"},
|
|
|
|
|
|
{"key": "sse_connect_timeout_ms", "type": "integer", "required": false, "default": 10000, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 5000, "max": 30000}, "description": "SSE 连接建立超时(毫秒)"},
|
2026-07-09 20:26:49 +08:00
|
|
|
|
{"key": "sse_read_timeout_s", "type": "integer", "required": false, "default": 120, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 30, "max": 600}, "description": "SSE 流式接收读取超时(秒),bridge 30s heartbeat 保活,此处仅兜底防挂死"},
|
|
|
|
|
|
{"key": "allow_insecure_localhost", "type": "boolean", "required": false, "default": false, "hot_reloadable": true, "scope": "channel", "constraints": {}, "description": "开发环境豁免开关:true 时允许 http://localhost/127.0.0.1/::1 的 bridge_url,生产环境必须为 false"},
|
|
|
|
|
|
{"key": "max_backfill_pages", "type": "integer", "required": false, "default": 50, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 1, "max": 200}, "description": "SSE 断线补全分页上限(页数),超限时中断补全,剩余消息依赖 Puller 兜底"},
|
|
|
|
|
|
{"key": "max_backfill_messages", "type": "integer", "required": false, "default": 500, "hot_reloadable": true, "scope": "channel", "constraints": {"min": 10, "max": 5000}, "description": "SSE 断线补全消息总数上限,超限时中断补全"},
|
|
|
|
|
|
{"key": "signature_required", "type": "boolean", "required": false, "default": false, "hot_reloadable": true, "scope": "channel", "constraints": {}, "description": "是否强制校验 bridge 请求签名,true 时 verifySignature 校验 signature_token"},
|
|
|
|
|
|
{"key": "signature_token", "type": "string", "required": false, "default": null, "hot_reloadable": true, "sensitive": true, "scope": "channel", "constraints": {}, "description": "bridge 请求签名共享密钥,signature_required=true 时生效"}
|
2026-07-07 02:49:53 +08:00
|
|
|
|
],
|
|
|
|
|
|
"env_vars": [
|
2026-07-09 20:26:49 +08:00
|
|
|
|
{"name": "WOC_BRIDGE_URL", "description": "bridge 服务默认地址(可被 config_schema 覆盖)", "required": false, "default": "https://localhost:8088", "sensitive": false},
|
2026-07-07 02:49:53 +08:00
|
|
|
|
{"name": "WOC_POLL_INTERVAL_MS", "description": "短轮询间隔(毫秒)", "required": false, "default": "2000", "sensitive": false},
|
|
|
|
|
|
{"name": "WOC_MAX_BATCH_SIZE", "description": "单次拉取消息上限", "required": false, "default": "50", "sensitive": false},
|
|
|
|
|
|
{"name": "WOC_MAX_CALLS_PER_SEC", "description": "每秒调用上限", "required": false, "default": "10", "sensitive": false},
|
|
|
|
|
|
{"name": "WOC_HTTP_TIMEOUT_MS", "description": "HTTP 客户端超时(毫秒)", "required": false, "default": "30000", "sensitive": false}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|