hqharnesstools · 内网 mediaUrl 换 COS 临时外链
chatbot 上行给 hqharness 的富媒体使用内网 HMAC URL(/api/internal/...?sig=...),
供同网段 agent 拉取字节。当 hqharnesstools 需将图片 / 视频 URL 直接交给外部大模型时,
可调用本接口将 WS 帧中的 messages[].mediaUrl 兑换为 COS 预签名公网临时链接。
文档类 file 仍建议内网 GET 下载后在 hqharnesstools 内处理。
详细协议见仓库文档
docs/hqh-inbound-rich-media-对接说明.md。
接口基址:/api/internal/media/presign
兑换 COS 预签名 URL
POST
/api/internal/media/presign
请求头
| Header | 必填 | 说明 |
Content-Type |
是 |
application/json |
请求体
| 字段 | 类型 | 说明 |
mediaUrl 必填 |
string |
上行 WS 帧中的内网 messages[].mediaUrl,可为完整 URL 或仅 path+query。
示例:http://10.0.0.5:8080/api/internal/wecom/msgaudit/media/MSGID?sig=...
或 /api/internal/sim/media/{id}?sig=...
|
请求示例
curl -sS -X POST 'http://<chatbot-internal-host>/api/internal/media/presign' \
-H 'Content-Type: application/json' \
-d '{"mediaUrl":"http://10.0.0.5:8080/api/internal/wecom/msgaudit/media/MSGID?sig=abc123..."}'
响应字段(200)
| 字段 | 类型 | 说明 |
url | string | COS 预签名 GET URL,可公网访问,有效期内可直接交给外部 LLM |
expiresAt | string (ISO-8601) | 预签名过期时间(UTC) |
contentType | string | null | 媒体 MIME,如 image/jpeg |
响应示例
{
"url": "https://your-bucket.cos.ap-guangzhou.myqcloud.com/wecom-msgaudit/...?sign=...",
"expiresAt": "2026-07-12T16:04:00Z",
"contentType": "image/jpeg"
}
前置条件与配置
- COS 已启用:
COS_ENABLED=true,并配置 COS_SECRET_ID、COS_SECRET_KEY、COS_BUCKET、COS_REGION
- 预签名 TTL:
COS_PRESIGN_TTL_SECONDS(默认 3600 秒),过期后需重新调用本接口
- 调用方(hqharnesstools)须与 chatbot 在同一内网,或 IP 落在
WECOM_MSGAUDIT_AGENT_MEDIA_ALLOWED_CIDRS 内
- 外部 LLM 须能访问 COS 域名(或平台 SSRF 白名单已放行 COS 域名)
TypeScript 调用示例
if (item.contentType === 'image' || item.contentType === 'video') {
const resp = await fetch(`${CHATBOT_BASE}/api/internal/media/presign`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ mediaUrl: item.mediaUrl }),
});
if (!resp.ok) throw new Error(`presign failed: ${resp.status}`);
const { url } = await resp.json();
// 将 url 传给外部大模型
}